Criteria查询.docx
- 文档编号:7335781
- 上传时间:2023-01-23
- 格式:DOCX
- 页数:8
- 大小:151.93KB
Criteria查询.docx
《Criteria查询.docx》由会员分享,可在线阅读,更多相关《Criteria查询.docx(8页珍藏版)》请在冰豆网上搜索。
Criteria查询
Hibernate的三种查询方式
1.HQL(HibernateQueryLanuage)语句,这是类似SQL语句的一种对象化查询语句.
2.使用Criteria对象,进行按条件查询(QuerybyCriteria,简称QBC)和按示例查询(QuerybyExample简称QBE).
3.生成原生的sql(NativeSQL)语句.
Criteria的基本使用
Java代码
1.Transaction tx = session.beginTransaction();
2.Criteria criteria = session.createCriteria(Testbook.class);
3.List
4.mit();
查询Testbook中所有的数据,然后返回
Criteria接口的核心方法
add() 增加一个代表查询条件的Criterion对象
addOrder() 增加一个代表排序的Criterion对象
createAlias() 创建关联查询,为所关联的持久化类建立别名
createCriteria() 在相互关联的持久化类之间建立条件约束
setFirstResult() 设定要获取的第一条记录的位置
setMaxResults() 设定要获取的记录的最大数量
list() 获取满足查询条件的记录的集合
uniqueResult() 获取满足查询条件的唯一记录
对查询结果进行排序
Java代码
1.Transaction tx = session.beginTransaction();
2.Criteria criteria = session.createCriteria(Testbook.class).add(
3.Restrictions.like("name","任%")).add(Restrictions.between("id",1000,1010));
4.criteria.addOrder(Order.desc("id")).addOrder(Order.asc("createdTime"));
5.List
6.mit();
实现分页显示数据
Java代码
1. x-small;">Transaction tx = session.beginTransaction(); 2.Criteria criteria = session.createCriteria(Testbook.class).add( 3.Restrictions.like("name","任%")); 4.criteria.addOrder(Order.desc("id")); 5.criteria.setMaxResults(30); 6.criteria.setFirstResult(10);//setFirstResult()从0开始计数 7.List 8.mit();
只查询一条记录
Java代码
1.Transaction tx = session.beginTransaction();
2.Criteria criteria = session.createCriteria(Testbook.class).add(
3.Restrictions.like("name","任%"));
4.criteria.addOrder(Order.desc("id"));
5.criteria.setMaxResults
(1);
6.Testbook tb=(Testbook)criteria.uniqueResult();
7.mit();
Restrictions类
<----------------------------------------------------------------------------------------------------------->
条件"或"方式组合查询条件
Java代码
1.Transaction tx = session.beginTransaction();
2.Criteria criteria=session.createCriteria(Testbook.class);
3.Criterion criterion1=Restrictions.or(Restrictions.like("name","任%"),
4.Restrictions.between("id",1000,1010));
5.criteria.add(criterion1);
6.List
7.mit();
使用原生SQL语句设定查询条件
Java代码
1.Transaction tx = session.beginTransaction();
2.Criteria criteria=session.createCriteria(Testbook.class);
3.criteria.add(Restrictions.sqlRestriction("{alias}.name=?
","Narcissus",Hibernate.STRING));
4.List
5.mit()
统计函数查询
Java代码
1.Transaction tx = session.beginTransaction();
2.Criteria criteria=session.createCriteria(Testbook.class);
3.criteria.setProjection(Projections.max("price"));
4.Double maxValue=(Double)criteria.uniqueResult();
5.mit();
6.System.out.println(maxValue);
统计函数组合查询条件
Java代码
1.Transaction tx = session.beginTransaction();
2.Criteria criteria=session.createCriteria(Testbook.class);
3.criteria.setProjection(Projections.max("price"));
4.Double maxValue=(Double)criteria.uniqueResult();
5.mit();
6.System.out.println(maxValue);
获取多个统计函数的值
Java代码
1.Transaction tx = session.beginTransaction();
2.Criteria criteria=session.createCriteria(Testbook.class);
3.ProjectionList proList=Projections.projectionList();
4.proList.add(Projections.max("price"));
5.proList.add(Projections.min("price"));
6.proList.add(Projections.avg("price"));
7.proList.add(Projections.sum("price"));
8.proList.add(Projections.count("price"));
9.proList.add(Projections.countDistinct("price"));
10.proList.add(Projections.rowCount());
11.criteria.setProjection(proList);
12.Object values[]=(Object[])criteria.uniqueResult();
13.mit();
分组查询
Java代码
1.Transaction tx = session.beginTransaction();
2.Criteria criteria=session.createCriteria(Testbook.class);
3.criteria.setProjection(Projections.groupProperty("price"));
4.List
5.mit();
分组统计
Java代码
1.Transaction tx = session.beginTransaction();
2.Criteria criteria=session.createCriteria(Testbook.class);
3.ProjectionList proList=Projections.projectionList();
4.proList.add(Projections.rowCount());//商品的个数
5.proList.add(Projections.sum("price"));
6.proList.add(Projections.groupProperty("name"));
7.criteria.setProjection(proList);
8.List
9.mit();
投影查询
在一个表中有很多个字段,投影查询只是查询某一个或多个字段,也称局部查询
Java代码
1.Transaction tx = session.beginTransaction();
2.Criteria criteria=session.createCriteria(Testbook.class);
3.criteria.setProjection(Property.forName("price"));
4.criteria.add(Restrictions.gt("price",new Double(40.0)))
5.List
6.mit();
使用Property类的forName()方法实现分组统计
Java代码
1.Transaction tx = session.beginTransaction();
2.Criteria criteria=session.createCriteria(Testbook.class);
3.ProjectionList proList=Projections.projectionList();
4.proList.add(Projections.forName("price").max());
5.proList.add(Projections.forName("price").min());
6.proList.add(Projections.forName("price").avg());
7.proList.add(Projections.forName("category.id").group().as("c"));
8.criteria.setProjection(proList);
9.criteria.addOrder(Order.desc("c"));
10.List
11.mit();
使用DetachedCriteria对象实现离线查询
Java代码
1.//在表现层,构造DetachedCriteria对象,保存用户动态的查询条件
2.DetachedCriteria detchedCriteria=DetachedCriteria.forClass(Testbook.class);
3.detchedCriteria.add(Restrictions.like("name","任%")).add(Restrictions.between("id",new Integer
(1),new Integer(10)));
4.detchedCriteria.addOrder(Order.desc("id"));
5.
6.//在业务逻辑层,DetachedCriteria对象与当前的Session对象进行绑定,获取查询结果
7.Session session=HibernateSessionFactoryUtil.getSessionFactory().getCurrentSession();
8.Transaction tx=detchedCriteria.getExecutableCriteria(session);
9.List
10.mit();
根据示例对象进行查询
先定义一个模板然后把这个模板的样式传进去,查询,例如这里定义的Testbook中的名字为Narcissus的字段,进行查询,条件可以为一个也可以为多个,对应的就是where中的条件
Java代码
1.Testbook tb=new Testbook();
2.tb.setName("Narcissus");
3.Session session=HibernateSessionFactoryUtil.getSessionFactory().getCurrentSession();
4.Transaction tx = session.beginTransaction();
5.Criteria criteria=session.createCriteria(Testbook.class);
6.Criteria.add(Example.creaate(tb));
7.List
8.mit();
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Criteria 查询