Hibernate_day02

1、今天內容

1 實體類編寫規則mysql

2 hibernate主鍵生成策略web

(1)nativeredis

(2)uuidsql

3 實體類操做數據庫

(1)crud操做api

(2)實體類對象狀態數組

4 hibernate的一級緩存緩存

5 hibernate的事務操做session

(1)事務代碼規範寫法框架

6 hibernate其餘的api(查詢)

(1)Query

(2)Criteria

(3)SQLQuery

2、實體類編寫規則

1 實體類裏面屬性私有的

2 私有屬性使用公開的set和get方法操做

3 要求實體類有屬性做爲惟一值(通常使用id值)

4 實體類屬性建議不使用基本數據類型,使用基本數據類型對應的包裝類

(1)八個基本數據類型對應的包裝類

- int – Integer

- char—Character、

- 其餘的都是首字母大寫 好比 double – Double

(2)好比 表示學生的分數,假如 int score;

- 好比學生得了0分 ,int score = 0;

- 若是表示學生沒有參加考試,int score = 0;不能準確表示學生是否參加考試

l       解決:使用包裝類能夠了, Integer score = 0,表示學生得了0分,

表示學生沒有參加考試,Integer score = null;

3、Hibernate主鍵生成策略

1 hibernate要求實體類裏面有一個屬性做爲惟一值,對應表主鍵,主鍵能夠不一樣生成策略

2 hibernate主鍵生成策略有不少的值

3 在class屬性裏面有不少值

(1)native: 根據使用的數據庫幫選擇哪一個值

(2)uuid:以前web階段寫代碼生成uuid值,hibernate幫咱們生成uuid值

4 演示生成策略值 uuid

(1)使用uuid生成策略,實體類id屬性類型 必須 字符串類型

(2)配置部分寫出uuid值

 

 

4、實體類操做

1.對實體類crud操做

 添加操做

1 調用session裏面的save方法實現

根據id查詢

1 調用session裏面的get方法實現

修改操做

1 首先查詢,修改值

(1)根據id查詢,返回對象

 

 

刪除操做

1 調用session裏面delete方法實現

2.實體類對象狀態(概念)

1 實體類狀態有三種

(1)瞬時態:對象裏面沒有id值,對象與session沒有關聯

(2)持久態:對象裏面有id值,對象與session關聯

(3)託管態:對象有id值,對象與session沒有關聯

2 演示操做實體類對象的方法

(1)saveOrUpdate方法:實現添加、實現修改

5、Hibernate的一級緩存

1.什麼是緩存

1 數據存到數據庫裏面,數據庫自己是文件系統,使用流方式操做文件效率不是很高。

(1)把數據存到內存裏面,不須要使用流方式,能夠直接讀取內存中數據

(2)把數據放到內存中,提供讀取效率

2.Hibernate緩存

1 hibernate框架中提供不少優化方式,hibernate的緩存就是一個優化方式

2 hibernate緩存特色:

第一類 hibernate的一級緩存

(1)hibernate的一級緩存默認打開的

(2)hibernate的一級緩存使用範圍,是session範圍,從session建立到session關閉範圍

(3)hibernate的一級緩存中,存儲數據必須 持久態數據

第二類 hibernate的二級緩存

(1)目前已經不使用了,替代技術 redis

(2)二級緩存默認不是打開的,須要配置

(3)二級緩存使用範圍,是sessionFactory範圍

3.驗證一級緩存存在

1 驗證方式

(1)首先根據uid=1查詢,返回對象

(2)其次再根據uid=1查詢,返回對象

第一步執行get方法以後,發送sql語句查詢數據庫

第二個執行get方法以後,沒有發送sql語句,查詢一級緩存內容

4.Hibernate一級緩存執行過程

5.Hibernate一級緩存特性

 1 持久態自動更新數據庫

2 執行過程(瞭解)

6、Hibernate事務操做

1.事務相關概念

1 什麼是事務

2 事務特性

3 不考慮隔離性產生問題

(1)髒讀

(2)不可重複讀

(3)虛讀

4 設置事務隔離級別

(1)mysql默認隔離級別 repeatable read

2.Hibernate事務代碼規範寫法

1 代碼結構

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();
        }
    }

3.Hibernate綁定session

1 session相似於jdbc的connection,以前web階段學過 ThreadLocal

2 幫實現與本地線程綁定session

3 獲取與本地線程session

(1)在hibernate核心配置文件中配置

(2)調用sessionFactory裏面的方法獲得

4 獲取與本地線程綁定session時候,關閉session報錯,不須要手動關閉了

7、Hibernate的api使用

一、Query對象

1 使用query對象,不須要寫sql語句,可是寫hql語句

(1)hql:hibernate query language,hibernate提供查詢語言,這個hql語句和普通sql語句很類似

(2)hql和sql語句區別:

- 使用sql操做表和表字段

- 使用hql操做實體類和屬性

2 查詢全部hql語句:

(1)from 實體類名稱

3 Query對象使用

(1)建立Query對象

(2)調用query對象裏面的方法獲得結果

二、Criteria對象

1 使用這個對象查詢操做,可是使用這個對象時候,不須要寫語句,直接調用方法實現

2 實現過程

(1)建立criteria對象

(2)調用對象裏面的方法獲得結果

 

三、SQLQuery對象

1 使用hibernate時候,調用底層sql實現

2 實現過程

(1)建立對象

(2)調用對象的方法獲得結果

返回list集合每部分是數組

返回list中每部分是對象形式

完成任務

1 查詢表全部記錄,把記錄顯示頁面中

(1)servlet裏面調用service,service調用dao

(2)在dao裏面使用hibernate實現操做

(3)在頁面中顯示全部數據

- 在servlet裏面把list集合放到域對象

- 在jsp中使用el表達式+foreach標籤獲取

2 複習知識

(1)一對多和建表

(2)多對多和建表

相關文章
相關標籤/搜索