`
penghao122
  • 浏览: 357862 次
  • 性别: Icon_minigender_1
  • 来自: 广东珠海
社区版块
存档分类
最新评论

hibernate 全面学习【hibernate session学习】

阅读更多
测试对象的生命周期:

Junit简介:
  * 编写类XXXXTest,需要继承TestCase
  * 编写单元测试方法,测试方法必须以test开头,测试方法不能含有参数和返回值,如:
    public void testHello() {
  * 最好单独建立source目录存放测试类

  理解通过session接口进行CRUD的基本操作方法。    
 
  get和load的区别?
 
  Transient对象具有的特征:
  * 不处于session缓存中,不被任何一个session实例关联
  * 在数据库中没有相应的记录
 
  persistent对象具有的特征:
  * 位于一个Session的缓存中,持久对象总是和一个session实例关联
  * 持久对象和数据库中的记录对应
  * 持久对象的变化会自动同步到数据库
 
  detached对象具有的特征:
  * 不再位于session的缓存中,不被session关联
  * detached对象是由persistent对象转变过来的,因此数据库中会存在一条记录与之对应
 
    
        
   

package com.bjsxt.hibernate;

import java.util.Date;

import org.hibernate.Session;

import junit.framework.TestCase;

public class SessionTest extends TestCase {
	
	
	public void testSaveData() {
		Session session = null;
		
		//Transient对象
		User user = new User();
		try {
			//得到session
			session = HibernateUtils.getSession();
			
			//开启事务
			session.beginTransaction();
			
			user.setName("张三");
			user.setPassword("123");
			user.setCreateTime(new Date());
			user.setExpireTime(new Date());
			
			//persistent对象
			session.save(user);
			
			//persistent状态的对象的属性发生的改变,Hibernate会自动和数据库同步
			user.setName("李四1");
				
			session.getTransaction().commit();
			
		}catch(Exception e) {
			e.printStackTrace();
			session.getTransaction().rollback();
		}finally {
			HibernateUtils.closeSession(session);
		}
		
		//detached对象
		user.setName("王五1");
		try {
			session = HibernateUtils.getSession();
			session.beginTransaction();
			//persistent对象
			session.update(user);
			
			session.getTransaction().commit();
		}catch(Exception e) {
			e.printStackTrace();
			session.getTransaction().rollback();
		}finally {
			HibernateUtils.closeSession(session);
		}
	}
	
	public void testReadByGetMethod() {
		Session session = null;
		try {
			session = HibernateUtils.getSession();
			session.beginTransaction();
			
			//get会马上发出sql进行执行查询
			User user = (User)session.get(User.class, "4028808114163acb0114163b35ac0001");
			System.out.println("user name=" + user.getName());
			
			//此时为persistent对象,所以可以自动同步到数据库中
			user.setName("王二");
			session.getTransaction().commit();
		}catch(Exception e) {
			e.printStackTrace();
			session.getTransaction().rollback();
		}
		finally {
			HibernateUtils.closeSession(session);
		}
	}
	
	public void testReadByLoadMethod() {
		Session session = null;
		try {
			session = HibernateUtils.getSession();
			session.beginTransaction();
			
			//load方法实现了Lazy(延迟加载或懒加载),所以不会马上发出sql
			//只有真正使用时才会发出sql,Lazy是hibernate的重要特性
			User user = (User)session.load(User.class, "4028808114163acb0114163b35ac0001");
			
			System.out.println("user name=" + user.getName());
			
			System.out.println("password=" + user.getPassword());
			
			//此时为persistent对象,所以可以自动同步到数据库中
			user.setName("王三");
			session.getTransaction().commit();
		}catch(Exception e) {
			e.printStackTrace();
			session.getTransaction().rollback();
		}
		finally {
			HibernateUtils.closeSession(session);
		}		
	}
	
	public void testUpdate() {
		Session session = null;
		try {
			session = HibernateUtils.getSession();
			session.beginTransaction();
			
			//此时为Transient对象
			User user = new User();
			user.setId("4028808114163acb0114163b35ac0001");
			user.setName("abc");
			session.update(user);
			
			//此时为persistent对象
			
			session.getTransaction().commit();
		}catch(Exception e) {
			e.printStackTrace();
			session.getTransaction().rollback();
		}
		finally {
			HibernateUtils.closeSession(session);
		}	
		
	}
	
	public void testDelete() {
		Session session = null;
		try {
			session = HibernateUtils.getSession();
			session.beginTransaction();
			
			//此时为Transient对象
			User user = new User();
			user.setId("4028808114163acb0114163b35ac0001");
			session.delete(user);
			session.getTransaction().commit();
			
			
		}catch(Exception e) {
			e.printStackTrace();
			session.getTransaction().rollback();
		}
		finally {
			HibernateUtils.closeSession(session);
		}	
		
		//此时为Transient对象
	}
	
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics