一,hibernate的检索策略
1,类级别的检索策略
默认 <class>的属性 lazy="ture" 懒加载
2,属性的检索策略
<set>的属性
lazy:懒加载; batch-size: 设定批量检索的数量; fetch: 抓取策略 ,select ,join.subselect. 默认为select 会发送多条sql语句,设置为join时
hibernate只发送一条SQL查询语句 此时lazy属性失效。
二,hibernate的检索方式
1,导航对象图检索方式:即根据已经加载的对象,导航到与其相关的对象上,比如一对多中 1的一方。
2,按照OID来检索对象,如session.get(**.class,1);
3,HQL查询,使用面向对象的HQL查询语言。
4,使用QBC API来检索对象,该API封装了基于字符串的SQL语句
5,使用 本地数据库SQL语句 检索数据。
HQL查询
.创建Query对象
String hql="from Order o where o.orderName=? And o.customer=? ";
Query query=session.createQuery(hql);
.绑定参数
query.setString(0, "订单A");
query.setInteger("id", 753664);
query.setEntity(1, customer);
可以使用 ? ,命名参数 来传参数,参数也可以为对象
.执行查询
List<Order>list=query.list();
补充:
分页查询
query.setFirstResult((pageNo-1)*pageSize).setMaxResults(pageSize);
QBC查询,就是通过使用Hibernate提供的query by criteria API 可以实现复杂的sql查询
.创建criteria对象
Criteria c=session.createCriteria(Animal.class);
.设置查询条件
c.add(Restrictions.eq("name", "动物1"));
.查询
List<Animal>list=c.list();
本地SQL查询
.编写SQL语句
String sql="select * from ANIMAL a where a.NAME= :na";
.创建SQLQuery对象
SQLQuery sqlq=session.createSQLQuery(sql);
sqlq.setString("na", "动物1");
.查询数据
List<Animal>list=sqlq.list();