ORM是Object Relation Mapping的縮寫,意思是對象關(guān)系映射,是把數(shù)據(jù)庫中的關(guān)系數(shù)據(jù)映射成為程序中的對象。使用 ORM 的優(yōu)點(diǎn):提高了開發(fā)效率降低了開發(fā)成本、開發(fā)更簡單更對象化、可移植更強(qiáng)。
Hibernate是持久層框架,通過對JDBC進(jìn)行了非常輕量級的對象封裝,使得Java程序員可以隨心所欲的使用對象編程思維來操縱數(shù)據(jù)庫。
1)對JDBC訪問數(shù)據(jù)庫的代碼做了封裝,大大簡化了數(shù)據(jù)訪問層繁瑣的重復(fù)性代碼。
2)Hibernate是一個基于JDBC的主流持久化框架,是一個優(yōu)秀的ORM實(shí)現(xiàn)。他很大程度的簡化DAO層的編碼工作
3)Hibernate使用Java反射機(jī)制,而不是字節(jié)碼增強(qiáng)程序來實(shí)現(xiàn)透明性。
4)Hibernate的性能非常好,因?yàn)樗莻€輕量級框架。映射的靈活性很出色。它支持各種關(guān)系數(shù)據(jù)庫,從一對一到多對多的各種復(fù)雜關(guān)系。
1.通過Configuration().configure();讀取并解析hibernate.cfg.xml配置文件
2.由hibernate.cfg.xml中的讀取并解析映射信息
3.通過config.buildSessionFactory();//創(chuàng)建SessionFactory
4.sessionFactory.openSession();//打開Sesssion
5.session.beginTransaction();//創(chuàng)建事務(wù)Transation
6.persistent operate持久化操作
7.session.getTransaction().commit();//提交事務(wù)
8.關(guān)閉Session
9.關(guān)閉SesstionFactory
臨時/瞬時狀態(tài):直接 new 出來的對象,該對象還沒被持久化(沒保存在數(shù)據(jù)庫中),不受 Session 管理。
持久化狀態(tài):當(dāng)調(diào)用 Session 的 save/saveOrupdate/get/load/list 等方法的時候,對象就是持久化狀態(tài)。
游離狀態(tài):Session 關(guān)閉之后對象就是游離狀態(tài)。
數(shù)據(jù)查詢時,沒有 OID 指定的對象,get() 返回 null;load() 返回一個代理對象。
load()支持延遲加載;get() 不支持延遲加載。
getCurrentSession 會綁定當(dāng)前線程,而 openSession 則不會。
getCurrentSession 事務(wù)是 Spring 控制的,并且不需要手動關(guān)閉,而 openSession 需要我們自己手動開啟和提交事務(wù)。
在定義數(shù)據(jù)庫和數(shù)據(jù)庫屬性的文件applicationConfig.xml里面,把hibernate.show_sql 設(shè)置為true,這樣生成的SQL就會在控制臺出現(xiàn)了。注意:這樣做會加重系統(tǒng)的負(fù)擔(dān),不利于性能調(diào)優(yōu)。
都是用于將對象保存到數(shù)據(jù)庫中的方法。
1)save()只能執(zhí)行INSERT操作,會立即執(zhí)行Sql insert,save()的返回值是一個Serializable對象;
2)saveOrUpdate()可以進(jìn)行 記錄的INSERT和UPDATE;
3)persist不保證立即執(zhí)行,可能要等到flush;persist不更新緩存;persist()方法返回值為void;