一 持久化类
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 , 没有关联
}