Hibernate学习之初始使用
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(); } } }