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
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;
1 hibernate要求實體類裏面有一個屬性做爲惟一值,對應表主鍵,主鍵能夠不一樣生成策略
2 hibernate主鍵生成策略有不少的值
3 在class屬性裏面有不少值
(1)native: 根據使用的數據庫幫選擇哪一個值
(2)uuid:以前web階段寫代碼生成uuid值,hibernate幫咱們生成uuid值
4 演示生成策略值 uuid
(1)使用uuid生成策略,實體類id屬性類型 必須 字符串類型
(2)配置部分寫出uuid值
1 調用session裏面的save方法實現
1 調用session裏面的get方法實現
1 首先查詢,修改值
(1)根據id查詢,返回對象
1 調用session裏面delete方法實現
1 實體類狀態有三種
(1)瞬時態:對象裏面沒有id值,對象與session沒有關聯
(2)持久態:對象裏面有id值,對象與session關聯
(3)託管態:對象有id值,對象與session沒有關聯
2 演示操做實體類對象的方法
(1)saveOrUpdate方法:實現添加、實現修改
1 數據存到數據庫裏面,數據庫自己是文件系統,使用流方式操做文件效率不是很高。
(1)把數據存到內存裏面,不須要使用流方式,能夠直接讀取內存中數據
(2)把數據放到內存中,提供讀取效率
1 hibernate框架中提供不少優化方式,hibernate的緩存就是一個優化方式
2 hibernate緩存特色:
第一類 hibernate的一級緩存
(1)hibernate的一級緩存默認打開的
(2)hibernate的一級緩存使用範圍,是session範圍,從session建立到session關閉範圍
(3)hibernate的一級緩存中,存儲數據必須 持久態數據
第二類 hibernate的二級緩存
(1)目前已經不使用了,替代技術 redis
(2)二級緩存默認不是打開的,須要配置
(3)二級緩存使用範圍,是sessionFactory範圍
1 驗證方式
(1)首先根據uid=1查詢,返回對象
(2)其次再根據uid=1查詢,返回對象
第一步執行get方法以後,發送sql語句查詢數據庫
第二個執行get方法以後,沒有發送sql語句,查詢一級緩存內容
1 持久態自動更新數據庫
2 執行過程(瞭解)
1 什麼是事務
2 事務特性
3 不考慮隔離性產生問題
(1)髒讀
(2)不可重複讀
(3)虛讀
4 設置事務隔離級別
(1)mysql默認隔離級別 repeatable read
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(); } }
1 session相似於jdbc的connection,以前web階段學過 ThreadLocal
2 幫實現與本地線程綁定session
3 獲取與本地線程session
(1)在hibernate核心配置文件中配置
(2)調用sessionFactory裏面的方法獲得
4 獲取與本地線程綁定session時候,關閉session報錯,不須要手動關閉了
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對象裏面的方法獲得結果
1 使用這個對象查詢操做,可是使用這個對象時候,不須要寫語句,直接調用方法實現
2 實現過程
(1)建立criteria對象
(2)調用對象裏面的方法獲得結果
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)多對多和建表