溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

hibernate環(huán)境搭建測試的示例分析

發(fā)布時間:2021-11-11 11:32:44 來源:億速云 閱讀:145 作者:小新 欄目:關(guān)系型數(shù)據(jù)庫

這篇文章主要介紹了hibernate環(huán)境搭建測試的示例分析,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

真正要掌握,還得需要自己動手,才能豐衣足食。

  1. 所需jar包

    jar包版本不同,找的地址也不同。這里用到的是 hibernate-release-5.2.10 版本的jar包


    hibernate環(huán)境搭建測試的示例分析

除了這些jar包,還需要數(shù)據(jù)庫驅(qū)動jar,根據(jù)自己用的數(shù)據(jù)庫自定,這里用到的是oracle

hibernate環(huán)境搭建測試的示例分析  

2.jar包導(dǎo)入好,看看配置,在配置之前,看下實體和表結(jié)構(gòu)。

實體 Users

package com.hib.entity;

public class Users {
	private Integer id;
	private String name;
	private String pass;
	private String address;
	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 getPass() {
		return pass;
	}
	public void setPass(String pass) {
		this.pass = pass;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	public Users(Integer id, String name, String pass, String address) {
		super();
		this.id = id;
		this.name = name;
		this.pass = pass;
		this.address = address;
	}
	public Users() {
		super();
	}
	@Override
	public String toString() {
		return "Users [id=" + id + ", name=" + name + ", pass=" + pass + ", address=" + address + "]";
	}
	
}

表結(jié)構(gòu)

hibernate環(huán)境搭建測試的示例分析

在src下 hibernate.cfg.xml配置,如果不知道里面的配置怎么寫??梢酝ㄟ^在下載的jar包中搜索hibernate.cfg.xml,里面有配置信息。

hibernate.cfg.xml 配置如下

<!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="hibernate.connection.driver_class">oracle.jdbc.OracleDriver</property>
        <property name="hibernate.connection.username">ssh</property>
        <property name="hibernate.connection.password">ssh</property>
        <property name="hibernate.connection.url">jdbc:oracle:thin:@127.0.0.1:1521:xe</property>
        
        <!-- 方言 -->
        <property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>
        <!-- 可視化sql -->
        <property name="hibernate.show_sql">true</property>
        <!-- 格式化sql,自動對可視化sql換行,對齊 -->
        <property name="hibernate.format_sql">true</property>
        
        <!-- 映射文件配置 -->
        <mapping resource="User.hbm.xml"/>
    </session-factory>
</hibernate-configuration>

3. User.hbm.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping>
	
	<!-- name:是實體   table是表名稱 -->
	<class name="com.hib.entity.Users" table="TEST_USER">
		<id name="id">
			<!-- 主鍵自增策略,在下面會專門提到 -->
			<generator class="increment"></generator>
		</id>

		<!-- name:是實體中屬性的名稱,column:是表中字段的名稱,type是數(shù)據(jù)類型 
			在這里發(fā)現(xiàn)后面的 pass和 address 沒有寫column和type
			如果表字段和實體屬性名稱一致,可以省略不寫
		-->
		<property name="name" column="name" type="java.lang.String"/>
		<property name="pass"/>
		<property name="address"/>
	</class>

</hibernate-mapping>

4.測試數(shù)據(jù)連接是否配置成功

package com.hib.test;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.Test;

import com.hib.entity.Users;

public class TestConn {
	
	// 獲取session
	public static Session getSession(){
		// 加載配置
		Configuration cfg = new Configuration().configure();
		// 獲取sessionFactory
		SessionFactory factory = cfg.buildSessionFactory();
		// 獲取session
		Session session = factory.openSession();
		return session;
	}
	
	// 查詢
	@Test
	public void query(){
		Session session = getSession();
		// 查詢
		Users users = session.get(Users.class, 1);
		System.out.println(users);
		//關(guān)閉資源
		session.close();
	}
	// 在進行增刪改時 ,好控制事務(wù)    ---- 插入
	@Test
	public void insert(){
		Session session = getSession();
		// 開啟事務(wù)
		Transaction tx = session.beginTransaction();
		Users users = new Users(null, "xyz", "xyz", "china");
		// 插入
		session.save(users);
		// 事務(wù)提交
		tx.commit();
		// 事務(wù)回滾
		//tx.rollback();
		session.close();
	}
	// 更新數(shù)據(jù)前   需要先查詢出修改的數(shù)據(jù)
	@Test
	public void update(){
		Session session = getSession();
		Transaction tx = session.beginTransaction();
		Users users = session.get(Users.class, 1);
		users.setAddress("鄭州");
		users.setName("小李飛刀");
		session.update(users);
		tx.commit();
		session.close();
	}
	// 刪除  需要先出現(xiàn)出刪除的數(shù)據(jù)
	@Test
	public void delete(){
		Session session = getSession();
		Transaction tx = session.beginTransaction();
		Users users = session.get(Users.class, 1);
		session.delete(users);
		tx.commit();
		session.close();
	}
	
}

這里講解下關(guān)于hibernate中主鍵的生成策略

  1. increment 一般用于測試,多并發(fā)環(huán)境中存在主鍵取值沖突,這里文章包括下面寫的都是用的

  這個,方便測試。實際項目中,沒有人會用到。

2. sequence  oralcle數(shù)據(jù)庫專用

在oracle數(shù)據(jù)庫中創(chuàng)建序列 : create sequence st_id start with 7 increment by 1;

 意思是:創(chuàng)建序列名為 st_id 從7開始,每次增加1

 hibernate中默認值是 hibernate_sequence

    <id name="id">

<generator class="sequence">

<param name="sequence_name">st_id</param>

</generator>

</id>

3. identity :適用于mysql sqlserver 相當于2

    <id name="id">

    <generator class="identity"></generator>

</id>

4. uuid 生成32位長度全球唯一的字符串,適用于分布式系統(tǒng)中

5. foreign : 專用于1:1 共享主鍵的從表方 

6. assigned: 手動指定ID,一般不用

這里值得一提:在使用sequence時,配置文件中寫

<id name="id" column="id">

  <generator class="sequence">

   這里 name為 sequence_name,但我當時配置時候?qū)懙氖莝equence,出了錯。搜了好久,也沒有發(fā)現(xiàn)錯誤,并且別人寫的也是sequence。這里我也沒有去看其他版本,這里我使用是5.2版,可能是版本之間的問題。希望注意下。如果你不知道配置是sequence 還是sequence_name,可以搜當前版本的文件 sequence,會有一些文件和文件夾,找里面的配置,看里面寫的是什么。

   <param name="sequence_name">sqs_id</param>

  </generator>

</id>

感謝你能夠認真閱讀完這篇文章,希望小編分享的“hibernate環(huán)境搭建測試的示例分析”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI