Hibernate学习(Hibernate查询方式)

2017-03-06  本文已影响0人  Seo_sir

Hibernate查询方式

  1. 对象导航查询
    (1)根据id查询某个客户,再查询这个客户里面所有的联系人
  2. OID查询
    (1)根据id查询某一条记录,返回对象
  3. HQL查询
    (1)Query对象,写hql语句实现查询
  4. QBC查询
    (1)Criteria对象
  5. 本地sql查询
    (1)SQLQuery对象,使用普通sql实现查询

对象导航查询

  1. 查询某个客户里面所有联系人过程,使用对象导航实现
  2. 代码
1.png

OID查询

  1. 根据id查询记录
    (1)调用session里面的get方法实现
2.png

HQL查询

  1. hql:hibernate query language,hibernate提供一种查询语言,hql语言和普通sql很相似,区别:普通sql操作数据库表和字段,hql操作实体类和属性
  2. 常用的hql语句
    (1)查询所有: from 实体类名称
    (2)条件查询: from 实体类名称 where 属性名称=?
    (3)排序查询: from 实体类名称 order by 实体类属性名称 asc/desc
  3. 使用hql查询操作时候,使用Query对象
    (1)创建Query对象,写hql语句
    (2)调用query对象里面的方法得到结果

查询所有

  1. 查询所有客户记录
    (1)创建Query对象,写hql语句
    (2)调用query对象里面的方法得到结果
  2. 查询所有: from 实体类名称
1.png

条件查询

  1. hql条件查询语句写法:
    (1) from 实体类名称 where 实体类属性名称=? and实体类属性名称=?
    from 实体类名称 where 实体类属性名称 like ?
  2. 代码
2.png

模糊查询

3.png

排序查询

  1. hql排序语句写法
    (1)from 实体类名称 order by 实体类属性名称 asc/desc
4.png

分页查询

  1. mysql实现分页
    (1)使用关键字 limit实现
SELECT * FROM S_MENU LIMIT 0,3;
  1. 在hql中实现分页
    (1)在hql操作中,在语句里面不能写limit,hibernate的Query对象封装两个方法实现分页操作
5.png

投影查询

  1. 投影查询:查询不是所有字段值,而是部分字段的值
  2. 投影查询hql语句写法:
    (1)select 实体类属性名称1, 实体类属性名称2 from 实体类名称
    (2)select 后面不能写 * ,不支持的
  3. 具体实现
6.png

聚集函数使用

  1. 常用的聚集函数
    (1)count、sum、avg、max、min
  2. hql聚集函数语句写法
    (1)查询表记录数
    select count(*) from 实体类名称
7.png

QBC查询

  1. 使用hql查询需要写hql语句实现,但是使用qbc时候,不需要写语句了,使用方法实现
  2. 使用qbc时候,操作实体类和属性
  3. 使用qbc,使用Criteria对象实现

查询所有

  1. 创建Criteria对象
  2. 调用方法得到结果
8.png

条件查询

没有语句,使用封装的方法实现

9.png 10.png

排序查询

1.png

分页查询

2.png

开始位置计算公式: (当前页-1)*每页记录数

统计查询

离线查询

  1. servlet调用service,service调用dao
    (1)在dao里面对数据库crud操作
    (2)在dao里面使用hibernate框架,使用hibernate框架时候,调用session里面的方法实现功能
4.png

HQL多表查询

Mysql里面多表查询

内连接

5.png

左外连接

6.png

右外连接

7.png

HQL实现多表查询

Hql多表查询
(1)内连接
(2)左外连接
(3)右外连接
(4)迫切内连接
(5)迫切左外连接
#######HQL内连接

  1. 内连接查询hql语句写法:以客户和联系人为例
    (1)from Customer c inner join c.setLinkMan
8.png

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

  1. 演示迫切内连接
    (1)迫切内连接和内连接底层实现一样的
    (2)区别:使用内连接返回list中每部分是数组,迫切内连接返回list每部分是对象
    (3)hql语句写法
    from Customer c inner join fetch c.setLinkMan
9.png

#######HQL左外连接

  1. 左外连接hql语句:
    (1)from Customer c left outer join c.setLinkMan
    (2)迫切左外连接from Customer c left outer join fetch c.setLinkMan

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

  3. 右外连接hql语句:
    (1)from Customer c right outer join c.setLinkMan

上一篇下一篇

猜你喜欢

热点阅读