hibernate
hibernate的测试三种状态的案例
/** * @author weidan 2013-2-2 上午10:10:17 * remark: 对三种状态进行一个认知 */ @Test public void Test1(){ Session session = null; Transaction transaction = null; try { session = HibernateSessionUtil.getSession(); transaction = session.beginTransaction(); User user = new User(); user.setUname("weidan"); user.setUpassword("weidan"); //在此之前对象处于瞬时状态,原因是在数据库中没有持久化标识与之对应,而且此时user对象没有纳入session管理 session.save(user); //在这个地方user对象处于持久化状态,原因是数据库中存在与之对应的持久化标识,而且user对象已经纳入了session的管理 transaction.commit(); //在这里对象处于托管状态,原因是数据库中有与之相对应的持久化标识,但是此时的user没有纳入session的管理 } catch (HibernateException e) { if(transaction.isActive()){ transaction.rollback(); } }finally{ HibernateSessionUtil.closeSession(session); } } /** * @author weidan 2013-2-2 上午10:14:17 * remark: 对持久化状态的进一步认识 * Hibernate: insert into user (uname, upassword) values (?, ?) * Hibernate: update user set uname=?, upassword=? where uid=? */ @Test public void Test2(){ Session session = null; Transaction transaction = null; try { session = HibernateSessionUtil.getSession(); transaction = session.beginTransaction(); User user = new User(); user.setUname("weidan"); user.setUpassword("weidan"); //在此之前对象处于瞬时状态,原因是在数据库中没有持久化标识与之对应,而且此时user对象没有纳入session管理 session.save(user); //在这个地方user对象处于持久化状态,原因是数据库中存在与之对应的持久化标识,而且user对象已经纳入了session的管理 user.setUname("dange"); //对象进入持久化状态,那么user对象的任何的改变,session都会发出sql语句 transaction.commit(); //在这里对象处于托管状态,原因是数据库中有与之相对应的持久化标识,但是此时的user没有纳入session的管理 } catch (HibernateException e) { if(transaction.isActive()){ transaction.rollback(); } }finally{ HibernateSessionUtil.closeSession(session); } } /** * @author weidan 2013-2-2 上午10:28:24 * remark: * Hibernate: select user0_.uid as uid0_0_, user0_.uname as uname0_0_, user0_.upassword as upassword0_0_ from user user0_ where user0_.uid=? * Hibernate: update user set uname=?, upassword=? where uid=? */ @Test public void Test3(){ Session session = null; Transaction transaction = null; try { session = HibernateSessionUtil.getSession(); transaction = session.beginTransaction(); User user = new User(); user = (User) session.get(User.class, 15); user.setUname("hah"); System.out.println(user.getUname()); //执行了update语句,说明当调用get方法的时候,纳入了session管理,对象进入了持久化状态 transaction.commit(); } catch (HibernateException e) { if(transaction.isActive()){ transaction.rollback(); } }finally{ HibernateSessionUtil.closeSession(session); } } /** * @author weidan 2013-2-2 上午10:34:39 * remark: hibernate 比较智能化,因为session具备了一级缓存。就是session缓存,对于同一个session中具有缓存作用 * Hibernate: select user0_.uid as uid0_0_, user0_.uname as uname0_0_, user0_.upassword as upassword0_0_ from user user0_ where user0_.uid=? */ @Test public void Test4(){ Session session = null; Transaction transaction = null; try { session = HibernateSessionUtil.getSession(); transaction = session.beginTransaction(); User user = new User(); user = (User) session.get(User.class, 15); user.setUname("weidan"); //因为数据库中的username的相对应的记录值是weidan,一级缓存的原因,这个就不发送update语句,所以有利于提高效率 transaction.commit(); } catch (HibernateException e) { if(transaction.isActive()){ transaction.rollback(); } }finally{ HibernateSessionUtil.closeSession(session); } } /** * @author weidan 2013-2-2 上午10:45:17 * remark: 用load获取值可以延迟加载,要用的时候在到数据库去取值 */ @Test public void Test5(){ Session session = null; Transaction transaction = null; try { session = HibernateSessionUtil.getSession(); transaction = session.beginTransaction(); User user = new User(); user = (User) session.load(User.class, 16); //因为数据库中的username的相对应的记录值是weidan,一级缓存的原因,这个就不发送update语句,所以有利于提高效率 System.out.println(user.getUname()); transaction.commit(); } catch (HibernateException e) { if(transaction.isActive()){ transaction.rollback(); } }finally{ HibernateSessionUtil.closeSession(session); } } @Test public void Test6(){ Session session = null; Transaction transaction = null; try { session = HibernateSessionUtil.getSession(); transaction = session.beginTransaction(); User user = new User(); user = (User) session.get(User.class, 16); //因为数据库中的username的相对应的记录值是weidan,一级缓存的原因,这个就不发送update语句,所以有利于提高效率 System.out.println(user.getUname()); transaction.commit(); } catch (HibernateException e) { if(transaction.isActive()){ transaction.rollback(); } }finally{ HibernateSessionUtil.closeSession(session); } }