日出星辰

          Hibernate學(xué)習(xí)之初步使用

          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初始化的時(shí)候會(huì)自動(dòng)調(diào)用 一般用于初始化公用資源 這個(gè)方法中用于初始化Hibernate Seesion
          	 */
          	protected void setUp() {
          		try {
          			/**
          			 * 采用hiberante.properties或者h(yuǎn)ibernate.cfg.xml配置文件初始化代碼的方法
          			 * Configuration cfg = new Configuration();
          			 * cfg.addClass(Tuser.class);
          			 */
          
          			/**
          			 * 采用hibernate.cfg.xml配置文件 注意與上面初始化configuration時(shí)代差異:
          			 * 1.Configuration的初始化方式
          			 * 2.xml文件中已經(jīng)定義了Mapping文件,因此無需再編碼導(dǎo)入
          			 */
          			//-------------------------Configuration基礎(chǔ)語義-----------------------------------------
          			//Configuration類負(fù)責(zé)管理Hibernate配置信息。Hibernate運(yùn)行時(shí)需要獲取一些底層實(shí)現(xiàn)的基本信息,其中關(guān)鍵屬性
          			//數(shù)據(jù)庫url、數(shù)據(jù)庫用戶名、密碼、JDBC驅(qū)動(dòng)類、dialect(適配器)
          			//Configuration Hibernate會(huì)自動(dòng)在當(dāng)前的classpath中搜尋hibernate.cfg.xml文件并將其加載至內(nèi)存中,作為后續(xù)操作的基礎(chǔ)配置
          			//Configuration類一般只有獲取SessonFacotry時(shí)需要涉及,當(dāng)SessionFactory實(shí)例創(chuàng)建之后,
          			//由于配置信息已經(jīng)由Hibernate綁定在返回的SessionFactory中,因此一般情況下無需再對(duì)Configuration進(jìn)行操作
          			//如果不希望使用默認(rèn)的hibernate.cfg.xml文件作為配置文件,可以指定配置文件名
          			//File file=new File("C:\\sample\\myhibernate.cfg.xml");
          			//Configuration cofing=new Configuration().configure(file);
          			Configuration config = new Configuration().configure();
          			//--------------------------SessionFactory基礎(chǔ)語義-----------------------------
          			//SessionFactory負(fù)責(zé)創(chuàng)建session實(shí)例,可以通過Configuration實(shí)例構(gòu)建SessionFactory
          			//Configuration實(shí)例config會(huì)根據(jù)當(dāng)前的數(shù)據(jù)庫配置信息,構(gòu)造SessionFactory實(shí)例并返回。
          			//SessionFactory一旦構(gòu)造完畢,即被賦予特定的配置信息!
          			//也就是說,之后的config的任何改變將不會(huì)影響到已經(jīng)創(chuàng)建的SessionFacotry實(shí)例(factory)
          			//SessionFactory是線程安全,可由多個(gè)線程并發(fā)調(diào)用
          			SessionFactory factory = config.buildSessionFactory();
          			//--------------------------Session基礎(chǔ)語義-----------------------------------
          			//Session是Hibernate持久化操作的基礎(chǔ)  session是非線程安全的
          			//也就是說一個(gè)session實(shí)例只可同時(shí)有一個(gè)線程調(diào)用,同一個(gè)session實(shí)例的多線程并發(fā)調(diào)用將導(dǎo)致不可預(yù)知的錯(cuò)誤
          			session = factory.openSession();
          		} catch (HibernateException e) {
          			// TODO Auto-generated catch block
          			e.printStackTrace();
          		}
          	}
          
          	/**
          	 * 與setUP相對(duì)應(yīng),TestCase執(zhí)行完畢時(shí),會(huì)自動(dòng)調(diào)用tearDown方法 一般用于資源釋放
          	 * 此方法中用于關(guān)閉在setUp方法中打開的Hibernate Session
          	 */
          	protected void tearDown() {
          		try {
          			session.close();
          		} catch (HibernateException e) {
          			e.printStackTrace();
          		}
          	}
          
          	/**
          	 * 對(duì)象持久化(Insert)方法 Junit中,以“test”作為前綴的方法為測(cè)試方法,將被Junit自動(dòng)添加到測(cè)試計(jì)劃中
          	 */
          	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();
          				}
          			}
          		}
          	}
          
          	/**
          	 * 對(duì)象讀?。╯elect)測(cè)試
          	 */
          	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) 評(píng)論(0)  編輯  收藏


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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 怀来县| 镇坪县| 琼结县| 班玛县| 石门县| 巴马| 道孚县| 梅河口市| 邢台市| 濉溪县| 图木舒克市| 兴宁市| 凤庆县| 泸定县| 确山县| 寿宁县| 嘉禾县| 高要市| 磐安县| 凤城市| 丹东市| 孝义市| 建水县| 张家界市| 临颍县| 锡林郭勒盟| 长治县| 大渡口区| 当阳市| 股票| 安丘市| 泸水县| 康平县| 大荔县| 泰来县| 招远市| 微山县| 夏邑县| 崇州市| 泸州市| 通道|