hibernate使用

z沈小丫丫發表於2019-07-22

hibernate使用(只講述了配置大綱)

1.配置檔案

hibernate.cfg.xml 類似(mybatis-config.xml)作用 根據系統自行放置

預設應放置在編譯目錄下

請注意一點

  <property name="hibernate.connection.url"><![CDATA[jdbc:mysql://localhost:3306/mysql?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false]]></property>
![CDATA[]] 可以將&&這種符號反義
<?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>
    
        <!-- 
        #hibernate.dialect org.hibernate.dialect.MySQLDialect
        #hibernate.dialect org.hibernate.dialect.MySQLInnoDBDialect
        #hibernate.dialect org.hibernate.dialect.MySQLMyISAMDialect
        #hibernate.connection.driver_class com.mysql.jdbc.Driver
        #hibernate.connection.url jdbc:mysql:///test
        #hibernate.connection.username gavin
        #hibernate.connection.password
         -->
         <!-- 資料庫驅動 -->
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
         <!-- 資料庫url -->
        <property name="hibernate.connection.url"><![CDATA[jdbc:mysql://localhost:3306/mysql?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false]]></property>
         <!-- 資料庫連線使用者名稱 -->
        <property name="hibernate.connection.username">root</property>
         <!-- 資料庫連線密碼 -->
        <property name="hibernate.connection.password">root</property>
        <!-- 資料庫方言
            不同的資料庫中,sql語法略有區別. 指定方言可以讓hibernate框架在生成sql語句時.針對資料庫的方言生成.
            sql99標準: DDL 定義語言  庫表的增刪改查
                      DCL 控制語言  事務 許可權
                      DML 操縱語言  增刪改查
            注意: MYSQL在選擇方言時,請選擇最短的方言.
         -->
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
        
        
        <!-- #hibernate.show_sql true 
             #hibernate.format_sql true
        -->
        <!-- 將hibernate生成的sql語句列印到控制檯 -->
        <property name="hibernate.show_sql">true</property>
        <!-- 將hibernate生成的sql語句格式化(語法縮排) -->
        <property name="hibernate.format_sql">true</property>
        <!-- 
        ## auto schema export  自動匯出表結構. 自動建表
        #hibernate.hbm2ddl.auto create        自動建表.每次框架執行都會建立新的表.以前表將會被覆蓋,表資料會丟失.(開發環境中測試使用)
        #hibernate.hbm2ddl.auto create-drop 自動建表.每次框架執行結束都會將所有表刪除.(開發環境中測試使用)
        #hibernate.hbm2ddl.auto update(推薦使用) 自動生成表.如果已經存在不會再生成.如果表有變動.自動更新表(不會刪除任何資料).
        #hibernate.hbm2ddl.auto validate    校驗.不自動生成表.每次啟動會校驗資料庫中表是否正確.校驗失敗.
         -->
        <property name="hibernate.hbm2ddl.auto">update</property>
        <!-- 引入orm後設資料
            路徑書寫: 填寫src下的路徑
         -->
        <mapping resource="hibernate/UserInfo.hbm.xml"/>
        
    </session-factory>
</hibernate-configuration>

使用Demo 參考jdbc連線步驟

Configuration conf = new Configuration().configure();

自行點進原始碼可以看到

public Configuration configure() throws HibernateException {
return this.configure("hibernate.cfg.xml");
}
這就是讀取配置檔案

可自行整理工具類
package com.hope.hibernate.common;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class HibernateUtils {
	private static SessionFactory sf;
	
	static{
		//1 建立,呼叫空參構造
		Configuration conf = new Configuration().configure();
		//2 根據配置資訊,建立 SessionFactory物件
		 sf = conf.buildSessionFactory();
	}
	
	//獲得session => 獲得全新session
	public static Session openSession(){
				//3 獲得session
				Session session = sf.openSession();
				
				return session;
		
	}
	//獲得session => 獲得與執行緒繫結的session
	public static Session getCurrentSession(){
		//3 獲得session
		Session session = sf.getCurrentSession();
		
		return session;
	}
	public static void main(String[] args) {
		System.out.println(HibernateUtils.openSession());
	}
	
}

  

package com.hope.hibernate.test;

        import com.hope.hibernate.domain.UserInfoBean;
        import org.hibernate.Session;
        import org.hibernate.SessionFactory;
        import org.hibernate.Transaction;
        import org.hibernate.cfg.Configuration;

/**
 * Demo
 *
 * @author zhougf
 * @date 2019/7/19
 */
public class Demo {
    public static void main(String[] args) {
        //建立配置
        Configuration conf = new Configuration().configure();
        //獲取工廠
        SessionFactory sessionFactory = conf.buildSessionFactory();
        //開啟session
        Session session = sessionFactory.openSession();
        //開啟事務
        Transaction tx = session.beginTransaction();
//        UserInfoBean userInfoBean = new UserInfoBean();
//        userInfoBean.setUserName("xxx");
//        userInfoBean.setUserPassword("x545");
//        userInfoBean.setUserPhone("123456451");
//        userInfoBean.setUserStatus("02");
//        session.save(userInfoBean);
//        UserInfoBean userInfoBean = session.get(UserInfoBean.class,1);
        tx.commit();
        session.close();
        sessionFactory.close();
    }
}

bean

package com.hope.hibernate.domain;

import java.io.Serializable;
import java.util.Date;

/**
 * UserInfoBean
 *
 * @author zhougf
 * @date 2019/05/29
 */
public class UserInfoBean implements Serializable {
    private static final long SERIALIZABLEID = 1L;
    private Integer userId;

    private String userName;

    private String userPassword;

    private String userPhone;

    private String userStatus;

    private String userType;

    private String spare1;

    private String spare2;

    private String spare3;

    private Date createTime;

    private Date updateTime;

    public UserInfoBean() {}

    public UserInfoBean(String userName, String userPassword) {
        this.userName = userName;
        this.userPassword = userPassword;
    }

    public Integer getUserId() {
        return userId;
    }

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

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getUserPassword() {
        return userPassword;
    }

    public void setUserPassword(String userPassword) {
        this.userPassword = userPassword;
    }

    public String getUserPhone() {
        return userPhone;
    }

    public void setUserPhone(String userPhone) {
        this.userPhone = userPhone;
    }

    public String getUserStatus() {
        return userStatus;
    }

    public void setUserStatus(String userStatus) {
        this.userStatus = userStatus;
    }

    public String getUserType() {
        return userType;
    }

    public void setUserType(String userSystem) {
        this.userType = userSystem;
    }

    public String getSpare1() {
        return spare1;
    }

    public void setSpare1(String spare1) {
        this.spare1 = spare1;
    }

    public String getSpare2() {
        return spare2;
    }

    public void setSpare2(String spare2) {
        this.spare2 = spare2;
    }

    public String getSpare3() {
        return spare3;
    }

    public void setSpare3(String spare3) {
        this.spare3 = spare3;
    }

    public Date getCreateTime() {
        return createTime;
    }

    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }

    public Date getUpdateTime() {
        return updateTime;
    }

    public void setUpdateTime(Date updateTime) {
        this.updateTime = updateTime;
    }
}

 對映檔案

 注意的是id

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!-- 配置表與實體物件的關係 -->
<!-- package屬性:填寫一個包名.在元素內部凡是需要書寫完整類名的屬性,可以直接寫簡答類名了. -->
<hibernate-mapping package="com.hope.hibernate.domain" >
    <!--
        class元素: 配置實體與表的對應關係的
            name: 完整類名
            table:資料庫表名
     -->
    <class name="UserInfoBean" table="wc_user_info">
        <!-- id元素:配置主鍵對映的屬性
                name: 填寫主鍵對應屬性名
                column(可選): 填寫表中的主鍵列名.預設值:列名會預設使用屬性名
                type(可選):填寫列(屬性)的型別.hibernate會自動檢測實體的屬性型別.
                        每個型別有三種填法: java型別|hibernate型別|資料庫型別
                not-null(可選):配置該屬性(列)是否不能為空. 預設值:false
                length(可選):配置資料庫中列的長度. 預設值:使用資料庫型別的最大長度
         -->
        <id name="userId" column="user_id">
            <!-- generator:主鍵生成策略(明天講) -->
            <generator class="native"></generator>
        </id>
        <!-- property元素:除id之外的普通屬性對映
                name: 填寫屬性名
                column(可選): 填寫列名
                type(可選):填寫列(屬性)的型別.hibernate會自動檢測實體的屬性型別.
                        每個型別有三種填法: java型別|hibernate型別|資料庫型別
                not-null(可選):配置該屬性(列)是否不能為空. 預設值:false
                length(可選):配置資料庫中列的長度. 預設值:使用資料庫型別的最大長度
         -->
        <property name="userName" column="user_name"></property>
        <property name="userPassword" column="user_password"></property>
        <property name="userPhone" column="user_phone"></property>
        <property name="userStatus" column="user_status"></property>
        <property name="userType" column="user_type"></property>
    </class>
</hibernate-mapping>

 本文章只提供了 使用樣例

相關文章