本文主要是介绍Hibernate查询方式——QBC查询方式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
参考文:
Hibernate查询方式汇总 http://blog.sina.com.cn/s/blog_7ffb8dd501014a6o.html
第十一章 Hibernate的查询 Query by Criteria(QBC) http://ju.outofmemory.cn/entry/30525
Hibernate总的来说共有三种查询方式:HQL、QBC和SQL三种。重点介绍QBC方式,QBC(QueryByCriteria)查询方式是Hibernate提供的“更加面向对象”的一种检索方式。QBC在条件查询上比HQL查询更为灵活,而且支持运行时动态生成查询语句。
1、在Hibernate应用中使用QBC查询通常经过3个步骤
(1)使用Session实例的createCriteria()方法创建Criteria对象
(2)使用工具类Restrictions的相关方法为Criteria对象设置查询对象
(3)使用Criteria对象的list()方法执行查询,返回查询结果
2、一般的用法:
//查询名字为zhangsan的用户Criteria criteria = session.createCriteria(User.class);criteria.add(Restrictions.eq("username", "zhangsan"));List users = criteria.list();for(User user : users){System.out.println(user.getId() + "--" + user.getUsername());}
3、Restrictions用法
Restrictions类的常用方法:
Restrictions类的常用方法:
方法名称 | 描述 |
Restrictions.eq | 等于 |
Restrictions.allEq | 使用Map,Key/Valu进行多个等于的比对 |
Restrictions.gt | 大于 |
Restrictions.ge | 大于等于 |
Restrictions.lt | 小于 |
Restrictions.le | 小于等于 |
Restrictions.between | 对应SQL的between |
Restrictions.like | 对应SQL的like |
Restrictions.in | 对应SQL的in |
Restrictions.and | and关系 |
Restrictions.or | or关系 |
Restrictions.sqlRestriction | SQL限定查询 |
Order类的常用方法:
方法名称 | 描述 |
Order.asc | 升序 |
Order.desc | 降序 |
Projections类的常用方法
方法名称 | 描述 |
Projections.avg | 求平均值 |
Projections.count | 统计某属性的数量 |
Projections.countDistinct | 统计某属性不同值的数量 |
Projections.groupProperty | 指定某个属性为分组属性 |
Projections.max | 求最大值 |
Projections.min | 求最小值 |
Projections.projectionList | 创建一个ProjectionList对象 |
Projections.rowCount | 查询结果集中的记录条数 |
Projections.sum | 求某属性的合计 |
查询id大于100,小于200的用户:
Criteria criteria = session.createCriteria(User.class);criteria.add(Restrictions.gt("id", 100)).add(Restrictions.lt("id", 200));List users = criteria.list();for(User user : users){System.out.println(user.getId() + "--" + user.getUsername());}
4、QBE (Query ByExample)
通过Example工具类,判断Example. create(example)传进来的example对象里面各个属性是否与数据库中配置。
//查询名字为zhanglinlin的所有的用户Criteria criteria = session.createCriteria(User.class);User example = new User();example.setUsername("zhanglinlin");criteria.add(Example.create(example));List users = criteria.list();for(User user : users){System.out.println(user.getId() + "--" + user.getUsername());}
5、Order提供设置排序方式
Order.asc(StringpropertyName)
升序排序
Order.desc(StringpropertyName)
降序排序
Criteria criteria = session.createCriteria(User.class);User example = new User();example.setUsername("zhanglinlin");criteria.add(Example.create(example));//criteria.addOrder(Order.asc("id"));criteria.addOrder(Order.desc("id"));List users = criteria.list();for(User user : users){System.out.println(user.getId() + "--" + user.getUsername());}
6、Projections提供对查询结果进行统计与分组操作
Porjections.avg(StringpropertyName)
求某属性的平均值
Projections.count(StringpropertyName)
统计某属性的数量
Projections.countDistinct(StringpropertyName)
统计某属性的不同值的数量
Projections.groupProperty(StringpropertyName)
指定一组属性值
Projections.max(StringpropertyName)
某属性的最大值
Projections.min(StringpropertyName)
某属性的最小值
Projections.projectionList()
创建一个新的projectionList对象
Projections.rowCount()
查询结果集中记录的条数
Projections.sum(StringpropertyName)
返回某属性值的合计
//查询有多少个人的名字为zhanglinlin的Criteria criteria = session.createCriteria(User.class);User example = new User();example.setUsername("zhanglinlin");criteria.add(Example.create(example));criteria.setProjection(Projections.count("id"));Integer count = (Integer) criteria.uniqueResult();System.out.println(count);
Criteria criteria = session.createCriteria(User.class);User example = new User();example.setUsername("zhanglinlin");criteria.add(Example.create(example));criteria.setFirstResult(0); //从哪一个记录开始criteria.setMaxResults(5);//取多少条记录List users = criteria.list();for(User user : users){System.out.println(user.getId() + "--" + user.getUsername());}
这篇关于Hibernate查询方式——QBC查询方式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!