当前位置:首页 > 开发 > 开源软件 > 正文

Hibernate的查询 标准(Criteria)查询

发表于: 2012-05-09   作者:cuisuqiang   来源:转载   浏览次数:
摘要: 一个简单例子: @SuppressWarnings("unchecked") public void searchByPropertys() { Session session = this.getSession(); Criteria crit = session.createCriteria(Conft.class); List<Conft> l

一个简单例子:

@SuppressWarnings("unchecked")
public void searchByPropertys() {
	Session session = this.getSession();
	Criteria crit = session.createCriteria(Conft.class);
	List<Conft> list = crit.list();
	for(Conft c : list){
		System.out.println(c.getId());
	}
}

 

标准查询API最终仍然翻译为SQL交由数据库处理,返回java.util.List对象

 

怎么增加条件呢?请看如下代码:

public void searchByPropertys() {
	Session session = this.getSession();
	Criteria crit = session.createCriteria(Conft.class);	
	crit.add(Restrictions.eq("id", 2)); // =
	crit.add(Restrictions.ne("id", 2)); // !=
	crit.add(Restrictions.lt("id", 2)); // <
	crit.add(Restrictions.gt("id", 2)); // >
	crit.add(Restrictions.le("id", 2)); // <=
	crit.add(Restrictions.ge("id", 2)); // >=
	crit.add(Restrictions.in("id", new String[]{"2"})); // in
	crit.add(Restrictions.like("id", "%2%")); // like
	crit.add(Restrictions.like("id", "2",MatchMode.ANYWHERE)); // %x%
	crit.add(Restrictions.like("id", "2",MatchMode.START)); // x%
	crit.add(Restrictions.like("id", "2",MatchMode.END)); // %x
	crit.add(Restrictions.like("id", "2",MatchMode.EXACT)); // x	
	List<Conft> list = crit.list();
	for(Conft c : list){
		System.out.println(c.getId());
	}
}

 

代码后面写出了增加条件的方式和意思。

 

如果有and或者是or的关系的话,可以使用Conjunction(AND)和Disjunction(OR)!

下面是一个使用示例:

public void searchByPropertys() {
	Session session = this.getSession();
	Criteria crit = session.createCriteria(Conft.class);
	// 创建条件
	Criterion a = Restrictions.gt("id", 2); // >
	Criterion b = Restrictions.lt("id", 2); // <
	Criterion c = Restrictions.like("id", "2",MatchMode.ANYWHERE);
	// and 关系
	Conjunction conjunction = Restrictions.conjunction();
	conjunction.add(a);
	conjunction.add(b);
	// or 关系
	Disjunction disjunction = Restrictions.disjunction();
	disjunction.add(conjunction);
	disjunction.add(c);	
	// 增加查询条件
	crit.add(disjunction);	
	List<Conft> list = crit.list();
	for(Conft conft : list){
		System.out.println(conft.getId());
	}
}

 

a和b是AND关系,而a和b合起来作为条件后和c是OR关系!

如果看他的SQL的话,是这样的,有助于理解:

(where (a>? and b<?) or c like ?)

 

除此之外还可以使用sqlRestriction方法直接拼接SQL

public User getUserById(int pk){
	Session session = this.getSession();
	Criteria crit = session.createCriteria(User.class);
	crit.add(Restrictions.sqlRestriction(" {alias}.id=2 "));
	List<User> list = crit.list();
	return (User)list.get(0);
}

 

注意{alias}是表的名称,这个不用修改,Hibernate在生成SQL时会自动替换!

在源码中可以看到:

public static Criterion sqlRestriction(String sql, Object values[], Type types[])
{
    return new SQLCriterion(sql, values, types);
}
public static Criterion sqlRestriction(String sql, Object value, Type type)
{
    return new SQLCriterion(sql, new Object[] {
        value
    }, new Type[] {
        type
    });
}
public static Criterion sqlRestriction(String sql)
{
    return new SQLCriterion(sql, ArrayHelper.EMPTY_OBJECT_ARRAY, ArrayHelper.EMPTY_TYPE_ARRAY);
}

 

也就是说这个方法有三个调用方式,直接写SQL,如果你的SQL中有 ? 作为占位符,那么可设置后面两个参数,第二个参数对应 ? ,第三个是参数字段的类型!

如果有多个 ? ,那么第二和第三个参数就要用数组的形式来传递!

 

请您到ITEYE看我的原创:http://cuisuqiang.iteye.com

或支持我的个人博客,地址:http://www.javacui.com

 

Hibernate的查询 标准(Criteria)查询

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
一、简述 Criteria是一种比hql更面向对象的查询方式。Criteria 可使用 Criterion 和 Projection 设
Hibernate的三种查询方式 1.HQL (Hibernate Query Lanuage) 语句,这是类似SQL语句的一种对象化查询
1、概述 如果使用了特定于某个数据库的SQL语句,我们所编写的程序就会依赖于特定的数据库,降低了程
HQL(Hibernate Query Language) 面向对象的查询语言,与SQL不同,HQL中的对象名是区分大小写的(除
一、Criteria查询方式 没有sql语了,因此更加面向对象一些。 Criteria是一种比HQL更面向对象的查询
在hibernate 查询in 查询中不能使用testQuery1方法查询 public void testQuery1(){ SessionFactory f
List<SessionMonitor> (SessionMonitorBo bo) { Criteria criteria =createCriteria(SessionM
一、Hibernate提供的查询方式 OID查询方式:主键查询。通过get()或者load()方法加载指定OID的对象查
提供的检索方式: (1)导航对象图检索方式 (2)OID检索方式 (3)HQL检索方式 (4)QBC检索方式[q
http://www.blogjava.net/qchong/archive/2008/12/08/245031.html 本文章系Jarvis原创,转载请注明!
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号