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 , 没有关联
-
-
-
}