criteria查询 的方法详解
1.获取 criteria对象
Criteria criteria = this.getSession().createCriteria(Record.class);
红色部分为实体类,此处的Record代表信息记录类
2.追加条件
criteria = criteria.add(Expression.eq("level", 1));
红色部分 Expression.eq("",""),两个参数第一个是 实体类中对应的属性名称,第二个是属性值。
Expression的方法有很多如:
Expression.like("name", "%1%"));-----用于模糊查询。
Expression.between(“level”,Object a1,Object a2);------参数一为属性;参数二是第一个范围值;参数三为第二个范围值。
Expression.isEmpty(propertyName);------判断属性是否为空。
Expression.addOrder(Order.desc("属性"));------排序倒序。
criteria.setFirstResult(0);------分页时候设置页面的第一个数据的索引。
criteria.setMaxResults();-----设置数据的页面显示大小。
3.添加别名(在关联表中使用)
criteria = criteria.createAlias("user", "u")----record实体类中有个用户user,添加用户的别称在sql中使用
再添加条件
criteria = criteria.createAlias("user", "u").add( Expression.eq("u.id", 1));-----记录表中用户为1的条件
4.查询某属性(tickitCount)的总和
Object object =
criteria.setProjection(Projections.projectionList()
.add(Projections.sum("tickitCount"))).uniqueResult();
5.查询总记录数
// 查询总记录条数
rowCount = (Integer)
criteria.setProjection(Projections.rowCount())
.uniqueResult();
criteria.setProjection(null);-----必须设置为null才能继续数据查询
6.查询获取结果
list =
criteria.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP)------将结果转为map类型
.list();
Iterator
iter = list.iterator();
List<Video> returnList = new
ArrayList<Video>();
while (iter.hasNext())
{
Map map = (Map) iter.next();
Video
video = (Video)
map.get(criteria.ROOT_ALIAS);--------循环获取跟属性对象放入集合中
returnList.add(video);
}
7.处理重复数据
Projections.distinct();
如:
criteria.setProjection(Projections.distinct(Projections.projectionList().add(Projections.groupProperty("password")).add(Projections.id())));