criteria语句使用经验2

criteria的具体配置想了解的可以看我的前文
https://blog.csdn.net/weixin_40496191/article/details/105087594
接下来直接讲讲关于criteria的语句使用经验

  1. 等于(equal)
c.add(Restrictions.eq("name","樱桃"));
  1. 小等于(less equal)
c.add(Restrictions.le("id", 3));
  1. 小于(less than)
c.add(Restrictions.lt("id", 3));
  1. 大等于(greater equal)
c.add(Restrictions.ge("id", 3));
  1. 大于(greater than)
c.add(Restrictions.gt("id", 3));
  1. 日期比较
 SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
 c.add(Restrictions.gt("time", sdf.parse("2020-03-15")));
  1. key/value装入集合进行等于对比
 Map<String, Object> map = new HashMap<String, Object>();
 map.put("name", "小苹果");
 map.put("id", 1);
 c.add(Restrictions.allEq(map));// 小苹果、大苹果
  1. 模糊查询
c.add(Restrictions.like("name","%苹果%"));

  1. 范围
c.add(Restrictions.between("id", 1, 3));
c.add(Restrictions.in("id", new Object[]{1,2}));
  1. 不为空/为空
c.add(Restrictions.isNotNull("name"));
c.add(Restrictions.isNull("name"));
  1. 分页(指定从哪条开始、查询的条数)
 c.setFirstResult(0);
 c.setMaxResults(3);
  1. 排序
 c.addOrder(Order.asc("time"));
 c.addOrder(Order.desc("time"));
  1. 两表关联(需要jpa提供支持,暂未研究)
Criteria user = c.createCriteria("User");
 user.add(Restrictions.eq("name", "小白白"));
  1. 多个查询条件or或者and连接一起
 c.add(Restrictions.or(Restrictions.gt("id", 3), Restrictions.gt("id",4)));
 c.add(Restrictions.and(Restrictions.gt("id", 3),Restrictions.gt("id", 4)));
  1. 查询返回固定的字段
 c.setProjection(Projections.projectionList().add(Projections.property("id")).add(Property.forName("name")));
 List<Object> ps = c.list();
  1. 查询总记录数
 c.setProjection(Projections.rowCount());
 Integer count = (Integer) c.uniqueResult();
  1. 查询某列的数量
 c.setProjection(Projections.count("price"));
 Integer count = (Integer) c.uniqueResult();
  1. 查询某列剔除重复数据后的数量
 c.setProjection(Projections.countDistinct("price"));
Integer countDistinct = (Integer) c.uniqueResult();
  1. 查询某列平均、求和、最大、最小值
 c.setProjection(Projections.sum("price"));
 c.setProjection(Projections.avg("price"));
 c.setProjection(Projections.max("price"));
 c.setProjection(Projections.min("price"));
 List<Long> ps = c.list();
  1. 将数据按照price进行分组,查询数量
c.setProjection(Projections.projectionList()
				.add(Projections.groupProperty("price"))
				.add(Projections.count("id")));
		List<Object> ps = c.list();
  1. hql查询(类、数量、指定字段)
 List<Product> ps=s.createQuery("from Product").list();
 List<Long> ps=s.createQuery("select count(id)  from Product").list();
 List<Object> ps=s.createQuery("select id,name from Product").list();
  1. 关于查询结果集的类型转换
//投影,即只需要返回列表中指定字段的信息,返回类型根据查询条件。如果不投影,结果则会被封装在实体类中
//但是我们可以手动将结果集进行转换,criteria提供了转换的接口
// c.setResultTransformer(ResultTransformer resultTransformer)
c.setProjection(Projections.projectionList()
				.add(Projections.property("id").as("id"))
				.add(Property.forName("name").as("name")));
c.setResultTransformer(new AliasToBeanResultTransformer(Product.class));
List<Product> ps = c.list();
  1. 添加自定义的sql语句
 c.add(Restrictions.sqlRestriction("id>price"));
 c.add(Restrictions.sqlRestriction("id>3"));

结束!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章