您的位置:首页 > 数据库

Hibernate之QBC查询与本地SQL查询

2015-11-11 22:34 225 查看
1. QBC查询:

QBC 查询就是通过使用Hibernate提供的QueryByCriteria API 来查询对象,这种API封装了SQL语句的动态拼装,对查询提供了更加面向对象的功能接口
QBC查询示例(接HQL查询,使用上一篇相同的环境):
@Test
public void testQBC(){
//1.  创建一个Criteria 对象
Criteria criteria=session.createCriteria(Employee.class);

//2. 添加查询条件 :在QBC中,查询条件使用Criterion来表示
//   Criterion 可以通过Restrictions的静态方法得到
criteria.add(Restrictions.eq("email", "name4@qq.com"));
criteria.add(Restrictions.between("salary", 3000F, 10000F));

//3. 执行查询
Employee emp=(Employee) criteria.uniqueResult();
System.out.println(emp.getName());
System.out.println(emp.getDept().getName());
}
@Test
public void testQBC3(){
Criteria criteria=session.createCriteria(Employee.class);
// 添加排序
criteria.addOrder(Order.asc("salary"));
criteria.addOrder(Order.desc("email"));

// 添加分页
int pageSize=5;
int pageNo=3;
criteria.setFirstResult((pageNo-1)*pageSize)
.setMaxResults(pageSize)
.list();

}

@Test
public void testQBC2(){
Criteria criteria=session.createCriteria(Employee.class);
// 统计查询  使用Projection表示,可以由Projections的静态方法得到
criteria.setProjection(Projections.max("salary"));
System.out.println(criteria.uniqueResult());
}

@Test
public void testQBC1(){
Criteria criteria=session.createCriteria(Employee.class);

//1 AND:使用Conjunction表示
//      Conjunction 本身就是一个 Criterion对象
//      且其中还可以添加Criterion对象
Conjunction conjunction=Restrictions.conjunction();
conjunction.add(Restrictions.isNotNull("email"));
conjunction.add(Restrictions.eq("salary", 6000F));

//2 OR: 使用Disjunction表示
Disjunction disjunction=Restrictions.disjunction();
disjunction.add(Restrictions.eq("name", "name6"));
disjunction.add(Restrictions.like("email", "name"));

criteria.add(disjunction);
criteria.add(conjunction);

Employee emp=(Employee) criteria.uniqueResult();

System.out.println(emp.getName());
System.out.println(emp.getDept().getName());
}
其它关于QBC查询用法,参考Hibernate的操作手册:hibernate-release-4.2.5.Final\documentation\manual\en-US\html_single\index.html

2. 本地SQL查询:

本地SQL查询来完善HQL不能涵盖所有的查询特性
@Test
public void testNativeSQL(){
String sql="insert into department values(?,?)";
Query query=session.createSQLQuery(sql);
query.setInteger(0, 9)
.setString(1, "umendme")
.executeUpdate();
}
同样本地sql查询相关内容也参看操作手册
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: