首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Hibernate学习之初始使用

2012-11-09 
Hibernate学习之初步使用package com.testimport java.util.Listimport com.model.Tuserimport net.sf.

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 blocke.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();}}}

?

热点排行