一、创建Hibernate 配置文件 hibernate.cfg.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <!-- 1、数据库基本信息 -->
        <property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
        <property name="hibernate.connection.password">gcki_test</property>
        <property name="hibernate.connection.url">jdbc:oracle:thin:@192.168.4.9:1521:orcl</property>
        <property name="hibernate.connection.username">gcki_test</property>


        <!-- 2、数据库方言 -->
        <property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>
        <!-- 3、 执行sql时是否在控制台打印-->
        <property name="show_sql">true</property>
        <!-- 4、是否对 SQL 进行格式化 -->
        <property name="format_sql">true</property>

        <!-- 5、指定自动生成数据表的策略 
               create:每次运行删除上次的表,新建一张表
               create-drop:SessionFactory一关闭, 表就自动删除 
               update: 根据.hbm.xml文件生成表, 但若 .hbm.xml文件和数据库中对应的数据表的表结构不同, 
                       Hiberante将更新数据表结构,但不会删除已有的行和列
               validate : 会和数据库中的表进行比较, 若 .hbm.xml 文件中的列在数据表中不存在,则抛出异常
               -->
        <property name="hbm2ddl.auto">update</property>

        <!-- 6、设置数据库事务隔离级别: -->
        <property name="connection.isolation">2</property>


        <!-- 7、指定关联的      对象关系映射文件: .hbm.xml 文件 -->
        <mapping resource="com/yang/model/User.hbm.xml"/>


    </session-factory>
</hibernate-configuration>


二、创建持久化类:将数据库表映射成的一个对象

package com.yang.model;

public class User {

    private Integer id;
    private String name;
    private String telPhone;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getTelPhone() {
        return telPhone;
    }
    public void setTelPhone(String telPhone) {
        this.telPhone = telPhone;
    }
    @Override
    public String toString() {
        return "User [id=" + id + ", name=" + name + ", telPhone=" + telPhone + "]";
    }
}

三、创建对象-关系映射文件:声明数据库表和持久化类之间的关系

<?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>
    <class name="com.yang.model.User" table="RE_HIBERNATE_USER">
        <id name="id" type="java.lang.Integer">
            <column name="ID" />
            <!--主键生成策略-->
            <generator class="native" />
        </id>


        <property name="name" type="java.lang.String">
            <column name="NAME" />
        </property>
        <property name="telPhone" type="java.lang.String">
            <column name="TELPHONE" />
        </property>
    </class>
</hibernate-mapping>

四、通过 Hibernate API 编写访问数据库的代码

package Test;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import com.yang.model.User;

public class StanderTest {

    private SessionFactory  sessionFactory;
    private Configuration configuration;
    private Session session;
    private Transaction transaction;

    @Before
    public void init(){
        //自动加载classPath路径下,名为“hibernate.cfg.xml”文件,封装连接数据库的基本信息
        configuration=new Configuration().configure();
        //将连接数据库的信息向ServiceRegistry对象注册
        ServiceRegistry serviceRegistry=new ServiceRegistryBuilder()
                                            .applySettings(configuration.getProperties())
                                            .buildServiceRegistry();
        //sessionFactory的创建相当耗费资源,在生产中将这个变量设置为静态
        sessionFactory = configuration.buildSessionFactory(serviceRegistry);    
        //创建session对象
        session = sessionFactory.openSession();
        //开启事务:不开启事务将没办法执行操作
        transaction = session.beginTransaction();
    }

    @After
    public void destory(){
        /*
         * 1、transaction在调用commit时会先调用session的flush方法,将session对象的状态(就是这个对象的各种属性值)
         *    与数据库对应的记录保持一致
         * 2、本质上就是执行了一条sql语句(session.flush)
         * 3、最后提交事务,才是数据库记录的最终改变
         * */
        transaction.commit();
        session.close();
        sessionFactory.close();
    }


    @Test
    public void testSave(){     
        User user=new User();
        user.setName("miemie");
        user.setTelPhone("258369");
        session.save(user);     

    }

}