本文共 4695 字,大约阅读时间需要 15 分钟。
持久化类:
定义: 持久化类: javaBean + 和底层数据库表创建了映射关系: 特点: (1)无参数构造器: 底层通过反射, 创建实体bean (2)提供属性, 属性提供get set方法: (3)必须Serializable接口: (4)实体类当中必须同一个OID : 总结: java 当中通过地址值: 数据库:主键: Hibernate: OID (5) 不能使用final修饰: (6) 属性尽量使用包装字段:Hibernate是持久层框架, 通过持久化类完成ORM操作。 Hibernate为了更好的管理持久化类, 将持久化类分为三个状态。
持久化类 = java类 + 映射:1:瞬时态
一般对象刚创建出来的时候的状态 这种对象没有唯一的OID,没有被session管理, 称之为瞬时态对象。 2:持久态 对象被保存后的状态 这种对象有唯一的表示OID,被session管理,称之为持久化对象。 持久化类的持久态的对象, 可以自动更新数据库。 3:托管态 session关闭之后的对象的状态 这种对象具有唯一的OID,没有被session管理,称之为托管态对象。 1.4.1.4:代码演示对象的几个状态 /*测试持久化类对象的三个状态:
*/ public class TestDemo02 {public static void main(String[] args) {
Session session = HibernateUtils.openSession(); Transaction tx = session.beginTransaction();Customer cus = new Customer();//瞬时状态, 没有唯一的OID, 没有被session管理: cus.setCust_name("毕从明"); Serializable save = session.save(cus);//持久态对象, 具有唯一的表示OID, 同时也被session管理: System.out.println(save);//添加操作: 返回是当前对象的id的值: tx.commit(); session.close(); System.out.println(cus.getCust_name());// 托管状态, 有唯一的OID,没有被session管理。 session已经被关闭了
}
}
package com.yidongxueyuan;import java.io.Serializable;import org.hibernate.Session;import org.hibernate.Transaction;import org.junit.Test;import com.yidongxueyuan.domain.Customer;import com.yidongxueyuan.utils.HibernateUtils;public class TestSession { // session.sava(); //保存: //展示对象的三个状态: @Test public void testName() throws Exception { Session session = HibernateUtils.openSession(); Transaction tx = session.beginTransaction(); //演示三个状态: /* * * 1: 改对象刚刚被初始化: * 没有oid : * 没有被session管理: */ //瞬时态: Customer customer = new Customer(); customer.setCust_name("王导演"); //持久态: /* * oid : * 已经被session管理: * 能够自动更新数据库: */ Serializable id = session.save(customer); /* * 托管:游离态 * * 具有oid : * 但是不被session管理: */ Customer cust02 = new Customer(); cust02.setCust_id(1002);//具有oid 没有被session 管理: 托管态: tx.commit(); session.close(); System.out.println(customer.getCust_name());//customer 这个对象是一个游离态: } // 持久态没有调用update 能够自动更新数据库: @Test public void testName2() throws Exception { Session session = HibernateUtils.openSession(); Transaction tx = session.beginTransaction(); //演示三个状态: Customer customer = session.get(Customer.class, 1L); customer.getCust_id(); customer.setCust_name("fghdj"); /* * 只有事务的提交, 没有使用session.update方法, 同样对象能够被修改。 * 特点: 持久态对象能够自动更新数据库: * 原因: * 1: Session 的以及缓存: * 2: 快照区: */ tx.commit(); session.close(); } /* * 持久态转换成其他的状态: */ @Test public void testName3() throws Exception { Session session = HibernateUtils.openSession(); Transaction tx = session.beginTransaction(); /* * 获得持久态的方法; 通过session对象从数据库当中查询出来的对象就是一个持久态对象: * get(); * load(); * find(); * iterator()... * */ //获得了了持久态: Customer customer = session.get(Customer.class, 2L); //转换成瞬时态: // session.delete(customer); /* * 转换成游离态: * 方式一: session.close方法: * 方式二: session.evict(obj); * 方式三; session.clear(); */ session.clear(); session.evict(customer); System.out.println(customer.getCust_name());//游离态: tx.commit(); session.close(); //方式一: session关闭: // System.out.println(customer.getCust_name());//游离态: } /* * 游离态转换成 持久态: */ @Test public void testName4() throws Exception { Session session = HibernateUtils.openSession(); Transaction tx = session.beginTransaction(); //获得了了持久态: Customer customer = session.get(Customer.class, 2L); session.clear(); System.out.println(customer.getCust_name());//游离态: //将游离态转换成持久态: session.update(customer); session.saveOrUpdate(customer);// session.lock(customer, lockmodel ); tx.commit(); session.close(); } }
(代码在上面那个里面)
瞬时态对象 获得: Customer cust = new Customer(); 状态转换: 瞬时—>持久: sava(Object obj) savaOrUpdate(Object obj) 瞬时—>托管: cus.setCust_id(1); 持久态对象 获得: get() , load() find(), iterate(); 状态转换: 持久---->瞬时: delete 持久---->托管: close() , clear(), evict(Object obj); 托管态对象 获得: Customer cus =new Customer(); Cus.setCus_Id(); 状态转换: 托管---->持久: update() savaOrUpdate(); 在第一天的修改方法。和保存方法当中可以解释,从对象的角度来分析: 托管—>瞬时: cus.setCst_id(null); 1.4.3:持久态对象的特征: 1.4.3.1:持久化类持久态对象自动更新数据库: /* * 演示: 持久化类持久态对象能够自动更新数据库: */ @Test public void testName() throws Exception { Session session = HibernateUtils.openSession(); Transaction tx = session.beginTransaction();//=========== //1;获得一个持久态对象: get(); Customer customer = session.get(Customer.class, 1L); customer.setCust_name("haha"); //2:之前需要调用update();更新数据库当中的内容: //现在不需要调用update,数据库当中数据也会被我修改:在这儿加断点, 测试效果。 //原因: 持久化状态,会自动修改数据库。 当修改的语句和数据库完全一致, 不发送sql 语句,很智能。 //底层: 依赖了Hibernate底层的一级缓存。 tx.commit(); session.close();}
转载地址:http://qgmen.baihongyu.com/