java+criteriaquery_Hibernate动态条件查询(Criteria Query)
1、创建一个Criteria实例
net.sf.hibernate.Criteria这个接口代表对一个特定的持久化类的查询。Session是用来制造Criteria实例的工厂。
Criteria crit = sess.createCriteria(Cat.class);
crit.setMaxResults(50);
List cats = crit.list();
2、缩小结果集范围
一个查询条件(Criterion)是net.sf.hibernate.expression.Criterion接口的一个实例。类net.sf.hibernate.expression.Expression定义了获得一些内置的Criterion类型。
List cats = sess.createCriteria(Cat.class)
.add( Expression.like("name", "Fritz%") )
.add( Expression.between("weight", minWeight, maxWeight) )
.list();
表达式(Expressions)可以按照逻辑分组.
List cats = sess.createCriteria(Cat.class)
.add( Expression.like("name", "Fritz%") )
.add( Expression.or(
Expression.eq("age", new Integer(0) ),
Expression.isNull("age")
) )
.list();
List cats= sess.createCriteria(Cat.class)
.add( Expression.in("name", new String[] { "Fritz", "Izi", "Pk"} ) )
.add( Expression.disjunction()
.add( Expression.isNull("age") )
.add( Expression.eq("age", new Integer(0) ) )
.add( Expression.eq("age", new Integer(1) ) )
.add( Expression.eq("age", new Integer(2) ) )
) )
.list();
有很多预制的条件类型(Expression的子类)。有一个特别有用,可以让你直接嵌入SQL。
List cats = sess.createCriteria(Cat.class)
.add( Expression.sql("lower($alias.name) like lower(?)", "Fritz%", Hibernate.STRING) )
.list();
其中的{alias}是一个占位符,它将会被所查询实体的行别名所替代。(原文:The {alias} placeholder with be replaced by the row alias of the queried entity.)
3、对结果排序
可以使用net.sf.hibernate.expression.Order对结果集排序.
List cats = sess.createCriteria(Cat.class)
.add( Expression.like("name", "F%")
.addOrder( Order.asc("name") )
.addOrder( Order.desc("age") )
.setMaxResults(50)
.list();
4、关联(Associations)
你可以在关联之间使用createCriteria(),很容易地在存在关系的实体之间指定约束。
List cats = sess.createCriteria(Cat.class)
.add( Expression.like("name", "F%")
.createCriteria("kittens")
.add( Expression.like("name", "F%")
.list();
注意,第二个createCriteria()返回一个Criteria的新实例,指向kittens集合类的元素。
下面的替代形式在特定情况下有用。
List cats = sess.createCriteria(Cat.class)
.createAlias("kittens", "kt")
.createAlias("mate", "mt")
.add( Expression.eqProperty("kt.name", "mt.name") )
.list();
(createAlias())并不会创建一个Criteria的新实例。)
请注意,前面两个查询中Cat实例所持有的kittens集合类并没有通过criteria预先过滤!如果你希望只返回满足条件的kittens,你必须使用returnMaps()。
List cats = sess.createCriteria(Cat.class)
.createCriteria("kittens", "kt")
.add( Expression.eq("name", "F%") )
.returnMaps()
.list();
Iterator iter=cats.iterator();while( iter.hasNext() ) {
Map map=(Map) iter.next();
Cat cat=(Cat) map.get(Criteria.ROOT_ALIAS);
Cat kitten= (Cat) map.get("kt");
}
5、动态关联对象获取(Dynamic association fetching)
可以在运行时通过setFetchMode()来改变关联对象自动获取的策略。
List cats = sess.createCriteria(Cat.class)
.add( Expression.like("name", "Fritz%") )
.setFetchMode("mate", FetchMode.EAGER)
.list();
这个查询会通过外连接(outer join)同时获得 mate和kittens。
6、根据示例查询(Example queries)
net.sf.hibernate.expression.Example类允许你从指定的实例创造查询条件。
Cat cat = newCat();
cat.setSex('F');
cat.setColor(Color.BLACK);
List results= session.createCriteria(Cat.class)
.add( Example.create(cat) )
.list();
版本属性,表示符属性和关联都会被忽略。默认情况下,null值的属性也被排除在外。
You can adjust how the Example is applied. 你可以调整示例(Example)如何应用。
Example example =Example.create(cat)
.excludeZeroes()//exclude zero valued properties
.excludeProperty("color") //exclude the property named "color"
.ignoreCase() //perform case insensitive string comparisons
.enableLike(); //use like for string comparisons
List results = session.createCriteria(Cat.class)
.add(example)
.list();
你甚至可以用示例对关联对象建立criteria。
List results = session.createCriteria(Cat.class)
.add( Example.create(cat) )
.createCriteria("mate")
.add( Example.create( cat.getMate() ) )
.list();
java+criteriaquery_Hibernate动态条件查询(Criteria Query)相关推荐
- NHibernate之旅(4):探索查询之条件查询(Criteria Query)
本节内容 NHibernate中的查询方法 条件查询(Criteria Query) 1.创建ICriteria实例 2.结果集限制 3.结果集排序 4.一些说明 根据示例查询(Query By Ex ...
- hibernate的查询条件lt_hibernate的多条件查询——Criteria Query的应用
查询数据时,人们往往需要设置查询条件.在SQL或HQL语句中,查询条件常常放在where子句中.此外,Hibernate还支持Criteria查询(Criteria Query),这种查询方式把查询条 ...
- springDataJpa入门教程(5)-单表动态条件查询+分页
springDataJpa入门教程 springDataJpa入门教程(1)-基于springBoot的基本增删改查 springDataJpa入门教程(2)-Specification动态条件查询+ ...
- mybatis-plus在Mapper类中使用@select标签进行多表联合动态条件查询
1.单表动态条件查询 1)单字段作为参数 直接用@param设置的值作为注入就好了 @Select("select * from ppms_person_message where crea ...
- java中动态查询条件,Java实现动态添加查询条件
今天遇到一个问题,就是需要根据前端页面发送的条件查询数据库记录,但是前端发送的条件是不确定的.如果使用mybatis的xml方法可以使用if标签灵活的添加判断条件,但是现在我使用的就是单纯的sql. ...
- java hql多条件查询_Hibernate结合JPA编写通用泛型多条件查询
项目中使用Hibernate和JPA对数据库对象进行实例化,但是生成的方法不支持多条件查询.而如果针对每一个数据库对象进行多条件查询编码,则会变得很麻烦,而且一旦以后发生表结构发生变化,这些方法可能还 ...
- jpa多表联查动态_Spring Data JPA 连表动态条件查询
多表查询在spring data jpa中有两种实现方式,第一种是利用hibernate的级联查询来实现(使用较为复杂,查询不够灵活),第二种是使用原生sql查询. JPA原生SQL连表查询 @Rep ...
- oracle 动态条件查询语句,教您Oracle动态查询语句的用法
Oracle动态查询语句是一类特殊的查询语句,下面就为您详细介绍Oracle动态查询语句的语法,如果您对Oracle动态查询方面感兴趣的话,不妨一看. 1. 当使用EXECUTE IMMEDIATE语 ...
- java通用分页条件查询_通用分页查询
packagecom.dao;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.util.ArrayList;import ...
最新文章
- 如何挂载另一个lvm硬盘
- python装饰器实例-python 装饰器的使用示例
- 超级有用的15个mysqlbinlog命令
- javascript arguments 特殊 对象
- Fibonacci数列整除性质的组合证明
- 云计算技术前景怎么样?
- 将文件标记为 side-effect-free(无副作用)
- 收集 一些Oracle账号
- ui uview 安卓开发_HarmonyOS 2.0手机开发者Beta公测招募
- 全国青少年编程等级考试scratch三级真题2019年3月(含题库答题软件账号)
- 小程序轮播图测试用例
- 交安ABC考试单选练习题库
- C++实现费氏数列算法
- python处理页眉_【python-docx 05】操作页眉和页脚
- cups ipp oracle,Linux打印系统CUPS原理分析
- android build.versioncodes.kitkat,Android 4.1至4.4 KitKat-为API启用TLS 1.2
- 电脑技术分享:电脑怎样录制桌面视频
- PAT Basic 1033. 旧键盘打字(20)(C语言实现)
- 高等数学:第八章 多元函数的微分法及其应用(3)全微分
- 《java与模式》笔记-----抽象类和接口
热门文章
- 中大南方学院计算机温澍潜,中大南方学院
- 对方不想和你说话 php,对方不想和你聊天的表现,遇到后赶紧放弃
- elementui的el-tree第一次加载无法展开和选中的问题
- Selenium3自动化测试——17.控制滑动解锁
- java框架知识_java框架知识点总结
- c mysql存储过程实例_MySQL存储过程实例
- linux没有交换分区会怎样,linux – 服务器拒绝使用交换分区
- mysql类 php100_PHP100视频教程26:制作自己的PHP+MYSQL的类
- java启动 守护进程_java守护进程启动和关闭脚本
- wps中的相交_PPT中最好用的一个功能,非它莫属了~