Hibernate框架簡介①

Milky-way發表於2018-08-09

這個Hibernate框架系列是使用配置檔案的方式來搭建的(非註解方式)

搭建環境:

引包: 連結:https://pan.baidu.com/s/1tqCg1HYwQaW86HDW6s2rLg 密碼:upj1

 

建立實體類User:

package com.rl.hiber.model;

import java.util.Date;

public class User {

    private int userId;
    
    private String uname;
    
    private int gender;
    
    private Date birthday;

    public int getUserId() {
        return userId;
    }

    public void setUserId(int userId) {
        this.userId = userId;
    }

    public String getUname() {
        return uname;
    }

    public void setUname(String uname) {
        this.uname = uname;
    }

    public int getGender() {
        return gender;
    }

    public void setGender(int gender) {
        this.gender = gender;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }
}

對映檔案User.hbm.xml:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
    <class name="com.rl.hiber.model.User" table="t_user">
        <id name="userId" column="user_id">
            <generator class="assigned"></generator>
        </id>
        <property name="pname" column="pname"></property>
        <property name="gender" column="gender"></property>
        <property name="birthday" column="birthday"></property>
    </class>
</hibernate-mapping>

 

配置檔案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>

        <!-- 資料庫連線設定 -->
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://localhost:3306/hiber01</property>
        <property name="connection.username">root</property>
        <property name="connection.password">root</property>

        <!-- 設定資料庫連線池初始化連線數 -->
        <property name="connection.pool_size">1</property>

        <!-- 資料庫方言 -->
        <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>

        <!-- 是否在後臺展示資料庫 -->
        <property name="show_sql">true</property>

        <!-- 配置實體類對映檔案的位置 -->
        <mapping resource="com/rl/hiber/model/User.hbm.xml"/>
    </session-factory>

</hibernate-configuration>

接下來需要建立資料庫hiber01, 這裡不贅述

 

提供一個工具類, 該工具類能夠自動生成建表指令碼, 幫助我們自動建表

DBExport:

package com.rl.hiber.utils;

import org.hibernate.cfg.Configuration;
import org.hibernate.tool.hbm2ddl.SchemaExport;

/**
 * 工具類: 自動建表
 * @author Administrator
 */
public class DBExport {

    public static void main(String[] args) {
        //建立hibernate的配置物件
        Configuration cfg = new Configuration();
        //指定hibernate配置檔案的位置
        cfg.configure("hibernate.cfg.xml");
        //建立表的物件
        SchemaExport se = new SchemaExport(cfg);
        se.create(true, true);
    }
}

檢視資料庫結果:

測試程式碼:

package com.rl.hiber.test;

import java.util.Date;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.junit.Test;

import com.rl.hiber.model.User;

public class TestHibernate {

    @Test
    public void test() {
        Configuration cfg = new Configuration();
        //配置hibernate核心檔案的位置
        cfg.configure("hibernate.cfg.xml");
        //註冊配置屬性資訊
        ServiceRegistry sr = new StandardServiceRegistryBuilder().applySettings(cfg.getProperties()).build();
        //建立SessionFactory物件, 該物件非常大, 一個專案啟動多久, 該SessionFactory就執行多久
        SessionFactory factory = cfg.buildSessionFactory(sr);
        //開啟session
        Session session = factory.openSession();
        //需要先開啟事務
        Transaction tx = session.beginTransaction();
        //建立物件
        User user = new User();
        user.setUserId(1);
        user.setUname("zhangsan");
        user.setGender(1);
        user.setBirthday(new Date());
        //儲存user物件到資料庫中
        session.save(user);
        //事務提交
        tx.commit();
        //關閉session節省資源
        session.close();
    }
}

資料庫結果:

 

下面簡單介紹一下hibernate的配置檔案(涉及到兩個配置檔案 分別是hibernate.cfg.xml和xxx.hbm.xml)

資料庫連線的配置:

必選配置(資料庫連線配置, 註冊對映檔案)

可選配置:

資料庫連線池, 資料庫方言(各種資料的方言自行百度), 是否輸出sql

高階配置:

由於自帶的連線池功能太弱, 因此將資料庫連線池修改成c3p0的連線池:

建表策略(提一下, 不重要了解即可, 預設使用none):

<property name="hbm2ddl.auto">none</property>

這句可不配置, 預設就none

總共有四個狀態:

none: 什麼都不做

create: 每次執行hibernate的操作是都先刪表再建表

create-drop: 每次執行hibernate操作時都先建表再填入資料, 且SessionFactory一旦關閉則將表全部刪除

validate: 每次執行hibernate操作時就驗證資料庫的表和mapping的關係是否正確

相關文章