Hibernate_day02---實體類操作、物件狀態、一級快取、事務操作、API
阿新 • • 發佈:2018-11-03
一、實體類編寫規則
1)實體類裡面屬性私有的
2)私有屬性使用公開的set和get方法操作
3)要求實體類有屬性作為唯一值(一般使用id值)
4)實體類屬性建議不使用基本資料型別,使用基本資料型別對應的包裝類
應用環境:可以解決區分出 值為零(score=0)和值不存在(score=null)兩種情況
八個基本資料型別對應的包裝類
int – Integer
char—Character、
其餘六種都是首字母大寫 比如 double – Double
二、Hibernate主鍵生成策略
1) 實體類中有一個屬性作為唯一值,對應表中主鍵. 2) 在class中的不同策略(屬性值): 1)native: 根據使用的資料庫幫選擇哪個值 2)uuid:生成uuid值 插圖:
演示生成策略值 uuid
1)使用uuid生成策略,實體類id屬性型別 必須 字串型別
(2)配置部分寫出uuid值
三、實體類操作
對實體類crud操作
@Test public void crudTest() { //1 呼叫工具類得到sessionFactory SessionFactory sessionFactory = HibernateUtils.getSessionFactory(); //2 獲取session Session session = sessionFactory.openSession(); //3 開啟事務 Transaction tx = session.beginTransaction(); /* * 根據id查詢 * * session.get(類名.class, id值); * 引數一:實體類的class * 引數二:id值 */ User user = session.get(User.class, 1); /* * 修改: * 1)先查詢, * 2)再設定修改值, * 3)update方法完成更新 */ User user = session.get(User.class, 2); //查詢 user.setUsername("嶽不群"); //設定 session.update(user); //更新修改 /* * 刪除: * 1)先查詢, * 2)delete方法刪除查詢結果 */ User user = session.get(User.class, 2); //根據id查詢物件 session.delete(user); //刪除查詢結果 /* * 新增: * 1)建立物件、 * 2)對物件進行屬性設定、 * 3)save方法完成新增 */ User user = new User(); user.setUsername("小王"); user.setPassword("250"); user.setAddress("日本"); session.save(user); //實現新增 //5 提交事務 tx.commit(); //6 關閉 session.close(); sessionFactory.close(); } }
實體類物件狀態(三種)
1)瞬時態:物件裡面沒有id值,物件與session沒有關聯
2)持久態:物件裡面有id值,物件與session關聯
3)託管態:物件有id值,物件與session沒有關聯
saveOrUpdate方法:
1)可以實現新增、修改兩個功能。
2)虛擬機器將根據實體類不同狀態,執行不同功能
總結:無id時,做新增。有id時,做修改
四、Hibernate中的快取
快取:把資料存到記憶體裡面 作用:可以直接從記憶體中讀取資料,提供讀取效率 背景:資料存到資料庫裡面,資料庫本身是檔案系統,使用流方式操作檔案效率不是很高。
Hibernate快取:是hibernate框架中提供的多種優化之一。
Hibernate快取分為兩級
一級快取:
1)預設開啟
2)使用範圍:session範圍。從session建立到session關閉的範圍
3)儲存資料狀態要求:必須是持久態資料
二級快取:
1)目前已經不使用了,被redis技術替代
2)預設關閉,開啟則需要配置
3)二級快取使用範圍,是sessionFactory範圍
驗證一級快取的存在
做法:多次查詢相同記錄,
現象:只有第一次會輸出sql語句查詢資料庫。則證明一級快取存在。
Hibernate一級快取特性
根據持久態操作,自動更新資料庫。
Hibernate一級快取執行過程
五、Hibernate事務操作
事務相關概念
1) 什麼是事務
一組不可分割的操作。統一成功或統一失敗
2) 事務特性
原子性、一致性、隔離性、永續性
3) 不考慮隔離性產生的問題
1)髒讀
2)不可重複讀
3)虛讀
4) 設定事務隔離級別(解決三種錯誤讀方式)
(1)mysql預設隔離級別 repeatable read
Hibernate事務程式碼規範寫法:
程式碼結構:
try {
開啟事務
提交事務
}catch() {
回滾事務
}finally {
關閉
}
@Test
public void testTx() {
SessionFactory sessionFactory = null;
Session session = null;
Transaction tx = null;
try {
sessionFactory = HibernateUtils.getSessionFactory();
session = sessionFactory.openSession();
//開啟事務
tx = session.beginTransaction();
//新增
User user = new User();
user.setUsername("小馬");
user.setPassword("250");
user.setAddress("美國");
session.save(user);
int i = 10/0;
//提交事務
tx.commit();
}catch(Exception e) {
e.printStackTrace();
//回滾事務
tx.rollback();
}finally {
//關閉操作
session.close();
sessionFactory.close();
}
}
六、Hibernate繫結session
**1)在hibernate核心配置檔案中配置**
2)呼叫sessionFactory裡面的方法得到
七、Hibernate的api使用
Query物件
使用query物件,使用hql語句
hql:hibernate query language,hibernate提供查詢語言。普通sql語句很相似
1)hql和sql語句區別:
- 使用sql操作表和表字段
- 使用hql操作實體類和屬性
2 查詢所有hql語句: from 實體類名稱
3) Query物件使用
1)建立Query物件
2)呼叫query物件裡面的方法得到結果
Criteria物件
1 使用這個物件查詢操作,但是使用這個物件時候,不需要寫語句,直接呼叫方法實現
2 實現過程
(1)建立criteria物件
(2)呼叫物件裡面的方法得到結果
SQLQuery物件
1 使用hibernate時候,呼叫底層sql實現
2 實現過程
(1)建立物件
(2)呼叫物件的方法得到結果
返回list集合每部分是陣列
返回list中每部分是物件形式