什麼是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標籤用於指明映射文件。