hibernate中的查询语句

来源:互联网 发布:mysql企业版价格 编辑:程序博客网 时间:2024/04/30 10:22

hibernate中的查询语句

◆将hql语句放入配置文件中,在hbm.xml中加入
<query name="查询名称">
  <![CDATA[
    from User where name=:name
  ]]>
</query>
◆调用时使用Query query = session.getNameQuery("查询名称");
设置参数:query.setParameter("name","");
如过语句为from User where name=?位置占位符,可以使用setParameters(数组名,type);来设置参数
其中type: Type[] type = new Type[]{Hibernate.STRING,Hibernate.STRING,Hibernate.STRING};数组中的数目和类型同需要查询的字段按顺序排列,

并且数量和类型相同。
◆执行批量操作时使用int i = query.executeUpdate();后提交事务,可提高效率。
◆如果hql语句中查询的只有一个字段时如:select name from User
使用query.list()集合中的属性是name的值
如果hql语句中查询的多个字段时如:select name,age from User
使用query.list()集合中的属性是一个数组
如果hql语句中查询的是一个对象时如:select new User(name,age) from User
使用query.list()集合中的属性是User对象的值,但要注意的是必须在该类中定义此构造方法

query.iterate();迭代先查询主键,再查询其它字段,采用n+1的方式查询
◆设置参数也可以用query.setProperties(map);放入一个map集合
还可以query.setProperties(obj);放入一个对象,注意类型和数量一致

◆Criteria是一种面向对象的查询接口
Criteria cr = session.createCriteria(Object.class);其中的Object为要封装的对象
分页同query的语法query.setFirstResult(位置如0).setMaxResult(记录条数);
使用add()方法来添加约束。如:
cr.add(Restrictions.gt("age",new Integer(20)));
或cr.add(Expression.eq("name","张三"));
List list = cr.list();
◆Criteria是在线的查询,需要用session来创建,DetacheCriteria是离线的查询,无需session来创建,只在最后加入session,达到查询的目的,
DetacheCriteria dc = DetacheCriteria.forclass(Object.class);
de.add(Expression.eq("name","张三"));
Criteria cr = dc.getExecutableCriteria(session);
List list = cr.list();
◆QBE查询(query by example)使用列子来查询
Cat cat = new cat();
cat.setName("");
Example e = Example.create(cat);
List results = session.createCriteria(Car.class)
               .add(e)
               .list();
它的部分约束方法:
excludeZeroes();不包含零
excludeProperty("age");不包含age属性
enableLike(MathMode.ANYWHERE);模糊查询两端加%
cr.setProjection(Projections.rowCount());
cr.uniqueResult();查询总条数

0 0
原创粉丝点击