1. 环境配置
1.1 hiberante环境配置
hibernate可实现面向对象的数据存储。hibernate的官网:http://hibernate.org/ 官网上选择hibernate ORM,可以下载最新的hibernate,还有配套的document教程 http://docs.jboss.org/hibernate/orm/4.3/manual/en-US/html_single/ 。下载到的hibernate文件夹中有document文档(hibernate\documentation\manual\en-US\html_single)。发现hibernate4.3.1的文件夹中的文档和网站上提供的答案不太一样,官网的文档更详细一些,还附有toturial的源代码。
打开eclipse->windows->preferences->java->build path->user libraries,点击new,新建一个library,可取名为hibernate。点击Add JARs,选择hibernate->lib->required中的所有jar文件,另外还需要加上数据库的connector文件。因为使用的是mysql,所以我这里用到的mysql-connector-java的jar文件。
1.2 mysql数据库配置
安装mysql服务器,设置root的密码为root。启动mysql服务器,新建数据库hibernate,并新建表student。
| 1 2 3 4 5 | # mysql -uroot -proot> createdatabasehiberante;> use hibernate;> createtablestudent(id intprimarykey, namevarchar(20), age int);> quit; | 
2. 实例代码
新建一个java工程,假设取名为HibernateHelloWorld。在src下新那一个package,可取名为com.sun.hibernate.model
2.1 类代码
新建一个简单的类,放在com.sun.hibernate.model包下。内容如下:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | packagecom.sun.hibernate.model;publicclassStudent {    privateintid;    privateString name;    privateintage;    publicintgetId() {        returnid;    }    publicvoidsetId(intid) {        this.id = id;    }    publicString getName() {        returnname;    }    publicvoidsetName(String name) {        this.name = name;    }    publicintgetAge() {        returnage;    }    publicvoidsetAge(intage) {        this.age = age;    }} | 
2.2 配置hibernate配置文件
hibernate\projec\etc中的hiberante.cfg.xml可以作为hibernate的配置文档,或者可使用hibernate\documentation\manual\en-US\html_single\index.html作为模板。在src文件夹下新建一个文件,并命名为hibernate.cfg.xml。(不可命名为其他文件名)最基础的配置文件可参考如下:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | <?xml version=‘1.0‘encoding=‘utf-8‘?><!DOCTYPE hibernate-configuration PUBLIC        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"    <hibernate-configuration>    <session-factory>        <!-- Database connection settings -->    <property name="connection.driver_class">com.mysql.jdbc.Driver</property>    <property name="connection.url">jdbc:mysql://localhost/hibernate</property>    <property name="connection.username">root</property>    <property name="connection.password">root</property>            <!-- JDBC connection pool (use the built-in) -->    <!-- <property name="connection.pool_size">1</property> -->            <!-- SQL dialect -->    <property name="dialect">org.hibernate.dialect.MySQLDialect</property>            <!-- Echo all executed SQL to stdout -->    <property name="show_sql">true</property>            <!-- Enable Hibernate‘s automatic session context management -->    <!--<property name="current_session_context_class">thread</property>-->            <!-- Drop and re-create the database schema on startup -->    <!-- <property name="hbm2ddl.auto">create</property> -->            <!-- Disable the second-level cache -->    <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>        <mapping resource="com/sun/hibernate/model/Student.hbm.xml"/>            </session-factory></hibernate-configuration> | 
红色标记处可根据包名和类名做修改。若类名为Student,则此处的类配置文件必为:Student.hbm.xml。
2.3 类mapping文件
新建一个文件,命名为Student.hbm.xml,放在com.sun.hibernate.model包下。内容如下:
| 1 2 3 4 5 6 7 8 9 10 11 12 | <?xml version="1.0"encoding="UTF-8"?><!DOCTYPE hibernate-mapping PUBLIC    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"<hibernate-mapping package="com.sun.hibernate.model">    <classname="Student">        <id name="id"></id>        <property name="name"></property>        <property name="age"></property>    </class></hibernate-mapping> | 
注意标红处,此处与hibernate.cfg.xml不一样。如果配置地与hiberante.cfg.xml一样,运行时会提示错误:“文档根元素 "hibernate-mapping" 必须匹配 DOCTYPE 根 "hibernate-configuration" ”
2.4 StudentTest测试类
新增Student.java的junit测试类StudentTest.java,放在com.sun.hibernate.model包下代码如下:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | packagecom.sun.hibernate.model;importorg.hibernate.Session;importorg.hibernate.SessionFactory;importorg.hibernate.cfg.Configuration;publicclassStudentTest {    publicstaticvoidmain(String[] args){        Student s = newStudent();        s.setId(1);        s.setName("s1");        s.setAge(1);                Configuration cfg = newConfiguration();        SessionFactory sf = cfg.configure().buildSessionFactory();                Session session = sf.openSession();        session.beginTransaction();        session.save(s);        session.getTransaction().commit();        session.close();        sf.close();         }} | 
2.5. 运行结果
运行StudentTest.java这个类,虽然提示输入成功。去数据库查询后,可发现数据已存储到student数据表中。虽然myeclipse会提示buildSessionFactory()这个函数被deprecated,但实际上程序还是可以运行成功的。
3. 使用annotation
因为使用annotation比较方便,使用annotation就可以不用写XXX.hbm.xml文件了。
3.1 新建类
敲@后应该出现提示的,如果没有出现,在Window->Preferences->Java->Editor->Content Assist,在Auto activation triggers forJava中增加@即可。Teacher.java类与Student类内容基本相同,标红部分为annotation。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | packagecom.sun.hibernate.model;importjavax.persistence.Entity;importjavax.persistence.Id;<span style="color: rgb(255, 0, 0);">@Entity</span>publicclassTeacher {        <span style="color: rgb(255, 0, 0);">@Id</span>    publicintgetId() {        returnid;    }    publicvoidsetId(intid) {        this.id = id;    }    publicString getName() {        returnname;    }    publicvoidsetName(String name) {        this.name = name;    }    publicintgetAge() {        returnage;    }    publicvoidsetAge(intage) {        this.age = age;    }    publicintgetTitle() {        returntitle;    }    publicvoidsetTitle(String title) {        this.title = title;    }        privateintid;    privateString name;    privateintage;    privateString title;    } | 
3.2 更新hibernate.cfg.xml
在原hibernate.cfg.xml文件的mapping以下标红内容。
| 1 2 3 | <mapping resource="com/sun/hibernate/model/Student.hbm.xml"/><span style="color: rgb(255, 0, 0);"><mapping class="com.sun.hiberante.model.Teacher"/></span> | 
4.3 新建TeacherTest.java类
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | importorg.hibernate.SessionFactory;importorg.hibernate.cfg.AnnotationConfiguration;importorg.hibernate.cfg.Configuration;publicclassTeacherTest {    publicstaticvoidmain(String[] args){        Teacher t = newTeacher();        t.setId(1);        t.setName("t1");        t.setAge(1);        t.setTitle("middel");                Configuration cfg = newAnnotationConfiguration();        SessionFactory sf = cfg.configure().buildSessionFactory();        Session session = sf.openSession();        session.beginTransaction();        session.save(t);        session.getTransaction().commit();        session.close();        sf.close();    }} | 
3.3 运行
在数据库中新建teacher数据表:
| 1 2 3 4 | # mysql -uroot -proot> use hibernate;> create table teacher(id intprimary key, name varchar(20), age int, title varchar(20));> quit; | 
运行TeacherTest.java这个类,虽然提示输入成功。去数据库查询后,可发现数据已存储到teacher数据表中。
原文:http://www.cnblogs.com/sunada2005/p/3536891.html