Hinernate入门例子

1. 建立项目文件系统结构­

HelloWorld

   -src­

   +lib­

   +bin(或者build)­

    所需要的包

    -lib

      antlr-2.7.6.jar
     dom4j-1.6.1.jar
     hibernate3.jar
     javassist-3.9.0.GA.jar
     mysql-connector-java-5.0.8-bin.jar (使用Mysql数据库)
     slf4j-api-1.5.8.jar
     slf4j-simple-1.5.8.jar(或slf4j-jdk14-1.5.8.jar或slf4j-log4j12-1.5.8.jar(兼容之前使用log4j的hibernate版本))

     (Hibernate 3.3.2 GA 不再使用log4j, 使用slf4j-Simple Logging Facade for Java )

2. 选择开发方式:­

(1) 从上至下,先根据业务模型设计Java类,然后通过hbm2ddl等工具生成数据库schema, 适合大多数项目开发。­

(2)  从下至上,先设计数据库的schema, 再通过hbm2java等工具生成Java持久类。­

(3)  从中间至上下,由xml文件开始,至上生成Java类, 至下生成schema,适合专家­

(4)  混合模式, 有Java类,又有数据库schema, 比较困难­

选择第一种方式。­

3. 编写Java持久类­

要求:­

(1) 要有有标示符(identifier), 标示符可以为null即不是primitive type­

(2) 要有没有参数的构造方法­

(3) 类不是final的和没有public final的方法,否则会影响hibernate的lazy加载。­

(4) 为fields编写setter和getter方法。­

(5) 如果对象放在Set中或离线后重新在线,重载overriding equals和hashCode方法。­

                     下面是一个POJO,将使用hibernate保存到数据库中。

package hello;­

import java.util.Date;

public class Event{

    private Long id; //identifier­

    private String text;­

    private Date date;­

    private Event nextEvent;   ­

    public Event() {}­

    ­

   //set方法为私有, id由hibernate管理­

    private void setId(){­

        this.id=id;­

    }­

­

    public Long getId(){­

        return this.id;­

    }­

保存在src/hello/

    ­

    //.....以下fields的setter和getter方法略­


  4. ORM映射文件

  相应的dtd可以hibernate的src中找到,建议放在项目的src文件夹中
   <?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="hello">
 <class name="Event" table="EVENTS">
  <id name="id" column="EVENT_ID">
   <generator class="native" />
  </id>
  
  <property name="text" />
  <property name="date" type="timestamp" column="EVENT_DATE" />

  <!-- 多对一关系-->
  <many-to-one name="nextEvent" column="NEXT_EVENT_ID" />
   </class>

</hibernate-mapping>


保存为 src/hello/Event.hbm.xml (也可以保存在src下面)

6. 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">
<hibernate-configuration>
    <session-factory>
     <!-- Database connection settings -->
     <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
     <property name="connection.url">jdbc:mysql://localhost/test</property>
     <property name="connection.username">root</property>
     <property name="connection.password">197726</property>
     
     <!-- JDBC Connection Pool(use built-in) -->
     <property name="connection.pool_size">1</property>
     
     <!-- SQL Dialect  -->
     <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
     
     <!-- Enable Hibernate's automatic session Management -->
     <property name="current_session_context_class">thread</property>
     
     <!-- Disable the second-level cache -->
     <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
     
     <!-- Echo all executed SQL to stdout -->
     <property name="show_sql">true</property>
     
     <!-- Drop and recreate the database schema on startup -->
     <property name="hbm2ddl.auto">update</property>


      <!-- 此处映射文件的路径相对于classpath的根(src目录) -->

      <!--如果此处不加入mapping资源,则需要在代码里手工加载-->

      <!-- hbm.xml文件位于包路径下 -->
     <mapping resource="hello/Event.hbm.xml" /> 
     <!-- hbm.xml文件位于classpath根路径下即src目录 -->
     <!-- <mapping resource="Event.hbm.xml" />  -->
     </session-factory>
</hibernate-configuration>

将此文件保存为hibernate.cfg.xml在src中。若存为其他名称则需要在Configuration.config()方法中将名称作为参数提供。

7. 实用类HibernateUtil

   该类用于方便的获得SessionFactory。SessionFactory为应用程序的全局变量,用于获得Session对象。通常一个SessionFactory对应一个数据库。在hibernate启动时构造一个SessionFactory对象并在整个应用程序共享。SessionFactory对象是线程安全的,并且应该只被初始化一次(即hibernate启动时)。

Session对象是单线程的,代表一批次工作(a unit of work)。

package hello;

import org.hibernate.*;

public class HibernateUtil{

   private static SessionFactory sessionFactory;

   static{

      try{

         sessionFactory=new Configuration().configure();

        //如果配置文件不是默认名称hibernate.cfg.xml

         //sessionFactory=new Configuration().configure("anothername.cfg.xml");

              //如果配置文件中没有加入mapping resource

              //指定资源在classpath下(即src目录),此时Event.hbm.xml应在src目录下,而不在包路径下,否则会找不到

               //sessionFactory=new Configuration().configure().addResource("Event.hbm.xml");

               //指定在包路径下寻找Event.hbm.xml

               //sessionFactory=new Configuration().configure().addClass("Event.class");

  }

       catch(Trowable ex){

            System.err.println("Initial SessionFactory creation failed. "+ex);

            throw new ExceptionInInitializerError(ex);

       }

   }

  public static  SessionFactory getSessionFactory(){

     return sessionFactory;

  }  

}


8. 运行并测试

你可能感兴趣的:(mysql,Hibernate,log4j,xml,jdbc)