1.持久化:内存对象--->数据库(硬盘)Hibernate持久化的框架
持久化类:Java对象与数据库中的表建立映射关系 Hibernate就称为持久化类(Java类+映射文件)
2.编写规则:
二 主键生成策略
1.主键分类:
代理主键更合理
2.生成策略
测试:
- //测试主键生成策略
- public class Demo {
-
- @Test
- //保存客户
- public void fun1(){
- //1 获得session
- Session session = HibernateUtils.openSession();
- //2 控制事务
- Transaction tx = session.beginTransaction();
- //3执行操作
- Customer c = new Customer();
- c.setCust_name("王东");
-
- session.save(c);
-
- //4提交事务.关闭资源
- tx.commit();
- session.close();
-
-
- }
- }
increment 单线程(数据库中的表不能是自增用的是Hibernate的自增)
- public class Demo {
-
- @Test
- //保存客户
- public void fun1(){
- //1 获得session
- Session session = HibernateUtils.openSession();
- //2 控制事务
- Transaction tx = session.beginTransaction();
- //3执行操作
- Customer c = new Customer();
- c.setCust_name("联想");
-
- session.save(c);
-
- //4提交事务.关闭资源
- tx.commit();
- session.close();
-
-
- }
- @Test
- //保存客户
- public void fun2(){
- //1 获得session
- Session session = HibernateUtils.openSession();
- //2 控制事务
- Transaction tx = session.beginTransaction();
- //3执行操作
- Customer c = new Customer();
- c.setCust_name("苹果");
-
- session.save(c);
-
- //4提交事务.关闭资源
- tx.commit();
- session.close();
-
-
- }
- }
两个线程都会执行此语句,查到相同的最大id 在存储的时候就会报错
三 持久化类的三种状态
1.三种状态:
瞬时态transient
无oid 无session管理的对象
有oid 有session管理的对象
有oid无session管理的对象
session管理:调session的方法把对象交给session管理
oid:唯一的标识,在DB中有主键id
- //测试对象的三种状态
- public class Demo {
-
- @Test
- //查看三种状态
- public void fun1(){
- //1 获得session
- Session session = HibernateUtils.openSession();
- //2 控制事务
- Transaction tx = session.beginTransaction();
- //3执行操作
- Customer c = new Customer(); // 没有id, 没有与session关联 => 瞬时状态
-
- c.setCust_name("联想"); // 瞬时状态
-
- session.save(c); // 持久化状态, 有id,有关联(返回id)下面直到session关闭之前的状态都是持久态
-
- //4提交事务.关闭资源
- tx.commit();
- session.close();// 游离|托管 状态, 有id , 没有关联
-
- }
-
- }
2.三种状态的转换:
持久态对象可以自动更新数据库
不需要调用session.update(obj)就可以自动更新数据库
原理:依赖了Hibernate的一级缓存
- @Test
- //三种状态特点
- // 持久化状态特点: 持久化状态对象的任何变化都会自动同步到数据库中.
- public void fun3(){
- //1 获得session
- Session session = HibernateUtils.openSession();
- //2 控制事务
- Transaction tx = session.beginTransaction();
- //3执行操作
-
- Customer c = session.get(Customer.class, 1l);//持久化状态对象
-
- c.setCust_name("微软公司");
-
- //4提交事务.关闭资源
- tx.commit();
- session.close();// 游离|托管 状态, 有id , 没有关联
-
-
- }