實體類編寫規則
- 實體類裏面屬性私有的
- 私有屬性使用公開的set和get方法操作
- 要求實體類有屬性作爲唯一值(一般使用id值)
- 實體類屬性建議不使用基本數據類型,使用基本數據類型對應的包裝類
(1)八個基本數據類型對應的包裝類
- int – Integer
- char—Character、
- 其他的都是首字母大寫 比如 double – Double
(2)比如 表示學生的分數,假如 int score;
- 比如學生得了0分 ,int score = 0;
- 如果表示學生沒有參加考試,int score = 0;不能準確表示學生是否參加考試
解決:使用包裝類可以了, Integer score = 0,表示學生得了0分,
表示學生沒有參加考試,Integer score = null;
Hibernate主鍵生成策略
- hibernate要求實體類裏面有一個屬性作爲唯一值,對應表主鍵,主鍵可以不同生成策略
- hibernate主鍵生成策略有很多的值
- 在class屬性裏面有很多值
(1)native: 根據使用的數據庫幫選擇哪個值
(2)uuid:之前web階段寫代碼生成uuid值,hibernate幫我們生成uuid值
實體類操作
添加操作
- 調用session裏面的save方法實現
根據id查詢
- 調用session裏面的get方法實現
修改操作
先查詢,再修改
刪除操作
- 調用session裏面delete方法實現
實體類對象狀態
- 瞬時態:對象裏面沒有id值,對象與session沒有關聯
- 持久態:對象裏面有id值,對象與session關聯
- 託管態:對象有id值,對象與session沒有關聯
Hibernate一級緩存
什麼是緩存
1 數據存到數據庫裏面,數據庫本身是文件系統,使用流方式操作文件效率不是很高。
(1)把數據存到內存裏面,不需要使用流方式,可以直接讀取內存中數據
(2)把數據放到內存中,提供讀取效率
Hibernate緩存
- hibernate框架中提供很多優化方式,hibernate的緩存就是一個優化方式
- hibernate一級緩存特點
(1)hibernate的一級緩存默認打開的
(2)hibernate的一級緩存使用範圍,是session範圍,從session創建到session關閉範圍
(3)hibernate的一級緩存中,存儲數據必須 持久態數據
Hibernate事務代碼規範寫法
//代碼結構
try {
開啓事務
提交事務
}catch() {
回滾事務
}finally {
關閉
}
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 的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集合每部分是數組