Hibernate入门 (二)三种状态

.大配置
方言
property name="dialect" 取值
自动构建表结构
property name="hbm2ddl" true
connection_url: 连接字符串
显示sql
show_sql
格式化SQL
format_sql
2.Hibernate测试类中操作步骤
7个步骤
1.读取配置文件,形成config对象
2.SessionFactory
3.获取Session
4.开启一个事务
5.执行操作
6.结束(提交或者回滚)
7.关闭
3.小配置
<class name="Dept" table="Dept">
<id property="deptno" column="deptno">
主键生成策略 : 数据库
<generator class="native"></generator>
</id>
</class>

4.idea引入依赖(使用的Oralce的话)
1.手工jar包注册到仓库中
1.有maven环境
2.修改conf/settings.xml 中的路径,改成自己仓库的路径
3.注册命名 mvc insatll:install-file -Dgroupid
2、直接物理引用
5.按主键查询
get
load

区别1:load:代理对象
get: 永远返回的是原始对象本身

区别2:如果load/get 加载的记录数据不存在,get返回null 。load抛出异常ObjectNotFoundException

6.添加
注意事项:需要事务环境
session.save(dog);

7.补充了两种获取session的方案
openSession()
getCurrentSession()--------------->你得在大配置中。
<property name="current_session_context_class">thread</property>
导致的结果,自己就不用手动的关闭连接了。
--------------------------------------------------------------
修改
update()
merge(): save() update() 有没有OID
saveOrUpdate() 修改

saveOrUpdate()和merge()区别
解析:区别 1:saveOrUpdate() 会改变入参进来对象的状态 merge不会
区别 2: saveOrUpdate() 没有返回值 merge返回一个对象

2.OID
OID 是持久化类(Student)与数据表主键对应属性, 用来唯一区分持久化对象。
3.删除

4.PO VO DTO POJO JavaBean
JavaBean=POJO 和数据库无关的 PageUtil类,需要持久化不不需要
PO=POJO+xml

5.主键生成策略
Increment :hibernate生成,弊端:多线程可能取到的是同一个id,但是导致其他线程保存失败
identity: 数据库生成 ,mysql支持,oracle不支持
sequence: 数据库生成,oracle支持
native: 数据库决定:mysql使用identity,oralce使用序列
uuid Hibernate生成 优点:不会重复,数据迁移比较好 要求:列的类型字符串
assigned :程序员手动操作的。

OID
Hibernate中Java对象的三种状态
get和load



/**
* 在 increment基础之上操作!
* hibernate中的三种状态
*
* 01.瞬时状态 Student stu=new Student();
* 新创建的对象,没有与session产生关联!
* 02.持久状态 session.save(stu)
* 被session管理,存在session缓存中!当commit的时候,会提交到数据库!
* 03.游离状态 session.close(); stu
* 曾经被session管理过,但是现在不存在session缓存中了!
*
*
* 瞬时状态 和游离状态的区别在于:是否被session管理过! 对象是否拥有OID(对象标识符)!
*
* 对象有主键值id,那么就有OID,在操作的时候会执行update语句!
* 没有主键值id,那么就没有OID,在操作的时候会执行insert语句!
*
* 对象只要是没有OID,在执行update()肯定报错!在执行saveOrupdate的时候会执行Save()方法!
*
*/

6.核心API
6.1 Configuration
InputStream x = ConfigHelper.getResourceAsStream("/hibernate.properties");
hibernate.hbm.xml配置文件

6.2 SessionFactory:重量级的,一个程序中一份就可以了。线程安全的。
Creates Sessions. Usually an application has a single SessionFactory.
Threads servicing client requests obtain Sessions from the factory.

创建会话。通常, 应用程序有一个单一的 SessionFactory。
服务客户端请求的线程从工厂获取会话。
SessionFactorys are immutable. The behaviour of a SessionFactory
is controlled by properties supplied at configuration time.
These properties are defined on Environment.

SessionFactorys 是不可变的。SessionFactory 的行为由配置时提供的属性控制。
这些属性是在环境中定义的。

线程安全的::方法中来用一个对象,不用考虑线程安全问题
成员变量,发现他是一个接口,接口中都是方法

6.3 Session 他也是一个接口,实现类是SessionImpl ,当中也是方法,但是他是线程非安全的。
Session构建两种方式

方式一:factory.openSession(); 随机从连接池中获取到一个连接。

factory.getCurrentSession(); 一定获取的是和当前线程绑定的session.

6.4 事务

7.刷新缓存(某一时刻点触发的动作)
12: 睡觉了 脱衣服
28 结婚 入洞房 脑洞打开,自己想。否则就不好玩了 (怎么入洞房)
tx.commit() ;刷新缓存 刷新缓存做什么 (做脏检查)

快照(Snapshot)是某个数据集在某一特定时刻的镜像,也称为即时拷贝,它是这个数据集的一个完整可用的副本

1.修改
update
merge()
saveOrUpdate()

2.删除

3.PO DTO VO POJO JavaBean

4.主键生成策略
native
uuid
assigned

5.在Hibernate中Java对象的三种状态
瞬时态
持久态
游离态

瞬时态---->持久态 save() load() get()

持久态---->游离态 clear() close() evict()

游离态---->瞬时态 delete()

瞬时态和游离态?有没有OID
6.OID 持久化对象的唯一标志。OID一定是和底层数据表中记录的主键值绑定的。

7.Hibernate API
Configuration 类

SessionFactory 接口 SessionFactoryImpl

Session 接口 SessionImpl
session:getCurrentSession()当前线程绑定 调度多次 内存地址一样,同一个对象
openSession() :每次获取到的session一定是新的。
Transaction

原文地址:https://www.cnblogs.com/hualishu/p/7586202.html