hibernate几种查询方式,hibernate查询语句
//创建询问对象
查询q=会话。创建查询( from Customer as c where c . name=:name );
//动态绑定参数
q.setString(name , Tom );
//执行查询语句
q . list();
只需要提供面向对象的语句查询语句,休眠就能根据映射文件的配置,将语句转换为SQL,并将数据库编程结果集结果集映射为关联的对象图。
4)QBC检索方式
按条件查询
//创建标准对象
标准标准=会话。创建标准(客户。类);
//设定查询条件
标准标准1=限制。like( name , T % );
标准标准2=限制。eq( age ,新整数(21));
criteria=criteria.add(标准1)。添加(标准2);
//执行查询语句
标准。list();
条件查询还提供了一种昆士兰保险集团子功能(按实例查询),能够把示例客户对象中所有不为空的属性作为查询条件:
session.createQuery(来自客户,其中年龄=:年龄,姓名=:姓名)。设置属性(例如客户)。list();
查询q=会话。创建SQL查询( select * from CUSTOMERS where . );
设置字符串(.);
q . list();
QBC:
不需要显式指定别名,休眠会自动把查询语句的根节点赋予别名"这个"
会话。创建标准(客户。类)。add(Restrictions.eq(this.name , tom ))。list();
语句和条件查询支持多态查询,能查询出当前类及其所有子类实例。
排序HQL:
会话。创建查询(“从客户到订单,按客户名称、客户年龄、desc”);
QBC:
会话。创建标准(客户。类).addOrder(Order.asc(name ))。添加订单(订单。desc(‘时代’);
分页查询查询。设置第一结果(97);
查询。setmaxresults(10);
查询。list();
标准类似。
检索单个对象session.createQuery(.)。setMaxResults(1)。uniqueResult();
标准类似。
如果询问包含多个对象,但没有调用setMaxResults(1),则会抛出非唯一结果异常。
Query.iterate()
和目录功能一样,但使用的查询机制不同:
目录会返回对象的所有属性,而重复则只返回身份属性
迭代器客户=查询。iterate();
while(customers.hasNext()){
客户顾客=(客户)客户。next();//1
字符串名称=cus。getname();
}
执行到customers.next()时,先查会议缓存,如果缓存中已存在该对象,则直接返回;若不存在,则查询数据库(返回所有属性)
适用场景:
客户表中有大量字段
启用了二级缓存,并且缓存中可能已包含待查询的顾客对象Query.setReadOnly()默认情况下,如果对查询到的对象的属性做了修改,则当冬眠清理缓存时,会去同步更新回数据库。
如果要只允许读取属性值,而不允许更新属性值,可用setReadOnly().