日出星辰

          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初始化的時候會自動調(diào)用 一般用于初始化公用資源 這個方法中用于初始化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文件中已經(jīng)定義了Mapping文件,因此無需再編碼導入
          			 */
          			//-------------------------Configuration基礎語義-----------------------------------------
          			//Configuration類負責管理Hibernate配置信息。Hibernate運行時需要獲取一些底層實現(xiàn)的基本信息,其中關鍵屬性
          			//數(shù)據(jù)庫url、數(shù)據(jù)庫用戶名、密碼、JDBC驅(qū)動類、dialect(適配器)
          			//Configuration Hibernate會自動在當前的classpath中搜尋hibernate.cfg.xml文件并將其加載至內(nèi)存中,作為后續(xù)操作的基礎配置
          			//Configuration類一般只有獲取SessonFacotry時需要涉及,當SessionFactory實例創(chuàng)建之后,
          			//由于配置信息已經(jīng)由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負責創(chuàng)建session實例,可以通過Configuration實例構建SessionFactory
          			//Configuration實例config會根據(jù)當前的數(shù)據(jù)庫配置信息,構造SessionFactory實例并返回。
          			//SessionFactory一旦構造完畢,即被賦予特定的配置信息!
          			//也就是說,之后的config的任何改變將不會影響到已經(jīng)創(chuàng)建的SessionFacotry實例(factory)
          			//SessionFactory是線程安全,可由多個線程并發(fā)調(diào)用
          			SessionFactory factory = config.buildSessionFactory();
          			//--------------------------Session基礎語義-----------------------------------
          			//Session是Hibernate持久化操作的基礎  session是非線程安全的
          			//也就是說一個session實例只可同時有一個線程調(diào)用,同一個session實例的多線程并發(fā)調(diào)用將導致不可預知的錯誤
          			session = factory.openSession();
          		} catch (HibernateException e) {
          			// TODO Auto-generated catch block
          			e.printStackTrace();
          		}
          	}
          
          	/**
          	 * 與setUP相對應,TestCase執(zhí)行完畢時,會自動調(diào)用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();   //把緩存中的數(shù)據(jù)刷新到數(shù)據(jù)庫
          			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 日出星辰 閱讀(72) 評論(0)  編輯  收藏


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


          網(wǎng)站導航:
           
          主站蜘蛛池模板: 江口县| 齐齐哈尔市| 正安县| 绥棱县| 合作市| 邹城市| 察隅县| 中牟县| 汉阴县| 伊春市| 兴城市| 浮山县| 岱山县| 丰县| 金平| 黔西县| 醴陵市| 四平市| 巴里| 镶黄旗| 石嘴山市| 门源| 洛扎县| 措勤县| 无锡市| 丰台区| 广宁县| 辛集市| 临邑县| 青海省| 托克托县| 孟州市| 平定县| 巴林右旗| 延川县| 泾源县| 邮箱| 康保县| 娄烦县| 满城县| 乐亭县|