`

Hibernate createCriteria查询

阅读更多

 

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 = new Cat();
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();

 

 

 

Group by

 

Criteria criteria = super.getSession().createCriteria(People.class);
  criteria.setProjection(Projections.groupProperty("name"));
  List all = criteria.list();

 

分享到:
评论

相关推荐

    hibernate二级缓存

    Hibernate二级缓存 在一个数据库系统中,如果缓存设置的... hibernate.cache.use_query_cache必须配置,如果想缓存使用findall()、list()、Iterator()、createCriteria()、 createQuery()等方法获得的数据结果集。

    Hibernate Criteria用法大全.docx

    Hibernate 提供了操纵对象和相应的 RDBMS 表中可用...Hibernate Session 接口提供了 createCriteria() 方法,可用于创建一个 Criteria 对象,使当您的应用程序执行一个标准查询时返回一个持久化对象的类的实例。

    Struts2 hibernate3 简单的学生查询

    Example em=Example.create(student).setPropertySelector(new EmptyStringSelector... List list =session.createCriteria(Student.class).add(em) .add(Restrictions.between("birthday", date1, date2)) .list();

    Hibernate中Criteria的完整用法

    Hibernate中Criteria的完整用法 QBE (Query By Example) Criteria cri = session.createCriteria(Student.class); cri.add(Example.create(s)); //s是一个Student对象 list cri.list(); 实质:创建一个模版,比如...

    Criteria的完整用法.pdf

    Hibernate中Criteria的完整用法

    hibernatemanytomany:使用两个实体的投影Hibernate多对多示例

    B 参加的会议 A 参加的另一个会议 B 只有 B 参加的会议1, 1 2, 1 1, 2 2, 3 现在我们想要一个扁平化的名字列表,会议主题标准标准 = session.createCriteria(Employee.class, "e"); 标准.setFetchMode("e.meetings",...

    用SSH+DWR+Oracle做的模拟Google搜索

    Criteria c = super.getSession().createCriteria(Searchinfo.class); //构造函数 or Criterion ce = null ; for(String list:lists){ if(ce==null) ce = Restrictions.like("content", list); else ...

    使用 Example 类 实现MySQL一个搜索框对多个字段的模糊查询

    使用的 Example 类是由 mybatis... SpaItemExample.Criteria criteria = example.createCriteria(); criteria.andCodeLike('%'+queryString+'%'); example.or(example.createCriteria().andNameLike('%'+queryString+

    MybatisPageHelper分页插件

    Criteria criteria = example.createCriteria(); criteria.andPidEqualTo(Long.parseLong("2")); List<ComArea> lis = comAreaMapper.selectByExample(example); Page<ComArea> page = (Page) lis; Page...

    支持mysql物理分页的 MyBatis Generator 1.3.2

    myeclipse 2013 插件MyBatis Generator 1.3.2生成的代码缺少分页,使用麻烦。修改了源码org.mybatis....example.createCriteria().andEmailIsNotNull(); return (List) UserService.selectByExample(example);

    乐优商城.xmind

    Criteria criteria = new Example().createCriteria(); StringUtils.isNotBlank isNotBlank(str) 等价于 str != null && str.length > 0 && str.trim().length > 0 str.trim() 去掉字符串头尾的空格 测试 报错...

    MyBatis generator

    UsersExample.Criteria criteria = example.createCriteria(); //criteria.andSnameEqualTo(""); int totalCount = mapper.countByExample(example); pager.setTotalCount(totalCount); example....

Global site tag (gtag.js) - Google Analytics