hibernate5--2.数据持久化及事务
来源:互联网 发布:网络主播协议 编辑:程序博客网 时间:2024/06/06 00:46
1 实体类编写规则
1 实体类里面属性私有的
2 私有属性使用公开的set和get方法操作
3 要求实体类有属性作为唯一值(一般使用id值)
4 实体类属性建议不使用基本数据类型,使用基本数据类型对应的包装类
(1)八个基本数据类型对应的包装类
nt– Integer
char—Character、
其他的都是首字母大写 比如 double – Double
(2)比如 表示学生的分数,假如 int score;
比如学生得了0分 ,int score = 0; 如果表示学生没有参加考试,int score = 0;不能准确表示学生是否参加考试
解决:
使用包装类可以了, Integer score = 0,表示学生得了0分,表示学生没有参加考试,Integer score = null;
2 主键生成策略
1 hibernate要求实体类里面有一个属性作为唯一值,对应表主键,主键可以不同生成策略
2 hibernate主键生成策略有很多的值
3 在class属性里面有很多值
(1)native:
根据使用的数据库帮选择哪个值
(2)uuid:
之前web阶段写代码生成uuid值,hibernate帮我们生成uuid值
4 演示生成策略值 uuid
(1)使用uuid生成策略,实体类id属性类型 必须 字符串类型
(2)配置部分写出uuid值
3 实体类操作
3.1 对实体类crud操作
3.1.1 添加(save)操作
1 调用session里面的save方法实现
3.1.2 (get)根据id查询
1 调用session里面的get方法实现
3.1.3 (update)修改操作
1 首先查询,修改值
(1)根据id查询,返回对象
也可以像delete那样定义实体类修改,不过在赋值时就需要写完所有字段,如果只写修改字段,得到的结果就只有 修改字段 ,其他字段就会为空 ;原因也简单,因为你新的实体类里面只有修改字段
2.sql输出
3.1.4 (delete)删除操作
1 调用session里面delete方法实现
3.2 实体类对象状态(概念)
3.2.1 三种状态
3.2.1.1 瞬时态:
对象里面没有id值,对象与session没有关联
3.2.1.2 持久态:
对象里面有id值,对象与session关联
3.2.1.3 托管态:
对象有id值,对象与session没有关联
3.2.1.4 补充:移除态
是实体从数据库删除后的状态
3.2.2 saveOrUpdate--操作实体类对象的方法
实现添加、实现修改
3.2.2.1 瞬时态—添加
3.2.2.2 持久态、托管态—修改
4 Hibernate的一级缓存
4.1 什么是缓存
数据存到数据库里面,数据库本身是文件系统,使用流方式操作文件效率不是很高。
(1)把数据存到内存里面,不需要使用流方式,可以直接读取内存中数据
(2)把数据放到内存中,提供读取效率
4.2 Hibernate缓存
1 hibernate框架中提供很多优化方式,hibernate的缓存就是一个优化方式
2 hibernate缓存特点:
第一类 hibernate的一级缓存
(1)hibernate的一级缓存默认打开的
(2)hibernate的一级缓存使用范围,是session范围,从session创建到session关闭范围
(3)hibernate的一级缓存中,存储数据必须 持久态数据
第二类 hibernate的二级缓存
(1)目前已经不使用了,替代技术 redis
(2)二级缓存默认不是打开的,需要配置
(3)二级缓存使用范围,是sessionFactory范围
4.2.1 验证一级缓存存在
1 验证方式
(1)首先根据uid=1查询,返回对象
(2)其次再根据uid=1查询,返回对象
第一步执行get方法之后,发送sql语句查询数据库
第二个执行get方法之后,没有发送sql语句,查询一级缓存内容
4.2.2 Hibernate一级缓存执行过程
4.2.3 Hibernate一级缓存特性
1 持久态自动更新数据库
2 执行过程(了解)
5 Hibernate事务操作
5.1 事务相关概念
5.1.1 什么是事务
5.1.2 事务特性
5.1.3 不考虑隔离性(并发问题)
5.1.4 设置事务隔离级别—了解
mysql默认隔离级别 repeatable read
5.2 Hibernate事务代码规范写法
1 代码结构
//事务规范写法 @Test public void testTx() { SessionFactorysessionFactory = null; Sessionsession = null; Transactiontx = null; try { sessionFactory= HibernateUtils.getSessionFactory(); session= sessionFactory.openSession(); tx= session.beginTransaction(); Useruser = newUser(); user.setUsername("老兰"); user.setPassword("12369"); user.setAddress("攀枝花"); session.save(user); int i = 10/0; tx.commit(); }catch(Exception e) { e.printStackTrace(); tx.rollback(); }finally{ session.close(); sessionFactory.close(); } }
5.3 Hibernate绑定session
1 session类似于jdbc的connection,之前web阶段学过 ThreadLocal
2 帮实现与本地线程绑定session
3 获取与本地线程session
(1)在hibernate核心配置文件中配置
<!-- 在hibernate核心配置文件中配置 --> <property name="hibernate.current_session_context_class">thread</property>
(2)hibernateUtils
调用sessionFactory里面的方法得到
4 获取与本地线程绑定session时候,关闭session报错,不需要手动关闭了
6 Hibernate的api使用
6.1 Query对象
6.1.1 写hql语句
使用query对象,不需要写sql语句,但是写hql语句
(1)hql:hibernate query language,hibernate提供查询语言,这个hql语句和普通sql语句很相似
(2)hql和sql语句区别:
使用sql操作表和表字段
使用hql操作实体类和属性
6.1.2 查询所有hql语句:
from 实体类名称
6.1.3 Query对象使用
(1)创建Query对象
(2)调用query对象里面的方法得到结果
6.2 Criteria对象
6.2.1 不要语句
使用这个对象查询操作,但是使用这个对象时候,不需要写语句,直接调用方法实现
6.2.2 实现过程
(1)创建criteria对象
(2)调用对象里面的方法得到结果
6.3 SQLQuery对象
6.3.1 底层sql实现
6.3.2 实现过程
(1)创建对象
(2)调用对象的方法得到结果
返回list集合每部分是数组
返回list中每部分是对象形式
源代码文件:http://download.csdn.net/detail/qq_26553781/9773427
- hibernate5--2.数据持久化及事务
- hibernate5.0.12数据持久化框架使用第一例
- Redis数据持久化与事务
- Redis---事务及持久化配置
- Redis事务、持久化
- iPhone数据存储及持久化
- redis持久化,主从及数据备份
- redis持久化,主从及数据备份
- Redis持久化-数据丢失及解决
- redis持久化,主从及数据备份
- Docker文件系统 及 持久化数据
- redis持久化,主从及数据备份
- redis持久化,主从及数据备份
- redis持久化,主从及数据备份
- 数据存储及持久化技术
- redis持久化,主从及数据备份
- Redis持久化-数据丢失及解决
- 【Redis】事务和持久化
- Java小问题
- OpenCV中imread/imwrite与imdecode/imencode的异同
- 程序员养成这16个好习惯,离成功就不远了
- Java中相对路径,绝对路径问题总结
- js浏览器兼容问题总结及解决办法
- hibernate5--2.数据持久化及事务
- Junit单元测试+断点调试
- linux下查看所有用户及所有用户组
- 扩展欧几里得算法(求最大公约数与逆)
- 听说最近你读过不少书
- hadoop WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... usin
- 格子中输出
- TCP/IP五
- 文章标题