日出星辰

          Hibernate學習之初步使用

          package com.test;
          
          import java.util.List;
          import com.model.Tuser;
          import net.sf.hibernate.HibernateException;
          import net.sf.hibernate.Session;
          import net.sf.hibernate.SessionFactory;
          import net.sf.hibernate.Transaction;
          import net.sf.hibernate.cfg.Configuration;
          import junit.framework.Assert;
          import junit.framework.TestCase;
          
          public class HibernateTest extends TestCase {
          
          	Session session = null;
          
          	/**
          	 * setUp方法在TestCase初始化的時候會自動調用 一般用于初始化公用資源 這個方法中用于初始化Hibernate Seesion
          	 */
          	protected void setUp() {
          		try {
          			/**
          			 * 采用hiberante.properties或者hibernate.cfg.xml配置文件初始化代碼的方法
          			 * Configuration cfg = new Configuration();
          			 * cfg.addClass(Tuser.class);
          			 */
          
          			/**
          			 * 采用hibernate.cfg.xml配置文件 注意與上面初始化configuration時代差異:
          			 * 1.Configuration的初始化方式
          			 * 2.xml文件中已經定義了Mapping文件,因此無需再編碼導入
          			 */
          			//-------------------------Configuration基礎語義-----------------------------------------
          			//Configuration類負責管理Hibernate配置信息。Hibernate運行時需要獲取一些底層實現的基本信息,其中關鍵屬性
          			//數據庫url、數據庫用戶名、密碼、JDBC驅動類、dialect(適配器)
          			//Configuration Hibernate會自動在當前的classpath中搜尋hibernate.cfg.xml文件并將其加載至內存中,作為后續操作的基礎配置
          			//Configuration類一般只有獲取SessonFacotry時需要涉及,當SessionFactory實例創建之后,
          			//由于配置信息已經由Hibernate綁定在返回的SessionFactory中,因此一般情況下無需再對Configuration進行操作
          			//如果不希望使用默認的hibernate.cfg.xml文件作為配置文件,可以指定配置文件名
          			//File file=new File("C:\\sample\\myhibernate.cfg.xml");
          			//Configuration cofing=new Configuration().configure(file);
          			Configuration config = new Configuration().configure();
          			//--------------------------SessionFactory基礎語義-----------------------------
          			//SessionFactory負責創建session實例,可以通過Configuration實例構建SessionFactory
          			//Configuration實例config會根據當前的數據庫配置信息,構造SessionFactory實例并返回。
          			//SessionFactory一旦構造完畢,即被賦予特定的配置信息!
          			//也就是說,之后的config的任何改變將不會影響到已經創建的SessionFacotry實例(factory)
          			//SessionFactory是線程安全,可由多個線程并發調用
          			SessionFactory factory = config.buildSessionFactory();
          			//--------------------------Session基礎語義-----------------------------------
          			//Session是Hibernate持久化操作的基礎  session是非線程安全的
          			//也就是說一個session實例只可同時有一個線程調用,同一個session實例的多線程并發調用將導致不可預知的錯誤
          			session = factory.openSession();
          		} catch (HibernateException e) {
          			// TODO Auto-generated catch block
          			e.printStackTrace();
          		}
          	}
          
          	/**
          	 * 與setUP相對應,TestCase執行完畢時,會自動調用tearDown方法 一般用于資源釋放
          	 * 此方法中用于關閉在setUp方法中打開的Hibernate Session
          	 */
          	protected void tearDown() {
          		try {
          			session.close();
          		} catch (HibernateException e) {
          			e.printStackTrace();
          		}
          	}
          
          	/**
          	 * 對象持久化(Insert)方法 Junit中,以“test”作為前綴的方法為測試方法,將被Junit自動添加到測試計劃中
          	 */
          	public void testInsert() {
          		Transaction tran = null;
          		try {
          			tran = session.beginTransaction();
          			Tuser user = new Tuser();
          			user.setName("zhangsan");
          			session.save(user);
          			session.flush();   //把緩存中的數據刷新到數據庫
          			tran.commit();
          			Assert.assertEquals(user.getId().intValue() > 0, true);
          		} catch (HibernateException e) {
          			e.printStackTrace();
          			Assert.fail(e.getMessage());
          			if (tran != null) {
          				try {
          					tran.rollback();
          				} catch (HibernateException e1) {
          					e1.printStackTrace();
          				}
          			}
          		}
          	}
          
          	/**
          	 * 對象讀取(select)測試
          	 */
          	public void testSelect() {
          		String hql = "from Tuser where name='zhangsan'";
          		try {
          			@SuppressWarnings("rawtypes")
          			List userList = session.createQuery(hql).list();
          			Tuser user = (Tuser) userList.get(0);
          			Assert.assertEquals(user.getName(), "zhangsan");
          		} catch (HibernateException e) {
          			e.printStackTrace();
          			Assert.fail(e.getMessage());
          		}
          	}
          	
          	public void testUserType(){
          		try {
          			Tuser user=(Tuser) session.load(Tuser.class, 5);
          			List list=user.getEmail();
          			list.add("saadsd@163.com");
          			Transaction tx=session.beginTransaction();
          			session.save(user);
          			tx.commit();
          		} catch (HibernateException e) {
          			e.printStackTrace();
          		}
          	}
          }
          

          posted on 2011-08-23 10:47 日出星辰 閱讀(69) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 达州市| 黔东| 伊宁县| 高雄市| 巧家县| 孝感市| 东宁县| 横峰县| 广南县| 时尚| 军事| 连江县| 通河县| 博野县| 睢宁县| 广灵县| 城固县| 宝坻区| 石家庄市| 游戏| 宜君县| 分宜县| 昆山市| 府谷县| 东台市| 耿马| 金沙县| 铜山县| 边坝县| 金乡县| 稷山县| 郁南县| 福海县| 扬州市| 谷城县| 宁远县| 宣威市| 酒泉市| 乌海市| 黄骅市| 隆尧县|