一:hibernate(是一個開源的輕量級(就是不需要依賴其他就可以運行)框架)是應用在dao層(持久化層)的一個框架,是對數據庫的crud操作(就是增刪改查操作),就是對jdbc進行的封裝,不在寫複雜的SQL語句,只需要在配置文件中配置即可。
二:MVC思想 就是(M:模型 V:視圖 C:控制器)
三:hibernate使用的是ORM思想對數據庫進行crud操作
ORM(object relational mapping)對象關係映射
就是實體類和數據庫的表一一對應(所以不需要操作數據庫表,而是操作實體類對象即可),看下圖即可
四:hibernate入門案例
4.1:入門案例的步驟:
4.1.1 導包 ..............
4.1.2 創建實體類(注: 使用hibernate不需要手動創建表,hibernate會幫把表創建,但是必須得配置纔可以)
4.1.3:配置映射配置文件:
配置實體類和數據庫表的一一對應關係(映射關係)————使用xml配置
xml文件的位置和名稱沒有固定要求(個人建議和實體類放一起,名字隨意)
引入dtd的約束
配置映射關係:
4.1.4: 配置hibernate的核心配置文件
引入約束
位置:在src下面;
名稱:如果單獨使用hibernate時候,名稱固定 是hibernate.cfg.xml(我們這裏使用這個)
如果和spring一起使用的時候,名稱就不固定
核心配置文件中:
第一部分:需要配置數據庫的信息
第二部分:配置hibernate的信息(可選)(上面說hibernate會自動生成表,必須得配置這句話)
第三部分:配置映射文件(映入映射文件)
4.1.5 測試demo
五:hibernate的實體類的編寫規則
5.1:屬性私有,生成get,set方法
5.2 :要求實體類中有一個屬性作爲唯一值
5.3 :類型建議使用包裝類型
int——Integer char——Charracter 其它都是首字母大寫就可以
5.4:主鍵生成的策略(方式)
5.4.1:native:就是一般的那種..........
5.4.2:uuid:這裏不做解釋.......
六:實現crud操作
6.1:添加:
6.2:根據id查詢
6.3: 修改:
6.4:刪除:
七:hibernate的實體類對象的狀態
6.1:瞬時態:對象裏面沒有id值,對象與session沒有關聯
就是在程序中有數據,而在數據庫中沒有數據,並且數據連接斷開
6.2:持久態:對象裏有id值,對象與session沒有關聯
就是在程序中和數據庫中都有數據,並且數據連接沒有持續連接中。
6.3:託管態:對象裏面有id值,對象與session沒有關聯
就是在在持久態的時候,數據庫的連接斷開,所有程序中的數據都成爲遊離態
八:hibernate的一級緩存:(hibernate的緩存是一個優化的方式)
8.1:hibernate的一級緩存默認是打開的
8.2:作用範圍:是session範圍,session的創建到死亡
8.3:一級緩存存儲的數據 必須是持久態
九:hibernate的一對多操作(重要)
9.1 :創建兩個實體類:例如 客戶和聯繫人
9.2: 讓兩個實體類之間互相表示
9.2.1: 在客戶裏表示多個聯繫人(使用set集合)並且生成get,set方法
9.2.2:在聯繫人中表示客戶
9.3:配置映射關係
完成基本的配置的時候。在配置一對多的關係
9.3.1:在客戶映射文件中:表示所有聯繫人
9.3.2:在聯繫人的映射文件中,表示所屬客戶
9.4:創建核心配置配件
引入映射配置文件....
十:測試一對多demo
這樣寫的時候:需要一個在多的一方中配置一下
其他操作略去..................
十一:多對多操作
11.1:創建兩個實體類
11.2:兩個類互相表示(都用set集合表示)
11.3: 在映射配置文件中互相表示(以角色和用戶來舉例)
11.4:在覈心配置文件中引入映射文件
十二:多對多級聯保存
12.1:根據用戶保存角色
12.1.1:在用戶的映射文件中set標籤中進行配置
12.1.2:寫代碼
創建用戶和角色對象,把角色放到用戶裏面,最終保存用戶就可以了
//演示多對多修級聯保存
@Test
publicvoid testSave() {
SessionFactory sessionFactory = null;
Session session = null;
Transaction tx = null;
try {
//得到sessionFactory
sessionFactory = HibernateUtils.getSessionFactory();
//得到session
session = sessionFactory.openSession();
//開啓事務
tx = session.beginTransaction();
//添加兩個用戶,爲每個用戶添加兩個角色
//1 創建對象
User user1 = new User();
user1.setUser_name("lucy");
user1.setUser_password("123");
User user2 = new User();
user2.setUser_name("mary");
user2.setUser_password("456");
Role r1 = new Role();
r1.setRole_name("總經理");
r1.setRole_memo("總經理");
Role r2 = new Role();
r2.setRole_name("祕書");
r2.setRole_memo("祕書");
Role r3 = new Role();
r3.setRole_name("保安");
r3.setRole_memo("保安");
//2 建立關係,把角色放到用戶裏面
// user1 --r1/r2
user1.getSetRole().add(r1);
user1.getSetRole().add(r2);
// user2-- r2/r3
user2.getSetRole().add(r2);
user2.getSetRole().add(r3);
//3 保存用戶
session.save(user1);
session.save(user2);
//提交事務
tx.commit();
}catch(Exception e) {
tx.rollback();
}finally {
session.close();
//sessionFactory不需要關閉
sessionFactory.close();
}
}
其他操作略去................
十三:hibernate的查詢方式
13.1:對象導航擦查詢
查詢某個客戶裏面所有聯繫人過程,使用對象導航實現
13.2:oid查詢
13.3:hql查詢:
13.4:QBC查詢