1. 程式人生 > >從零打造在線網盤系統之Hibernate框架起步

從零打造在線網盤系統之Hibernate框架起步

https ram 刪除 odin 1.0 ssh框架 mat doc 並且

歡迎瀏覽Java工程師SSH教程從零打造在線網盤系統系列教程,本系列教程將會使用SSH(Struts2+Spring+Hibernate)打造一個在線網盤系統,本系列教程是從零開始,所以會詳細以及著重地闡述SSH三個框架的基礎知識,第四部分將會進入項目實戰,如果您已經對SSH框架有所掌握,那麽可以直接瀏覽第四章

本章的學習目標

  1. 明白什麽是Hibernate
  2. 掌握XML配置Hibernate
  3. 掌握註解配置Hibernate
  4. Hibernate的基本增刪改查的使用

Hibernate概述

Hibernate是一個對象關系映射框架,可以通過XML配置文件或者註解將數據庫與實體Bean進行映射

Hibernate常規配置步驟

  1. 配置Hibernate
  2. 建立實體Bean及其映射文件
  3. 建立會話(Session)工廠
  4. 通過會話(Sessioon)工廠操作會話

配置Hibernate

對於配置Hibernate我們有很多種方法,例如XML配置,屬性文件配置,編程方式配置,註解配置等.

XML配置 小節完整示例代碼下載

編寫名為Hibernate.cfg.xml的xml文件放入資源目錄,根據下面形式對Hibernate進行配置

<?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 元素用於配置Hibernate中的屬性
            鍵:值
          -->
        <!-- hibernate.connection.driver_class : 連接數據庫的驅動  -->
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>


        <!-- hibernate.connection.username : 連接數據庫的用戶名 -->
        <property name="hibernate.connection.username">root</property>


        <!-- hibernate.connection.password : 連接數據庫的密碼 -->
        <property name="hibernate.connection.password">jimisun</property>


        <!-- hibernate.connection.url : 連接數據庫的地址,路徑 -->
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test</property>


        <!-- show_sql: 操作數據庫時,會 向控制臺打印sql語句 -->
        <property name="show_sql">true</property>


        <!-- format_sql: 打印sql語句前,會將sql語句先格式化  -->
        <property name="format_sql">true</property>


        <!-- hbm2ddl.auto: 生成表結構的策略配置
             update(最常用的取值): 如果當前數據庫中不存在表結構,那麽自動創建表結構.
                     如果存在表結構,並且表結構與實體一致,那麽不做修改
                     如果存在表結構,並且表結構與實體不一致,那麽會修改表結構.會保留原有列.
             create(很少):無論是否存在表結構.每次啟動Hibernate都會重新創建表結構.(數據會丟失)
             create-drop(極少): 無論是否存在表結構.每次啟動Hibernate都會重新創建表結構.每次Hibernate運行結束時,刪除表結構.
             validate(很少):不會自動創建表結構.也不會自動維護表結構.Hibernate只校驗表結構. 如果表結構不一致將會拋出異常.
          -->
        <property name="hbm2ddl.auto">update</property>


        <!-- 數據庫方言配置
         org.hibernate.dialect.MySQLDialect (選擇最短的)
         -->
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>


        <!-- hibernate.connection.autocommit: 事務自動提交  -->
        <property name="hibernate.connection.autocommit">true</property>


        <!-- 將Session與線程綁定=> 只有配置了該配置,才能使用getCurrentSession -->
        <property name="hibernate.current_session_context_class">thread</property>


        <!-- 引入ORM 映射文件
            填寫src之後的路徑
         -->
        <mapping resource="com/jimisun/domain/User.hbm.xml"/>
    </session-factory>
</hibernate-configuration>

屬性文件配置 小節完整示例代碼下載

編寫hibernate.properties的properties配置文件放入資源目錄,配置形式如下

hibernate.dialect=org.hibernate.dialect.MySQLDialect
hibernate.connection.driver_class=com.mysql.jdbc.Driver
hibernate.connection.url=jdbc:mysql://localhost:3306/test?characterEncoding=utf8
hibernate.connection.username=root
hibernate.connection.password=root
hibernate.show_sql=true
hibernate.format_sql=true
hibernate.hbm2ddl.auto=update

編程配置

編程配置hibernate在實際開發中使用較少,了解即可

    Configuration configuration = new Configuration();
        configuration.addResource("mapping.xml")
                .setProperty("connection.username", "root")
                .setProperty("connection.password", "jimisun")
                .setProperty("dialect", "org.hibernate.dialect.MySWLDialect")
                .setProperty("connection.url", "jdbc:mysql://localhost:3306/test")
                .setProperty("connection.driver_class", "com.mysql.jdbc.Driver");

註解配置 小節完整示例代碼下載

註解配置嚴格上來說並不是一種配置方式,仍然需要使用XML或者properties將Hibernate進行配置,在Bean實體和表之間的映射關系我們就可以使用註解進行配置,就不需要編寫Bean對應的映射XML文件

首先使用XML或者properties配置hibernate
@Entity
@Table(name = "user")
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;
    private String username;
    private String password;

}

Session增刪改查示例 小節完整示例代碼下載

    /**
     * 保存&更新User
     */
    static void addUser() {
        Transaction transaction = session.beginTransaction();
        User user = new User();
        user.setUsername("jimisunl");
        user.setPassword("jimisun");
        session.saveOrUpdate(user);
        transaction.commit();
    }
    /**
     * 查找User
     *
     * @param theClass
     * @param id
     * @return
     */
    static User getUser(Class theClass, Serializable id) {
        return (User) session.find(theClass, id);
    }
    /**
     * 刪除User
     * @param object
     */
    static void deleteUser(Object object) {
        Transaction transaction = session.beginTransaction();
        session.delete(object);
        transaction.commit();
    }

本篇總結

掌握Hibernate的配置方式,能使用的HibernateSessionFactory的Session進行增刪改查操作

從零打造在線網盤系統之Hibernate框架起步