您的位置:首页 > 数据库

QBC检索和本地SQL检索

2017-12-21 20:12 253 查看
QBC 查询就是通过使用 Hibernate 提供的 Query By Criteria API 来查询对象,这种 API 封装了 SQL 语句的动态拼装,对查询提供了更加面向对象的功能接口

本地SQL查询来完善HQL不能涵盖所有的查询特性

步骤

创建criteria 对象

设置各种检索条件

执行检索

and 与 or

@Test
public   void TestQbcAnd(){
Criteria criteria=session.createCriteria(Student.class);

//使用conjunction来表示and,本身也是一个criterion对象
Conjunction cons=Restrictions.conjunction();
cons.add(Restrictions.like("name", "s", MatchMode.ANYWHERE));
Grade grade=new Grade();

//criteria 对象添加criterion 对象
criteria.add(cons);
//System.out.println(criteria.list());

//使用disjunction表示or
Disjunction dis=Restrictions.disjunction();
dis.add(Restrictions.eq("gender", "男"));
dis.add(Restrictions.isNull("grade"));

criteria.add(dis);
System.out.println(criteria.list());
}


projection 统计查询

//统计查询
@Test
public   void TestQbcPrejunction(){
Criteria criteria=session.createCriteria(Student.class);
//用projection来统计查询
criteria.setProjection(Projections.count("sid"));

System.out.println(criteria.uniqueResult());
}


添加排序和设置翻页

//添加排序
@Test
public   void TestQbcOrder(){
Criteria criteria=session.createCriteria(Student.class);
//用projection来统计查询
criteria.addOrder(Order.desc("name"));

//设置翻页
int pageNo=2;
int pageSize=5;
criteria.setFirstResult((pageNo-1)*pageSize);
criteria.setMaxResults(pageSize);

System.out.println(criteria.list());
}


本地sql查询

hql和qbc有局限。这时候就需要利用原生sql语句

@Test
public   void TestQbcSql(){
String sql="insert into student (name) Values('ok')";
SQLQuery sqlQuery=session.createSQLQuery(sql);
sqlQuery.executeUpdate();
}


hql 也可以执行更新和删除

@Test
public   void TestQbcUpdate(){
String hql="delete from Student s where s.name='ok'";
Query query=session.createQuery(hql);
query.executeUpdate();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: