分页查询
条件查询
一个单独的查询条件是org.hibernate.criterion.Criterion 接口的一个实例org.hibernate.criterion.Restrictions类定义了获得某些内置Criterion类型的工厂方法。
排序
可以使用 org.hibernate.criterion.Order 来为查询结果排序。示例如下:
动态关联抓取
Criteria API同时也带有一些缺点。
1、性能问题
没有办法控制由Hibernate生成的SQL查询语句,如果生成的查询语句很慢,我们很难调整,数据库管理员可能非常不喜欢这样。
2、维护问题
所有的SQL查询散布在Java代码中,当一个查询出现错误时,我们可能需要花费大量的时间来找出问题所在。换句话说,存储在Hibernate映射文件中的命名查询更容易去维护。
没有什么东西是完美的,考虑我们项目的需要,明智地使用它。
- Criteria
crit = session.createCriteria(Order.class).setMaxResults(10).setFirstResult(1); - crit.list();
Criteria crit = session.createCriteria(Order.class).setMaxResults(10).setFirstResult(1); crit.list();
条件查询
一个单独的查询条件是org.hibernate.criterion.Criterion 接口的一个实例org.hibernate.criterion.Restrictions类定义了获得某些内置Criterion类型的工厂方法。
- //Restrictions.like和Restrictions.eq用法
- List
list = s.createCriteria(UserModel.class) -
.add(Restrictions.eq("uuid", "3")) -
.add(Restrictions.like("name", "%n%")).list(); -
- //Restrictions.or和Restrictions.isNull用法
- List
cats = s.createCriteria(Cat.class) -
.add(Restrictions.like("name", "Fritz%") ) -
.add(Restrictions.or(Restrictions.eq("age",new Integer(0)), -
Restrictions.isNull("age"))).list(); -
- //Restrictions.lt和Restrictions.in用法
- List
cats = s.createCriteria(Cat.class) -
.add(Restrictions.in("name",new String[]{"Fritz", "Izi","Pk"})) -
.add( -
Restrictions.disjunction().add(Restrictions.isNull("age")) -
.add(Restrictions.lt("age", new Integer(100))) //小于 -
.add(Restrictions.le("age", new Integer(0))) //小于或等于 -
.add(Restrictions.gt("age", new Integer(0))) //大于 -
.add(Restrictions.ge("age", new Integer(1))) //大于或等于 -
.add(Restrictions.eq("age", new Integer(2))))).list();
//Restrictions.like和Restrictions.eq用法
List list = s.createCriteria(UserModel.class)
.add(Restrictions.eq("uuid", "3"))
.add(Restrictions.like("name", "%n%")).list();
//Restrictions.or和Restrictions.isNull用法
List cats = s.createCriteria(Cat.class)
.add(Restrictions.like("name", "Fritz%") )
.add(Restrictions.or(Restrictions.eq("age",new Integer(0)),
Restrictions.isNull("age"))).list();
//Restrictions.lt和Restrictions.in用法
List cats = s.createCriteria(Cat.class)
.add(Restrictions.in("name",new String[]{"Fritz", "Izi","Pk"}))
.add(
Restrictions.disjunction().add(Restrictions.isNull("age"))
.add(Restrictions.lt("age", new Integer(100))) //小于
.add(Restrictions.le("age", new Integer(0))) //小于或等于
.add(Restrictions.gt("age", new Integer(0))) //大于
.add(Restrictions.ge("age", new Integer(1))) //大于或等于
.add(Restrictions.eq("age", new Integer(2))))).list();
排序
可以使用 org.hibernate.criterion.Order 来为查询结果排序。示例如下:
- List
cats = s.createCriteria(Cat.class) -
.add(Restrictions.like("name", "F%")) -
.addOrder(Order.asc("name") ) -
.addOrder(Order.desc("age") ) -
.setMaxResults(50) -
.list(); -
- List
cats = s.createCriteria(Cat.class) -
.add(Property.forName("name").like("F%")) -
.addOrder(Property.forName("name").asc()) -
.addOrder(Property.forName("age").desc()) -
.setMaxResults(50) -
.list(); -
- //Restrictions.between用法
- List
list = session.createCriteria(StockDailyRecord.class).add(Restrictions.between("date", startDate, endDate)).list();
List cats = s.createCriteria(Cat.class)
.add(Restrictions.like("name", "F%"))
.addOrder(Order.asc("name") )
.addOrder(Order.desc("age") )
.setMaxResults(50)
.list();
List cats = s.createCriteria(Cat.class)
.add(Property.forName("name").like("F%"))
.addOrder(Property.forName("name").asc())
.addOrder(Property.forName("age").desc())
.setMaxResults(50)
.list();
//Restrictions.between用法
List list = session.createCriteria(StockDailyRecord.class).add(Restrictions.between("date", startDate, endDate)).list();
动态关联抓取
- List
cats = s.createCriteria(Cat.class) -
.add( Restrictions.like("name", "Fritz%") ) -
.setFetchMode("mate", FetchMode.EAGER) -
.setFetchMode("kittens", FetchMode.EAGER) -
.list();
List cats = s.createCriteria(Cat.class)
.add( Restrictions.like("name", "Fritz%") )
.setFetchMode("mate", FetchMode.EAGER)
.setFetchMode("kittens", FetchMode.EAGER)
.list();
Criteria的缺点
Criteria API同时也带有一些缺点。
1、性能问题
没有办法控制由Hibernate生成的SQL查询语句,如果生成的查询语句很慢,我们很难调整,数据库管理员可能非常不喜欢这样。
2、维护问题
所有的SQL查询散布在Java代码中,当一个查询出现错误时,我们可能需要花费大量的时间来找出问题所在。换句话说,存储在Hibernate映射文件中的命名查询更容易去维护。
结论
没有什么东西是完美的,考虑我们项目的需要,明智地使用它。
本文详细介绍了Hibernate Criteria API 的使用方法,包括分页查询、条件查询、排序及动态关联抓取等功能,并探讨了其在实际应用中的优缺点。


1342

被折叠的 条评论
为什么被折叠?



