首页 > 代码库 > Hibernate初学---注解配置

Hibernate初学---注解配置

ssh框架是每个java程序员的基本功,工作中虽然没有用到,还是学习一下,做点学习笔记,算是一点积累吧。

废话不多说,先上手来一个简单的demo,感受一把。

开发工具:myeclipse 10

数据库:mysql

创建个简单的java工程,

第一步,创建一个学生类,代码如下:

package com.huawei.vo;import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.GenerationType;import javax.persistence.Id;@Entitypublic class Students {    private int sid;        private String sname;    @Id    //设置主键    @GeneratedValue(strategy = GenerationType.AUTO)    //主键自动增长策略    public int getSid() {        return sid;    }    public void setSid(int sid) {        this.sid = sid;    }    public String getSname() {        return sname;    }    public void setSname(String sname) {        this.sname = sname;    }        }

hibernate的orm技术很出名,可以把java对象直接映射成表,hibernate提供了两种方式用来描述对象到表的映射关系,

第一种是通过创建映射描述配置文件,名字也要很规范,要起成Students.hbm.xml,这种方式我不喜欢,而且我在想要是领域对象多了,

那不是要搞一堆映射文件啊,果断放弃之。

第二种就是基于注解的方式,看起来代码也很优雅,如上面的代码。也就是说领域对象学生中同时已经包括了对象到表的映射关系。

第二步,在src目录下新建hibernate的配置文件hibernate.cfg.xml,配置如下:

<?xml version=‘1.0‘ encoding=‘UTF-8‘?><!DOCTYPE hibernate-configuration PUBLIC          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><!-- Generated by MyEclipse Hibernate Tools.                   --><hibernate-configuration><session-factory name="mysql">    <property name="connection.driver_class">        com.mysql.jdbc.Driver    </property>    <property name="connection.url">        jdbc:mysql://localhost:3306/hibernate    </property>    <property name="connection.username">root</property>    <property name="connection.password">root</property>    <property name="dialect">        org.hibernate.dialect.MySQL5Dialect    </property>    <!-- 后台打印sql便于调试 -->    <property name="show_sql">true</property>    <property name="hbm2ddl.auto">update</property>    <property name="current_session_context_class">thread</property>    <mapping class="com.huawei.vo.Students" /></session-factory></hibernate-configuration>

一定要在sessionFactory中把映射关系的类通过<mapping>标签加载进去。这样就算配置好了。

用getCurrentSession()获取session的时候一定要把current_session_context_class属性设置成thread

第三步,写一个单元测试类吧,代码如下:

package com.huawei.vo;import junit.framework.TestCase;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.cfg.AnnotationConfiguration;public class TestStudents extends TestCase{    private static SessionFactory sessionFactory;        @Override    protected void setUp() throws Exception {        sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();    }    @Override    protected void tearDown() throws Exception {        sessionFactory.close();    }    public void testSave()    {        Session session = sessionFactory.getCurrentSession();        Transaction tx = session.beginTransaction();        try        {            Students s = new Students();            s.setSname("yaoying");            session.save(s);            tx.commit();        }        catch (Exception ex)        {            tx.rollback();        }    }}

这里session的获取有两种方式:

1、通过sessionFactory的openSession()获取。

2、通过sessionFactory的getCurrentSession()获取。

由于第二种方式获取的session是跟当前线程绑定的,也就是说只要是单线程操作每次获得的是同一个session,而且hibernate在事务的提交和回滚后会

自动帮你完成session的关闭操作,如果是openSession每次会获得一个新的session实例,需要手动完成session的关闭。

最后,执行testSave成功后会看到绿色的进度条。