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;

@Entity
public 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成功后会看到绿色的进度条。

Hibernate初学---注解配置,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。