hibernate入門和基本操作
什麼是框架
寫程式,使用框架之後,幫我們實現一部分功能,使用框架好處,少寫一部分程式碼實現功能
什麼是hibernate框架(重點)
- hibernate框架應用在javaee三層結構中dao層框架
- 在dao層裡面做對資料庫crud(增刪改查)操作,使用hibernate實現crud操作,hibernate底層程式碼就是jdbc,hibernate對jdbc進行封裝,使用hibernate好處,不需要寫複雜jdbc程式碼了,
不需要寫sql語句實現 - hibernate開源的輕量級的框架
- hibernate版本
- Hibernate3.x
- Hibernate4.x
- Hibernate5.x(學習)
什麼是orm思想(重點)
- hibernate使用orm思想對資料庫進行crud操作
- 在web階段學習 javabean,更正確的叫法 實體類
- orm:object relational mapping,物件關係對映
- 文字描述:
- 讓實體類和資料庫表進行一一對應關係
讓實體類首先和資料庫表對應
讓實體類屬性 和 表裡面欄位對應 - 不需要直接操作資料庫表,而操作表對應實體類物件
- 讓實體類和資料庫表進行一一對應關係
- 畫圖描述:
- 文字描述:
Hibernate入門
搭建hibernate環境(重點)
1. 第一步 匯入hibernate的jar包
在專案目錄下(和src同一級)建立lib資料夾,將jar包複製到lib資料夾下,選中jar包→右鍵→build path,如下圖
2.第二步 建立實體類
public class User {
/*hibernate要求實體類有一個屬性唯一的*/
private Integer uid;
private String username;
private String password;
private String address;
public Integer getUid() {
return uid;
}
public void setUid(Integer uid) {
this.uid = uid;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
使用hibernate時候,不需要自己手動建立表,hibernate幫忙把表建立好
第三步 配置實體類和資料庫表一一對應關係(對映關係)
- 使用配置檔案實現對映關係
- 建立xml格式的配置檔案
- 對映配置檔名稱和位置沒有固定要求
- 建議:在實體類所在包裡面建立,實體類名稱.hbm.xml
- 配置是xml格式,在配置檔案中首先引入xml約束
- 學過約束dtd、schema,在hibernate裡面引入的約束dtd約束(hibernate-mapping-3.0.dtd)
- 建立xml格式的配置檔案
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
- 配置對映關係
<hibernate-mapping>
<!-- 1 配置類和表對應
class標籤
name屬性:實體類全路徑
table屬性:資料庫表名稱
-->
<class name="cn.itcast.entity.User" table="t_user">
<!-- 2 配置實體類id和表id對應
hibernate要求實體類有一個屬性唯一值
hibernate要求表有欄位作為唯一值
-->
<!-- id標籤
name屬性:實體類裡面id屬性名稱
column屬性:生成的表字段名稱
-->
<id name="uid" column="uid">
<!-- 設定資料庫表id增長策略
native:生成表id值就是主鍵自動增長
-->
<generator class="native"></generator>
</id>
<!-- 配置其他屬性和表字段對應
name屬性:實體類屬性名稱
column屬性:生成表字段名稱
-->
<property name="username" column="username"></property>
<property name="password" column="password"></property>
<property name="address" column="address"></property>
</class>
</hibernate-mapping>
第四步 建立hibernate的核心配置檔案
(1)核心配置檔案格式xml,但是核心配置檔名稱和位置固定的
- 位置:必須src下面
- 名稱:必須hibernate.cfg.xml
(2)引入dtd約束
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
(3)hibernate操作過程中,只會載入核心配置檔案,其他配置檔案不會載入
第一部分: 配置資料庫資訊 必須的
<!-- 第一部分: 配置資料庫資訊 必須的 -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql:///hibernate_day01</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">123456</property>
第二部分: 配置hibernate資訊 可選的
<!-- 第二部分: 配置hibernate資訊 可選的-->
<!-- 輸出底層sql語句 -->
<property name="hibernate.show_sql">true</property>
<!-- 輸出底層sql語句格式 -->
<property name="hibernate.format_sql">true</property>
<!-- hibernate幫建立表,需要配置之後
update: 如果已經有表,更新,如果沒有,建立
-->
<property name="hibernate.hbm2ddl.auto">update</property>
<!-- 配置資料庫方言
在mysql裡面實現分頁 關鍵字 limit,只能使用mysql裡面
在oracle資料庫,實現分頁rownum
讓hibernate框架識別不同資料庫的自己特有的語句
-->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
第三部分: 把對映檔案放到核心配置檔案中
<!-- 第三部分: 把對映檔案放到核心配置檔案中 必須的-->
<mapping resource="com/lightning/entity/User.hbm.xml"/>
實現新增操作
第一步 載入hibernate核心配置檔案
第二步 建立SessionFactory物件
第三步 使用SessionFactory建立session物件
第四步 開啟事務
第五步 寫具體邏輯 crud操作
第六步 提交事務
第七步 關閉資源
@Test
public void testAdd() {
// 第一步 載入hibernate核心配置檔案
// 到src下面找到名稱是hibernate.cfg.xml
//在hibernate裡面封裝物件
Configuration cfg = new Configuration();
cfg.configure();
// 第二步 建立SessionFactory物件
//讀取hibernate核心配置檔案內容,建立sessionFactory
//在過程中,根據對映關係,在配置資料庫裡面把表建立
SessionFactory sessionFactory = cfg.buildSessionFactory();
// 第三步 使用SessionFactory建立session物件
// 類似於連線
Session session = sessionFactory.openSession();
// 第四步 開啟事務
Transaction tx = session.beginTransaction();
// 第五步 寫具體邏輯 crud操作
//新增功能
User user = new User();
user.setUsername("張三");
user.setPassword("123");
user.setAddress("中國");
//呼叫session的方法實現新增
session.save(user);
// 第六步 提交事務
tx.commit();
// 第七步 關閉資源
session.close();
sessionFactory.close();
}
看到效果:
(1)是否生成表
(2)看錶是否有記錄
Hibernate配置檔案詳解
Hibernate對映配置檔案(重點)
1 對映配置檔名稱和位置沒有固定要求
2 對映配置檔案中,標籤name屬性值寫實體類相關內容
(1)class標籤name屬性值實體類全路徑
(2)id標籤和property標籤name屬性值 實體類屬性名稱3 id標籤和property標籤,column屬性可以省略的
(1)不寫值和name屬性值一樣的4 property標籤type屬性,設定生成表字段的型別,自動對應型別
Hibernate核心配置檔案
1 配置寫位置要求
2 配置三部分要求
(1)資料庫部分必須的
(2)hibernate部分可選的
(3)對映檔案必須的
3 核心配置檔名稱和位置固定的
(1)位置:src下面
(2)名稱:hibernate.cfg.xml
Hibernate核心api
1 程式碼
Configuration cfg = new Configuration();
cfg.configure();
(1)到src下面找到名稱hibernate.cfg.xml配置檔案,建立物件,把配置檔案放到物件裡面(載入核心配置檔案)
SessionFactory(重點)
1 使用configuration物件建立sessionFactory物件
(1)建立sessionfactory過程中做事情:
- 根據核心配置檔案中,有資料庫配置,有對映檔案部分,到資料庫裡面根據對映關係把表建立
<property name="hibernate.hbm2ddl.auto">update</property>
2 建立sessionFactory過程中,這個過程特別耗資源的
(1)在hibernate操作中,建議一個專案一般建立一個sessionFactory物件
3 具體實現
(1)寫工具類,寫靜態程式碼塊實現
* 靜態程式碼塊在類載入時候執行,執行一次
static Configuration cfg = null;
static SessionFactory sessionFactory = null;
//靜態程式碼塊實現
static {
//載入核心配置檔案
cfg = new Configuration();
cfg.configure();
sessionFactory = cfg.buildSessionFactory();
}
//提供方法返回sessionFactory
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
Session(重點)
1 session類似於jdbc中connection
2 呼叫session裡面不同的方法實現crud操作
(1)新增 save方法
(2)修改 update方法
(3)刪除 delete方法
(4)根據id查詢 get方法
3 session物件單執行緒物件
(1)session物件不能共用,只能自己使用
Transaction
1 事務物件
Transaction tx = session.beginTransaction();
2 事務提交和回滾方法
tx.commit();
tx.rollback();
解決配置檔案沒有提示問題
Windows→ Preferences→搜尋框輸入xml c→XML catalog→Add→Catalog Entry 如下圖所示