2.Hibernate简单的操作

目录

  1. 实体类的编写规则
  2. hibernate主键生成策略
    1. 实体类操作
  3. CRUD操作
  4. 实体类对象状态
    1. hibernate的一级缓存
    2. hibernate的实务操作
  5. 事务代码规则写法
  6. hibernate其他的api(查询)

实体类的编写规则(持久化类)

  1. 实体类里面的属性私有的
  2. 使用的getter / setter方法
  3. 属性作为唯一的值(一般使用id)
  4. 使用基本数据类型对应的包装类
    1. 八个基本数据类型对应的包装类
      • int >>整数
      • char >> Chararcter
      • 双>>双
    2. 包装类的值可以为null而基础数据类型不可以

hibernate主键生成策略

  1. hibernate要求实体类中有个属性作为唯一值,对应表主键,主键有不同的生成策略
  2. hibernate主键策略设置方式
    • 标签:generator; 属性:class;
  3. 主键生成generator class =“”的值
    1. 增量>>自增
    2. 身份>> MySQL自增
    3. 序列>> Oracle自增
    4. native >>自动选择不同数据库的自增方式
    5. uuid >>字符串自增>适用于代理主键,随机字符串<
    6. 分配>>

实体类操作

crud操作

1.添加操作

  • 创建实体类对象
  • Session.save(对象名);

2.根据id查询

  • 调用会话中的GET方法

    1. 获取的SessionFactory

    2. 获取会话

    3. 开启事务session.beginTransaction();
    4. 根据id查询
      • 实体类对象名= session.get(实体类的类,id值)
    5. 提交事务
    6. 关闭

3.修改操作

  • 首先查询,再修改
    1. 获取的SessionFactory
    2. 获取会话
    3. 开启事务session.beginTransaction();
    4. 修改操作
      1. 根据id查询>>同上
      2. 修改对象中的值
        • 获取的对象名.set属性名(>新值<);
      3. 调用更新方法
        • 了Session.update(修改后的对象名);
    5. 提交事务
    6. 关闭

4.删除操作

  • 首先查询,再修改
    1. 获取的SessionFactory
    2. 获取会话
    3. 开启事务session.beginTransaction();
    4. 修改操作
      1. 方法1:
        • 根据id查询>>同上
        • 调用delete方法
          • session.delete(修改后的对象名);
      2. 方法2:
        • new 对象
        • 给定 id
        • 调用delete方法
          • session.delete(修改后的对象名);
    5. 提交事务
    6. 关闭

实体类对象状态(概念)

实体的三种状态

  1. 瞬时状态
    • 对象里没有 id 并且和 session 没有关联
  2. 持久状态
    • 对象和 session 有关联
  3. 托管状态
    • 对象里面有 id 但是和 session 没有关系

演示操作实体类对象的方法

saveOrUpdate 方法 能实现添加也能实现更新


hibernate 缓存

什么是缓存

  • 数据存到数据库,数据库本身就是一个文件系统,使用流的方式操作文件效率并不是很高
    1. 把数据存到内存里,不需要使用流的方式,可以直接读取内存中的数据.
    2. 把数据放入内容中可以提高读取效率.

hibernate 缓存

  • hibernate 框架中提供很多优化方式, hibernate的缓存就是一个优化方式

hibernate 缓存的特点:

第一类 hibernate 的一级缓存
  1. hibernate 的一级缓存默认打开
  2. hibernate 的一级缓存使用范围,是** > session < 的范围**
  3. hibernate 的一级缓存,储存数据必须是持久状态
第二类 hibernate 的二级缓存
  1. 目前已经不使用了 , 替代技术 redis
  2. 二级缓存默认不是打开的 , 需要配置完成
  3. 二级缓存的范围是 sessionFactory 的范围

验证一级缓存的存在

验证方式:

  1. 首先根据 id = 1 查询 , 返回对象
  2. 其次再根据 id = 1 查询 , 返回对象

    • 第二次查询后,不会从数据库再次获取,而是从一级缓存中获取

执行过程

  1. 获取 session 时获得一级缓存
  2. 第一次查询, 查询一级缓存中没有, 从数据库中获取数据 , 并返回一个对象, 并放入缓存中.
  3. 第二次查询, 首先查询一级缓存,找到了数据,直接返回一个对象.
    • 会自动根据 id 在一级缓存中查找

一级缓存的特性

# 持久态会自动更新数据库
  1. 更新数据后不调用执行方法>>提交时
  2. 放在一级缓存中时 >> 同时会放入快照区(副本)
  3. 修改持久态对象时 >> 同时也会修改一级缓存中的值 >> 但是不会修改一级缓存的快照区中(副本)
  4. 最后提交事务时 >> 比较一级缓存和快照区的是否相同
    • 相同 >> > 不更新 <
    • 不同 >> > 更新 <

hibernate 的实务操作

事务的相关概念

  1. 什么是事务
  2. 事务的特性
  3. 不考虑隔离性产生的问题
    1. 脏读
    2. 不可重复读
    3. 虚读
  4. 设置事务隔离级别

事务代码规范写法

代码结构

事务代码规范


hibernate 绑定 session (绝对单线程)

  1. session 类似于 jdbc 的connnection .
  2. hibernate 帮助实现了本地线程绑定 session (用户只需简单的配置)
    1. hibernate.cfg.xml 中添加
      • property name="hiernate.currentsessioncontext_class" > thread
    2. 调用方法
      • sessionFactory.CurrentSession();
      • 返回值为 session > 已经与本地线程关联

hibernate api 的使用

Query 对象

  1. 使用 query 对象,不需要 sql 语句,但是写 hql 语句
    1. hql: hibernate query language , hibernate 提供查询语句, 这个语句和sql 很相似
    2. hql 和 sql 的区别:
      • 使用 sql 操作的是表和字段
      • 使用 hql 操作的是实体类和属性
  2. 查询所有 hql 语句: * from >实体类名称<
  3. Query 对象使用
    1. 创建query对象
    2. 调用list();方法得到 > > list 集合的对象

Criteria 对象

  1. 使用这个对象查询操作,不需要语句,直接调用方法
  2. Criteria 实现的过程
    1. 创建Criteriz对象
      • Criteria criteria = session.createCriteria(实体类.class)
    2. 调用list();方法得到 > > list 集合的对象

SQLQuery 对象

  1. 使用 SQLQuery 对象时,调用底层 sql 语句
  2. 实现过程

    1. 创建SQLQuery对象
      • SQLQuery sqlquery = session.createSQLQuery("select * from 表名");
    2. 调用方法addEntity(实体类.class)

    3. 调用list();方法得到 > > list 集合的对象

但是返回值的list中是以数组的形式,所以要使用addEntity()方法转换后,使用list方法就可以获得 对象的list集合


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值