criteria語句使用經驗

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

結束!

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