Hibernate知识点小结(二)
一、持久化对象和标识符
1、持久化类
配置完关系后,操作的实体对应的类,成为持久化类 (Customer)
2、持久化类标识符(oid:object id)
3、持久化类主键的生成策略
<id name="cust_id">
<generator class="native"></generator>
</id>
generator的class属性的取值:
数据库底层生成主键:
identity:底层以自增的方式生成主键 例如mysql
sequence:底层以序列方式生成主键 例如oracle
native:根据数据库底层的主键生成策略自动选用identity还是sequence (使用最多)
hibernate生成主键:
increment:自增
uuid:生成不重复的字符串
手动指定主键:
assigned
代理主键:没有实际业务意义的字段
自然主键:可以具备主键的要求(唯一不空) 与此同时还具备业务意义(身份证、手机号、学号....)
二、hibernate持久化对象的三种状态 和 一级缓存
1、持久化对象的三种状态
瞬时态:实体没有oid 也与session没有关联
持久态:实体有oid 与session有关联
脱管态:实体有oid 与session失去关联
代码演示:
Session session = HibernateUtils.openSession();
Transaction transaction = session.beginTransaction();
Customer customer = new Customer(); //瞬时态
customer.setCust_name("jd"); //瞬时态
System.out.println(customer); //瞬时态
session.save(customer); //执行完毕后 持久态
System.out.println(customer); //持久态
transaction.commit(); //持久态
session.close(); //脱管态
System.out.println(customer); //脱管态
2、hibernate的一级缓存(重点)
hibernate存在两级缓存:
一级缓存:hibernate的内置缓存,session级别的缓存
二级缓存:hibernate的外置缓存,sessionFactory级别缓存
验证一级缓存是存在的?
Session session = HibernateUtils.openSession();
Transaction transaction = session.beginTransaction();
//查询对象
Customer customer = session.get(Customer.class, 4L);//发送sql查询数据 封装Customer 将customer缓存在session中
Customer customer2 = session.get(Customer.class, 4L);//从session获取4号customer
System.out.println(customer);
System.out.println(customer2);
transaction.commit();
session.close();
持久态对象具备自动发送sql的能力
为什么持久态对象可以自动发送sql?一级缓存内部存在快照区

三、事务相关
1、事务的特性ACID
原子性:事务是数据库操作最小单位 不可再分割
一致性:同时成功或同时失败
隔离性:多个事务互不影响的
持久性:当事务提交 数据就会被持久化到磁盘上
2、并发操作出现的问题
脏读:A事务读取到B事务尚未提交的数据(最不安全的 开发中必须要避免的)
不可重复读:一个事务中多次读取数据的内容不一致
虚读/幻读:一个事务中多次读取数据的条数不一致
3、设置数据库的隔离级别(isolation)解决并发问题
read uncommitted: 都不能解决 没人用
read committed:解决脏读 oracle的默认隔离级别
repeatabel read:解决不可重复读和脏读 mysql的默认隔离级别
serializable:都能解决 性能很低
4、hibernate与事务相关的配置
1、session与线程绑定
作用:业务层使用session控制事务 dao层使用同一个session进行实体操作
<property name="hibernate.current_session_context_class">thread</property>
2、hibernate可以配置隔离级别
<property name="hibernate.connection.isolation">1/2/4/8</property>
//十六进制数
read uncommitted: 1 0001
read committed:2 0010
repeatabel read:4 0100
serializable:8 1000
四、hibernate的查询操作(重点)
hibernate的查询方式:5种
1、oid方式 get/load方法
2、对象导航方式
3、HQL方式 Hibernate Query Language 面向对象+结构化查询 (重点)
4、QBC方式 Query By Criteria 完全面向对象的(api)
5、SQL方式 通过sql语句查询
Hibernate知识点小结(二)的更多相关文章
- Hibernate知识点小结(三)-->一对多与多对多配置
一.多表关系与多表设计 1.多表关系 一对一: 表的设计原则(分表原则): 优化表的性能 基于语意化分表 ...
- Hibernate知识点小结汇总
Hibernate部分 1.为什么要使用Hibernate开发你的项目呢?Hibernate的开发流程是怎么样的? 为什么要使用 ①.对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复 ...
- Hibernate知识点小结(四)--JPA
一.jpa的简介和入门 JPA:Java Persistence API,接口规范 Hinernate内部为JPA规范提供实现 开发步骤(EntityManager): ...
- Hibernate知识点小结(一)--快速入门
一.Hibernate的简介 1.Hibernate是一个开放源代码的对象关系映射框架 2.对象关系映射:ORM Object Relation Mapping 对象与数据 ...
- Spring知识点小结(二)
一.配置非自定义的Bean(数据源DataSource模型) DBCP数据源: 导入dbcp的jar包:dbcp+pool+connector 代码实现: ...
- Struts2知识点小结(二)
一.结果视图的配置 <result name="success">/success.jsp</result> 1.局部结果视图 ...
- C++重要知识点小结---3
C++重要知识点小结---1:http://www.cnblogs.com/heyonggang/p/3246631.html C++重要知识点小结---2:http://www.cnblogs.co ...
- SpringBoot 系列教程之事务隔离级别知识点小结
SpringBoot 系列教程之事务隔离级别知识点小结 上一篇博文介绍了声明式事务@Transactional的简单使用姿势,最文章的最后给出了这个注解的多个属性,本文将着重放在事务隔离级别的知识点上 ...
- disruptor笔记之四:事件消费知识点小结
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
随机推荐
- 【MSDN】 SqlServer DBCC解析
汇总学习下SqlServer的DBCC指令. DBCC:Transact-SQL 编程语言提供 DBCC 语句以作为 SQL Server 的数据库控制台命令. 数据库控制台命令语句可分为以下类别. ...
- 自动化运维与Saltstack
一.自动化运维介绍 1.自动化运维产生背景 传统的IT运维是将数据中心中的网络设备.服务器.数据库.中间件.存储.虚拟化.硬件等资源进行统一监控,当资源出现告警时,运维人员通过工具或者基于经验进行 ...
- sort遇到的问题
var arr = [2,10,6,9,7,8]; var arr1 = arr.sort(); var arr2 = arr.sort(function(a,b){ if (a>b){ ret ...
- iframe中插入代码并执行
最近有需求通过iframe插入代码.有蛮多方法,如下: 1 var iframe = document.getElementById('previewUrl'); 2 iframe.src = 'ab ...
- Linux常用三十七条指令
Linux常用三十七条指令 基础指令(11):ls,pwd,cd,mkdir,touch,cp.mv,rm,vim,>/>>/,cat 进阶指令(10):df,free,head,t ...
- .NET开源工作流RoadFlow-表单设计-标签(label)
LABEL标签即在表单中添加一个文本标签: 字号:标签显示文字的大小. 颜色:标签显示文字的颜色. 样式:以粗体和斜体显示.
- XUtils3 的 环境搭建与简单使用
XUtils3 的 环境搭建 环境搭建三部曲 ----------------------- 说明 : author 修雨轩陈 使用andorid Studio 已经创建了一个项目 并且自己需要使用 ...
- Android之自定义(上方标题随ViewPager手势慢慢滑动)
最近很蛋疼,项目要模仿网易新闻的样式去做.上次把仿网易新闻客户端的下拉刷新写出来了,这次是ViewPager的滑动,同时ViewPager的上面标题下划线跟随者移动,本来通过ViewPager的OnP ...
- 在MVC中使用Bundle打包压缩js和css
第一步:安装 安装“System.Web.Optimization”:在中“NuGet”中搜索 安装. 第二步:配置 配置“Views”目录下的“web.config”文件增加“System.Web. ...
- Android应用开发基础之八:广播与服务(二)
服务两种启动方式 startService:服务被启动之后,跟启动它的组件没有一毛钱关系 bindService:跟启动它的组件同生共死 绑定服务和解绑服务的生命周期方法:onCreate->o ...