hibernate中criteria的用法
来源:互联网 发布:wwe2k15优化补丁 编辑:程序博客网 时间:2024/06/05 00:43
一个简单例子:
Java代码
1. @SuppressWarnings("unchecked")
2. public void searchByPropertys() {
3. Session session = this.getSession();
4. Criteria crit = session.createCriteria(Conft.class);
5. List<Conft> list = crit.list();
6. for(Conft c : list){
7. System.out.println(c.getId());
8. }
9. }
标准查询API最终仍然翻译为SQL交由数据库处理,返回java.util.List对象
怎么增加条件呢?请看如下代码:
Java代码
1. public void searchByPropertys() {
2. Session session = this.getSession();
3. Criteria crit = session.createCriteria(Conft.class);
4. crit.add(Restrictions.eq("id", 2)); // =
5. crit.add(Restrictions.ne("id", 2)); // !=
6. crit.add(Restrictions.lt("id", 2)); // <
7. crit.add(Restrictions.gt("id", 2)); // >
8. crit.add(Restrictions.le("id", 2)); // <=
9. crit.add(Restrictions.ge("id", 2)); // >=
10. crit.add(Restrictions.in("id", new String[]{"2"})); // in
11. crit.add(Restrictions.like("id", "%2%")); // like
12. crit.add(Restrictions.like("id", "2",MatchMode.ANYWHERE)); // %x%
13. crit.add(Restrictions.like("id", "2",MatchMode.START)); // x%
14. crit.add(Restrictions.like("id", "2",MatchMode.END)); // %x
15. crit.add(Restrictions.like("id", "2",MatchMode.EXACT)); // x
16. List<Conft> list = crit.list();
17. for(Conft c : list){
18. System.out.println(c.getId());
19. }
20.}
代码后面写出了增加条件的方式和意思。
如果有and或者是or的关系的话,可以使用Conjunction(AND)和Disjunction(OR)!
下面是一个使用示例:
Java代码
1. public void searchByPropertys() {
2. Session session = this.getSession();
3. Criteria crit = session.createCriteria(Conft.class);
4. // 创建条件
5. Criterion a = Restrictions.gt("id", 2); // >
6. Criterion b = Restrictions.lt("id", 2); // <
7. Criterion c = Restrictions.like("id", "2",MatchMode.ANYWHERE);
8. // and 关系
9. Conjunction conjunction = Restrictions.conjunction();
10. conjunction.add(a);
11. conjunction.add(b);
12. // or 关系
13. Disjunction disjunction = Restrictions.disjunction();
14. disjunction.add(conjunction);
15. disjunction.add(c);
16. // 增加查询条件
17. crit.add(disjunction);
18. List<Conft> list = crit.list();
19. for(Conft conft : list){
20. System.out.println(conft.getId());
21. }
22.}
a和b是AND关系,而a和b合起来作为条件后和c是OR关系!
如果看他的SQL的话,是这样的,有助于理解:
Java代码
1. (where (a>? and b<?) or c like ?)
除此之外还可以使用sqlRestriction方法直接拼接SQL
Java代码
1. public User getUserById(int pk){
2. Session session = this.getSession();
3. Criteria crit = session.createCriteria(User.class);
4. crit.add(Restrictions.sqlRestriction(" {alias}.id=2 "));
5. List<User> list = crit.list();
6. return (User)list.get(0);
7. }
注意{alias}是表的名称,这个不用修改,Hibernate在生成SQL时会自动替换!
在源码中可以看到:
Java代码
1. public static Criterion sqlRestriction(String sql, Object values[], Type types[])
2. {
3. return new SQLCriterion(sql, values, types);
4. }
5. public static Criterion sqlRestriction(String sql, Object value, Type type)
6. {
7. return new SQLCriterion(sql, new Object[] {
8. value
9. }, new Type[] {
10. type
11. });
12.}
13.public static Criterion sqlRestriction(String sql)
14.{
15. return new SQLCriterion(sql, ArrayHelper.EMPTY_OBJECT_ARRAY, ArrayHelper.EMPTY_TYPE_ARRAY);
16.}
也就是说这个方法有三个调用方式,直接写SQL,如果你的SQL中有?作为占位符,那么可设置后面两个参数,第二个参数对应?,第三个是参数字段的类型!
- Hibernate中Criteria的用法
- Hibernate中Criteria的用法
- Hibernate中Criteria的用法
- hibernate中criteria的用法
- Hibernate中Criteria的用法
- hibernate中criteria的用法
- Hibernate中Criteria的用法
- Hibernate中Criteria的用法
- Hibernate中Criteria用法
- Hibernate中Criteria用法
- hibernate中criteria用法
- Hibernate中Criteria的完整用法
- Hibernate中Criteria的完整用法
- Hibernate中Criteria的完整用法
- Hibernate中Criteria的完整用法
- Hibernate中Criteria的完整用法
- Hibernate中Criteria的完整用法
- Hibernate中Criteria的完整用法
- poj-3262-Protecting the Flowers
- POJ 1185 炮兵阵地
- OC类和对象
- html表格合并(行,列)
- 希尔排序-c++
- hibernate中criteria的用法
- Core Data入门
- 第156天
- 把Storyboard减轻的方法
- 设计模式3—State设计模式
- Linux系统的磁盘管理及分区应用
- OC类
- IOS成长中 C语言之进制
- crm使用soap删除字段