criteria的具體配置想了解的可以看我的前文
https://blog.csdn.net/weixin_40496191/article/details/105087594
接下來直接講講關於criteria的語句使用經驗
- 等於(equal)
c.add(Restrictions.eq("name","櫻桃"));
- 小等於(less equal)
c.add(Restrictions.le("id", 3));
- 小於(less than)
c.add(Restrictions.lt("id", 3));
- 大等於(greater equal)
c.add(Restrictions.ge("id", 3));
- 大於(greater than)
c.add(Restrictions.gt("id", 3));
- 日期比較
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
c.add(Restrictions.gt("time", sdf.parse("2020-03-15")));
- key/value裝入集合進行等於對比
Map<String, Object> map = new HashMap<String, Object>();
map.put("name", "小蘋果");
map.put("id", 1);
c.add(Restrictions.allEq(map));// 小蘋果、大蘋果
- 模糊查詢
c.add(Restrictions.like("name","%蘋果%"));
- 範圍
c.add(Restrictions.between("id", 1, 3));
c.add(Restrictions.in("id", new Object[]{1,2}));
- 不爲空/爲空
c.add(Restrictions.isNotNull("name"));
c.add(Restrictions.isNull("name"));
- 分頁(指定從哪條開始、查詢的條數)
c.setFirstResult(0);
c.setMaxResults(3);
- 排序
c.addOrder(Order.asc("time"));
c.addOrder(Order.desc("time"));
- 兩表關聯(需要jpa提供支持,暫未研究)
Criteria user = c.createCriteria("User");
user.add(Restrictions.eq("name", "小白白"));
- 多個查詢條件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)));
- 查詢返回固定的字段
c.setProjection(Projections.projectionList().add(Projections.property("id")).add(Property.forName("name")));
List<Object> ps = c.list();
- 查詢總記錄數
c.setProjection(Projections.rowCount());
Integer count = (Integer) c.uniqueResult();
- 查詢某列的數量
c.setProjection(Projections.count("price"));
Integer count = (Integer) c.uniqueResult();
- 查詢某列剔除重複數據後的數量
c.setProjection(Projections.countDistinct("price"));
Integer countDistinct = (Integer) c.uniqueResult();
- 查詢某列平均、求和、最大、最小值
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();
- 將數據按照price進行分組,查詢數量
c.setProjection(Projections.projectionList()
.add(Projections.groupProperty("price"))
.add(Projections.count("id")));
List<Object> ps = c.list();
- 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();
- 關於查詢結果集的類型轉換
//投影,即只需要返回列表中指定字段的信息,返回類型根據查詢條件。如果不投影,結果則會被封裝在實體類中
//但是我們可以手動將結果集進行轉換,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();
- 添加自定義的sql語句
c.add(Restrictions.sqlRestriction("id>price"));
c.add(Restrictions.sqlRestriction("id>3"));
結束!