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);

7、QBC分页查询  

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查询方式)