【SSH】SSH之Hibernate框架:初識Hibernate

什麼是Hibernate:

Hibernate是一個開放源代碼的對象關係映射框架,它對JDBC進行了非常輕量級的對象封裝,它將POJO與數據庫表建立映射關係,是一個全自動的ORM框架,Hibernate可以自動生成SQL語句,自動執行,使得Java程序員可以隨心所欲的使用對象編程思維來操縱數據庫。
ORM:Object Relational Mapping(對象關係映射)。指的是將一個Java中的對象與關係型數據庫中的表建立一種映射關係,從而操作對象就可以操作數據庫中的表。

爲什麼用Hibernate:

1、Hibernate對JDBC進行了非常輕量級的對象封裝,大大簡化了數據訪問層繁瑣的重複性代碼,減少了內存消耗,加快了運行效率;
2、Hibernate的性能非常好,映射的靈活性很出色。它支持很多關係型數據庫,支持從一對一到多對多的各種複雜關係;
3、源代碼開源以及API的開放使其可擴展性好。

怎麼用Hibernate:

Hibernate的下載地址及目錄結構

下載地址:https://sourceforge.net/projects/hibernate/files/hibernate-orm/
目錄結構:
在這裏插入圖片描述
documentation:Hibernate開發的幫助文檔
lib:Hibernate開發的所需jar包
project:Hibernate開發的項目示例

Hibernate的簡單入門:

1、創建Java或web項目,導入所需jar包:
數據庫驅動包:
在這裏插入圖片描述
Hibernate開發的必需jar包:
在這裏插入圖片描述
日誌記錄包:
在這裏插入圖片描述
2、在數據庫新建一個表:cst_customer
在這裏插入圖片描述
3、在“cn.jingpengchong.pojo”包下新建一個實體類:Customer

package cn.jingpengchong.pojo;

public class Customer {
	
	private long id;
	private String name;
	private String source;
	private String industry;
	private String level;
	private String phone;
	private String mobile;
	//爲節省篇幅,此處沒有粘貼get/set方法
	@Override
	public String toString() {
		return "Customer [id=" + id + ", name=" + name + ", source=" + source + ", industry=" + industry + ", level="
				+ level + ", phone=" + phone + ", mobile=" + mobile + "]";
	}
}

4、在“cn.jingpengchong.pojo”包下創建實體類Customer的映射文件:Customer.hbm.xml
映射文件的dtd可以在hibernate-core-5.4.10.Final.jar包的“/org/hibernate/hibernate-mapping-3.0.dtd”文件中找到。
映射文件的內容主要有:
①用class標籤建立類與表的映射;
②用id標籤建立類中的id與表中的主鍵的映射,定義主鍵生成策略
③用property標籤建立類中的普通屬性與表中的字段的映射。

<?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">
<hibernate-mapping>
	<!-- 建立類與表的映射 -->
	<class name="cn.jingpengchong.pojo.Customer" table="cst_customer">
		<!-- 建立類中的id與表中的主鍵的映射 -->
		<id name="id" column="cust_id" length="32" type="long">
			<generator class="native"/>
		</id>
		<!-- 建立類中的普通屬性與表中的字段的映射 -->
		<property name="name" column="cust_name" length="32" type="string"/>
		<property name="source" column="cust_source" length="32" type="string"/>
		<property name="industry" column="cust_industry" length="32" type="string"/>
		<property name="level" column="cust_level" length="32" type="string"/>
		<property name="phone" column="cust_phone" length="64" type="string"/>
		<property name="mobile" column="cust_mobile" length="16" type="string"/>
		
	</class>
</hibernate-mapping>

5、在src目錄下創建Hibernate核心配置文件:hibernate.cfg.xml
配置文件的dtd可以在hibernate-core-5.4.10.Final.jar包的“/org/hibernate/hibernate-configuration-3.0.dtd”文件中找到。
配置文件的的內容主要有:property標籤的name屬性值及標籤內容的書寫格式可以參考“hibernate-release-5.4.10.Final\project\etc”目錄下的“hibernate.properties”文件。
①用property標籤聲明必需的配置:驅動、url、用戶名、密碼、數據庫行話等,數據庫行話用於生成符合對應數據庫標準的SQL語句;
②用property標籤聲明其他的配置:是否打印SQL語句、是否格式化SQL語句、是否自動建表等;
③用mapping標籤指明映射文件。

<?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="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
		<property name="hibernate.connection.url">jdbc:mysql://127.0.0.1:3306/hibernate</property>
		<property name="hibernate.connection.username">root</property>
		<property name="hibernate.connection.password">1234</property>
		<property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
		
		<!-- 可選的配置 -->
		<property name="hibernate.show_sql">true</property>
		<property name="hibernate.format_sql">true</property>
		
		<!-- 映射的文件 -->
		<mapping resource="cn/jingpengchong/pojo/Customer.hbm.xml"/>
	</session-factory>
</hibernate-configuration>

6、新建一個包“cn.jingpengchong.test”,創建測試類:Test
主要步驟有:
①加載配置文件;
②根據Configuration對象創建一個SessionFactory對象;
③根據SessionFactory對象獲得一個Session對象;
④根據Session對象開啓事務獲得一個Transaction對象;
⑤執行增刪改查等操作;
⑥根據Transaction對象提交事務;
⑦釋放資源。

package cn.jingpengchong.test;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import cn.jingpengchong.pojo.Customer;

public class Test {
	public static void main(String[] args) {
		//1、加載配置文件
		Configuration configure = new Configuration().configure();
		//2、根據Configuration創建一個SessionFactory
		SessionFactory factory = configure.buildSessionFactory();
		//3、根據SessionFactory獲得一個Session對象
		Session session = factory.openSession();	
		//4、手動開啓事務
		Transaction transaction = session.beginTransaction();		
		//5、執行增刪改查等操作
		Customer customer = new Customer();
		customer.setName("孫悟空");
		session.save(customer);		
		//6、提交事務
		transaction.commit();		
		//7、釋放資源
		session.close();
		factory.close();
	}
}

運行結果如下:
在這裏插入圖片描述
再看數據庫中已經有數據了:
在這裏插入圖片描述

Hibernate的映射文件與配置文件:

映射文件:

class標籤的配置:用於建立類與表的映射關係
屬性:

  • name:實體類的全路徑
  • table:表名
  • catalog:數據庫名,可以不寫,在配置文件中已經指定

id標籤的配置:用來建立類中某個屬性與表中主鍵的映射關係
屬性:

  • name:類的屬性名
  • column:表中的字段名
  • length:數據長度,hibernate自動建表時使用
  • type:數據類型,hibernate自動建表時使用

property標籤的配置:用於建立類中的屬性和表中字段的映射關係
屬性:

  • name:類的屬性名
  • column:表中的字段名
  • length:數據長度,hibernate自動建表時使用
  • type:數據類型,hibernate自動建表時使用
  • not-null:設置非空,hibernate自動建表時使用
  • unique:設置唯一,hibernate自動建表時使用
配置文件:

property標籤用於數據庫參數的配置:使用hibernate框架必須的參數配置有驅動類、url、用戶名、密碼、所用數據庫的行話等,其他的重要參數配置有:
hibernate.show_sql:是否在控制檯打印SQL語句
hibernate.format_sql:是否在打印SQL語句時將其格式化
hibernate.hbm2ddl.auto:自動建表或刪表

  • none:當要操作的表不存在時,hibernate不會自動建表而是報錯;
  • create:當要操作的表不存在時,hibernate會自動建表,當要操作的表存在時,hibernate會將該表刪了,然後重新創建一個表;
  • create-drop:當要操作的表不存在時,hibernate會自動建表,使用完畢後將該表刪了,當要操作的表存在時,hibernate會將該表刪了,然後重新創建一個表,使用完畢後將該表刪了;
  • update:當要操作的表不存在時,hibernate會自動建表,當要操作的表存在時,會使用已經存在的表;
  • validate:當要操作的表不存在時,hibernate不會自動建表而是報錯,當要操作的表存在時,會使用已經存在的表;

mapping標籤用於指明映射文件。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章