Hibernate5.x所有查询方式使用

时间:2024-03-07 10:28:43

一、Hibernate查询对象

1、Query对象 2、Criteria对象 3、SQLQuery对象

Query对象实现原理:

1 使用query对象,不需要写sql语句,但是写hql语句

(1)hql:hibernate query language,hibernate提供查询语言,这个hql语句和普通sql语句很相似

(2)hql和sql语句区别:- 使用sql操作表和表字段 - 使用hql操作实体类和属性

2 查询所有hql语句:(1)from 实体类名称

3 Query对象使用(1)创建Query对象(2)调用query对象里面的方法得到结果

二、Hibernate查询方式

1、对象导航查询根据id查询某个客户,再查询这个客户里面所有的联系人

2、hql查询(Query对象)

(1)查询所有

(2)条件查询

(3)排序查询

(4)分页查询

(5)投影查询

(6)聚集函数使用

3、qbc查询(Criteria对象)

(1)查询所有

(2)条件查询

(3)排序查询

(4)分页查询

(5)统计查询

(6)离线查询

4、本地SQL查询(SQLQuery对象):使用普通sql进行查询

5、OID查询根据id查询某条记录,返回查询对象

下面直接上代码来总结一些规律:

//对象导航查询 根据id查询某个客户,再查询这个顾客里面所有的联系人
	//查询某个客户里面所有联系人过程,使用对象导航实现
	@Test
	public void testSelect1() {
		SessionFactory sessionFactory = null;
		Session session = null;
		Transaction tx = null;
		try {
			sessionFactory = DUtils.getSessionFactory();
			session = sessionFactory.openSession();
			tx = session.beginTransaction();
			
			//根据cid=1客户,再查询这个客户里面所有联系人
			Custom custom = session.get(Custom.class, 1);
			//再查询这个客户里面所有联系人
			//直接得到客户里面联系人的set集合
			
			//得到set集合,没有发送语句
			Set<LinkMan> linkman = custom.getSetLinkMan();
			//发送语句
			System.out.println(linkman.size());
			 tx.commit();
		} catch(Exception e) {
			tx.rollback();
		} finally {
			session.close();
			sessionFactory.close();
		}
	}

hql查询方式如下:

 查询所有:

 条件查询:

排序查询:

分页查询:

投影查询:查询的不是所有字段,而是部分字段

2 投影查询hql语句写法:

(1)select 实体类属性名称1, 实体类属性名称2  from 实体类名称

(2)select 后面不能写 * ,不支持的

聚集函数的使用

1 常用的聚集函数:count、sum、avg、max、min

2 hql聚集函数语句写法

(1)查询表记录数 - select count(*) from 实体类名称

 qbc查询方式如下:

查询所有:

条件查询:

条件模糊查询:

排序查询:

分页查询:

统计查询:

离线查询:servlet调用service,service调用dao

(1)在dao里面对数据库crud操作

(2)在dao里面使用hibernate框架,使用hibernate框架时候,调用session里面的方法实现功能

SQLQuery对象查询--》查询所有:

三、Hibernate多表查询

MySQL多表查询

HQL多表查询

(1)内连接(2)左外连接(3)右外连接(4)迫切内连接(5)迫切左外连接

1、 内连接查询hql语句写法:以客户和联系人为例

(1)from  Customer  c  inner  join  c.setLinkMan

返回list,list里面每部分是数组形式

2 演示迫切内连接

(1)迫切内连接和内连接底层实现一样的

(2)区别:使用内连接返回list中每部分是数组,迫切内连接返回list每部分是对象

(3)hql语句写法

- from  Customer  c  inner  join  fetch  c.setLinkMan

1 、左外连接hql语句:

(1)from  Customer  c  left  outer  join  c.setLinkMan

(2)迫切左外连接from  Customer  c  left  outer  join  fetch  c.setLinkMan

2 左外连接返回list中每部分是数组,迫切左外连接返回list每部分是对象

1 右外连接hql语句:

(1)from  Customer  c  right  outer  join  c.setLinkMan

四、Hibernate检索策略

1 hibernate检索策略分为两类:

(1)立即查询:根据id查询,调用get方法,一调用get方法马上发送语句查询数据库

(2)延迟查询:根据id查询,还有load方法,调用load方法不会马上发送语句查询数据,只有得到对象里面的值时候才会发送语句查询数据库

2 延迟查询分成两类:

(1)类级别延迟:根据id查询返回实体类对象,调用load方法不会马上发送语句

(2)关联级别延迟:

- 查询某个客户,再查询这个客户的所有联系人,查询客户的所有联系人的过程是否需要延迟,这个过程称为关联级别延迟

五、关联级别延迟操作

1 在映射文件中进行配置实现

(1)根据客户得到所有的联系人,在客户映射文件中配置

2 在set标签上使用属性

(1)fetch:值select(默认)

(2)lazy:值

- true:延迟(默认)

- false:不延迟

- extra:极其延迟

(1)调用get之后,发送两条sql语句

(1)极其懒惰,要什么值给什么值

六、批量抓取

1 查询所有的客户,返回list集合,遍历list集合,得到每个客户,得到每个客户的所有联系人

(1)上面操作代码,发送多条sql语句

2 在客户的映射文件中,set标签配置

(1)batch-size值,值越大发送语句越少

至此,hibernate所有内容全部结束,接下来就是在SSH项目中使用,想学深的话也可以查看源码