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

歡迎瀏覽Java工程師SSH教程從零打造在線網盤系統系列教程,本系列教程將會使用SSH(Struts2+Spring+Hibernate)打造一個在線網盤系統,本系列教程是從零開始,因此會詳細以及着重地闡述SSH三個框架的基礎知識,第四部分將會進入項目實戰,若是您已經對SSH框架有所掌握,那麼能夠直接瀏覽第四章,源碼均提供在GitHub/ssh-network-hard-disk上供你們參閱html

本章的學習目標

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

Hibernate概述

Hibernate是一個對象關係映射框架,能夠經過XML配置文件或者註解將數據庫與實體Bean進行映射mysql

Hibernate常規配置步驟

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

配置Hibernate

對於配置Hibernate咱們有不少種方法,例如XML配置,屬性文件配置,編程方式配置,註解配置等.git


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

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

<?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

編程配置session

編程配置hibernate在實際開發中使用較少,瞭解便可app

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進行增刪改查操做

相關文章
相關標籤/搜索