Hibernate查询操作
- 一.对象导航查询
- 1.根据id查询某个客户,再想查询这个客户里的所有联系人
- 2.代码
- 二.OLD查询
- 三.HQL查询
- 1.Query对象,写hql语句查询
- 2.常用hql
- (1)查询所有
- (2)条件查询
- (3)排序查询
- (4)分页查询
- (5)投影查询
- (6)聚集函数查询使用
- 3.使用hql查询操作时,使用Query对象
- (1)创建Query对象,写hql语句
- (2)调用query对象里面的方法得到结果
- 四.QBC查询
- 1.使用hql查询需要写hql语句实现,但是使用qbc时候,不需要写语句了,使用方法实现
- 2.使用qbc ,操作实体类和属性
- 3.使用qbc ,使用Criteria对象实现
- 4.各种方法实用:
- (1)查询所有
- (2)条件查询
- (2)条件查询
- (3)排序查询
- (4)分页查询
- (5)统计查询
- (6)离线查询
- 五.HQL多表查询
- 1.内连接
- (1)内连接查询hql语句语法,以客户和联系人为例
- 4.迫切内连接
- (1)迫切内连接和内连接底层实现是一样的
- (2)区别:使用内连接返回list中每部分是数组,而迫切内连接返回的是对象
- 2.左外连接
- 5.迫切左外连接
- 3.右外连接
- 五.hiebernate 检索策略
- 1.检索策略的概念
- 2.hibernate 分为两类
- (1)立即查询:根据id查询,调用get方法,一调用get方法马上发送语句查询数据库
- (2)延迟查询:根据id查询,还有load方法,调用load方法不会马上发送语句查询数据,只有得到对象里面的值时候才会发送语句查询数据库
- 3.hibernate 延迟查询 分为两类
- (1)类级别延迟:根据id查询返回实体类对象,调用load方法不会马上发送语句
- (2)关联级别延迟:
一.对象导航查询
1.根据id查询某个客户,再想查询这个客户里的所有联系人
2.代码
Customer customer = session.get(Cusertomer.class . 1);
Set<LinkMan> linkman = customer.getSetLinkMan();
二.OLD查询
1.根据id查询某一条记录,返回对象
(1)session中的get方法
三.HQL查询
1.Query对象,写hql语句查询
2.常用hql
(1)查询所有
Query query = session.createQuery("from Customer");
List<Customer> list= query.list();
for(Customer c : list){
sout(c);
}
(2)条件查询
- from 实体类名称 where 实体类属性名称= ? AND 实体类属性名称= ?
- 设置值时 使用 setParameter(int arg0 , Object arg1)方法 参数位置是从0开始
- 若是使用模糊查询 设置参数是写 “%小%” 即可
Query query = session.createQuery("from Customer c where c.cid = ? and c.cname = ?");
query.setParameter(0, 1);
query.setParameter(1, "百度");
List<Customer> list= query.list();
for(Customer c : list){
sout(c);
}
(3)排序查询
- from 实体类名称 order by 实体类属性名称 asc/desc
(4)分页查询
Query query = session.createQuery("from Customer");
query.setFirstResult(0);
query.setMaxResults(3);
List<Customer> list= query.list();
for(Customer c : list){
sout(c);
}
(5)投影查询
- 查询部分字段的值 select cid from t_customer
- select 实体类属性名称1 , 实体类属性名称2 from 实体类名称
- select 后面是不可以写 * ,不支持
(6)聚集函数查询使用
- 常用聚合函数 count sum avg max min
- 查询表的记录数 select count(*) from 实体类名称
Query query = session.createQuery("select count(*) from Customer");
Object obj = query.uniqueResult();
Long lobj = (Long)obj;
int count = lobj.intValue();
sout(count )
3.使用hql查询操作时,使用Query对象
(1)创建Query对象,写hql语句
(2)调用query对象里面的方法得到结果
四.QBC查询
1.使用hql查询需要写hql语句实现,但是使用qbc时候,不需要写语句了,使用方法实现
2.使用qbc ,操作实体类和属性
3.使用qbc ,使用Criteria对象实现
4.各种方法实用:
(1)查询所有
Criteria criteria = session.createCriteria(Custermoer.class);
List<Customer> list = criteria.list();
sout(count )
(2)条件查询
Criteria criteria = session.createCriteria(Custermoer.class);
criteria.add(Restricitions.eq("cid",1));
criteria.add(Restricitions.eq("customer","百度"));
List<Customer> list = criteria.list();
(2)条件查询
Criteria criteria = session.createCriteria(Custermoer.class);
criteria.add(Restricitions.eq("cid",1));
criteria.add(Restricitions.eq("customer","百度"));
List<Customer> list = criteria.list();
(3)排序查询
Criteria criteria = session.createCriteria(Custermoer.class);
criteria.addOrder(Order.desc("cid"));
List<Customer> list = criteria.list();
(4)分页查询
Criteria criteria = session.createCriteria(Custermoer.class);
criteria.setFirstResults(0);
criteria.setMaxResults(3);
List<Customer> list = criteria.list();
(5)统计查询
Criteria criteria = session.createCriteria(Custermoer.class);
criteria.setProjection(Projections.rowCount())
Object obj = criteria。uniqueResult();
Long lobj = (Long)obj;
int count = lobj.intValue();
sout(count);
(6)离线查询
DetachedCriteria detachedCriteria = DetachedCriteria.forClass(Cutomer.class);
Criteria criteria = detachedCriteria.getExecutableCriteria(session);
List<Cutomer> list = criteria.list();
五.HQL多表查询
1.内连接
(1)内连接查询hql语句语法,以客户和联系人为例
- from Customer c inner join c.setLinkMan
- 返回list , list里面每部分是数组的形式
4.迫切内连接
(1)迫切内连接和内连接底层实现是一样的
(2)区别:使用内连接返回list中每部分是数组,而迫切内连接返回的是对象
- from Customer c inner join fetch c.setLinkMan
2.左外连接
- from Customer c left outer join c.setLinkMan
- 返回list , list里面每部分是数组的形式
5.迫切左外连接
- from Customer c left outer join fetch c.setLinkMan
3.右外连接
五.hiebernate 检索策略
1.检索策略的概念
2.hibernate 分为两类
(1)立即查询:根据id查询,调用get方法,一调用get方法马上发送语句查询数据库
(2)延迟查询:根据id查询,还有load方法,调用load方法不会马上发送语句查询数据,只有得到对象里面的值时候才会发送语句查询数据库
3.hibernate 延迟查询 分为两类
(1)类级别延迟:根据id查询返回实体类对象,调用load方法不会马上发送语句
(2)关联级别延迟:
- 想要查询某个客户,再想查询这个客户的所有联系人 ,,查询客户的所有联系人的过程是否需要延迟