Hibernate学习笔记(二)
Hibernate概述:
什么是Hibernate:是一個(gè)持久層的ORM的框架
什么是ORM:
ORM:對(duì)象關(guān)系映射,指的是將一個(gè)java中的對(duì)象與關(guān)系型數(shù)據(jù)庫(kù)中的表建立一種映射關(guān)系,從而操作對(duì)象就可以完成數(shù)據(jù)庫(kù)的相關(guān)操作
為什么學(xué)習(xí)Hibernate
簡(jiǎn)化JDBC的開發(fā)
性能很好
Hibernate的API
Configuration:加載配置文件
SessionFactory:內(nèi)部維護(hù)連接池。配置C3p0連接池,自定義工具類。
Session:
維護(hù)一級(jí)緩存,與數(shù)據(jù)庫(kù)交互橋梁。
常用的方法:
save(Object obj)
get()/load()
update()
delete()
saveOrUpdate()
Transaction:
commit();
rollback();
#####持久化類編寫的規(guī)則
持久化類的概述
【】什么是持久化?將內(nèi)存中的一個(gè)對(duì)象持久化到數(shù)據(jù)庫(kù)中過(guò)程。Hibernate框架就是用來(lái)進(jìn)行持久化的框架
【】什么是持久化類?一個(gè)java對(duì)象與數(shù)據(jù)庫(kù)的表建立了映射關(guān)系,那么這個(gè)類在Hibernate中稱為是持久化類
【】持久化類=java類+映射文件
持久化類編寫的規(guī)則
【】對(duì)持久化類提供一個(gè)無(wú)參數(shù)的構(gòu)造函數(shù) Hibernate底層需要使用反射生成實(shí)例
【】屬性需要私有,對(duì)私有屬性提供public的get和set函數(shù)的方法 Hibernate中獲取,設(shè)置對(duì)象的值
【】對(duì)持久化類提供一個(gè)唯一標(biāo)識(shí)OID與數(shù)據(jù)庫(kù)主鍵對(duì)應(yīng) java中通過(guò)對(duì)象的地址區(qū)分是否是同一個(gè)對(duì)象,數(shù)據(jù)庫(kù)中通過(guò)主鍵確定是否是同一記錄,
在Hiberbate中通過(guò)持久化類的OID的屬性區(qū)分是否是同一對(duì)象
【】持久化類中屬性盡量使用包裝類類型 因?yàn)榛緮?shù)據(jù)類型默認(rèn)是0,那么0就會(huì)有很多的歧義。包裝類類型默認(rèn)值就是null
【】持久化類不要使用final進(jìn)行修飾
#####主鍵生成策略
?
?
?
######持久化類的三種狀態(tài)
?
######Hibernate的一級(jí)緩存
?
?
//區(qū)分三種狀態(tài)public void demo1(){Session session=HibernateUtils.GetSession();//手動(dòng)開啟事務(wù)Transaction transaction=session.beginTransaction();HibernateDemo1 hibernateDemo1=new HibernateDemo1();//瞬時(shí)態(tài)對(duì)象:沒有唯一標(biāo)識(shí)OID,沒有被Session管理hibernateDemo1.setCust_name("XXXX");session.save(hibernateDemo1);//持久態(tài)對(duì)象:有唯一標(biāo)識(shí)OID,被Session管理transaction.commit();//事件的提交session.close();//會(huì)話關(guān)閉//session.clear();//清空所有//session.evict(hibernateDemo1);//清空一個(gè)對(duì)象。這是一級(jí)緩存的管理處理//脫管態(tài)對(duì)象:有唯一標(biāo)識(shí)對(duì)象OID,沒有被Session管理System.out.println("客戶名稱:"+hibernateDemo1.getCust_name());}?
?
#####事務(wù)的回首
【】事務(wù):事務(wù)指的是邏輯上的一組操作,組成這組操作的各個(gè)邏輯單元要么全部成功,要么全部都失敗
【】事務(wù):事務(wù)指的是邏輯上的一組操作,組成這組操作的各個(gè)邏輯單元要么全部成功,要么全部都失敗
####事務(wù)的特性:
【】原子性:代表事務(wù)不可分割
【】一致性:代表事務(wù)執(zhí)行前后,數(shù)據(jù)的完整性保持一致
【】隔離性:代表一個(gè)事務(wù)執(zhí)行的過(guò)程中,不應(yīng)該受到其他事務(wù)的干擾
【】持久性:代表事務(wù)執(zhí)行完成后,數(shù)據(jù)就持久到數(shù)據(jù)庫(kù)中
####如果不考慮隔離的問題,會(huì)引發(fā)如下的安全問題:
【】讀問題
#臟讀:一個(gè)事務(wù)讀到另一個(gè)事務(wù)未提交的數(shù)據(jù)
#不可重復(fù)讀:一個(gè)事務(wù)讀到另一個(gè)事務(wù)已經(jīng)提交的update數(shù)據(jù),導(dǎo)致在前一個(gè)事務(wù)多次查詢的結(jié)果不一致
#虛讀:一個(gè)事務(wù)讀到另一個(gè)事務(wù)已經(jīng)提交的insert數(shù)據(jù),導(dǎo)致在前一個(gè)事務(wù)多次查詢的結(jié)果不一致
【】寫問題(了解)
#引發(fā)兩類丟失更新
【】讀問題的解決
#設(shè)置事務(wù)隔離級(jí)別
#Read uncommitted 以上都問題都會(huì)發(fā)生
#Read committed 解決臟讀,但是不可重復(fù)讀和虛讀有可能發(fā)生
#Repeatable read 解決臟讀和不可重復(fù)讀,但是虛讀有可能發(fā)生
#Serializable 解決所有讀問題
一般的情況下,數(shù)據(jù)庫(kù)通常會(huì)使用第二或者第三種方式隔離,默認(rèn)的oracle是使用第二種,而mysql是使用第三種
關(guān)于在Hibernate中配置隔離的相關(guān)的問題--照片
設(shè)置隔離級(jí)別 <property name="hibernate.connection.isolation">4</property>
?
?
####sevice事務(wù):
#####Hibernate的其他API
【】Query
public void queryTest(){Session session=HibernateUtils.GetSession();//手動(dòng)開啟事務(wù)Transaction transaction=session.beginTransaction();//通過(guò)Session獲得Query接口String hql="from HibernateDemo1";//查詢HIbernateDemo1中的對(duì)應(yīng)表的數(shù)據(jù),可以設(shè)置whereorg.hibernate.Query query=session.createQuery(hql);//設(shè)置條件//query.setParameter(0, "1");//設(shè)置分頁(yè)query.setFirstResult(0);//起始數(shù)據(jù)query.setMaxResults(2);//每頁(yè)的顯示數(shù)List<HibernateDemo1> list=query.list();transaction.commit();//事件的提交session.close();//會(huì)話關(guān)閉}?
?
【】Criteria
?
public void CriteriaTest(){Session session=HibernateUtils.GetSession();//手動(dòng)開啟事務(wù)Transaction transaction=session.beginTransaction();//通過(guò)session獲得Criteria的對(duì)象/* Criteria criteria=session.createCriteria(HibernateDemo1.class);List<HibernateDemo1>list=criteria.list();//獲取數(shù)據(jù)表的全部信息*///條件查詢Criteria criteria=session.createCriteria(HibernateDemo1.class);criteria.add(Restrictions.like("cust_name","宋%"));List<HibernateDemo1>list=criteria.list();//獲取到查詢的信息//設(shè)置分頁(yè)criteria.setFirstResult(0);criteria.setMaxResults(3);transaction.commit();//事件的提交session.close();//會(huì)話關(guān)閉}?
?
【】SQLQuery
?
?
?
?信息類:
public class HibernateDemo1 {private long cust_id;private String cust_name;private String cust_source;private String cust_industry;private String cust_level;private String cust_phone;private String cust_mobile;public long getCust_id() {return cust_id;}public void setCust_id(long cust_id) {this.cust_id = cust_id;}public String getCust_name() {return cust_name;}public void setCust_name(String cust_name) {this.cust_name = cust_name;}public String getCust_source() {return cust_source;}public void setCust_source(String cust_source) {this.cust_source = cust_source;}public String getCust_industry() {return cust_industry;}public void setCust_industry(String cust_industry) {this.cust_industry = cust_industry;}public String getCust_level() {return cust_level;}public void setCust_level(String cust_level) {this.cust_level = cust_level;}public String getCust_phone() {return cust_phone;}public void setCust_phone(String cust_phone) {this.cust_phone = cust_phone;}public String getCust_mobile() {return cust_mobile;}public void setCust_mobile(String cust_mobile) {this.cust_mobile = cust_mobile;}@Overridepublic String toString() {return "HibernateDemo1 [cust_id=" + cust_id + ", cust_industry="+ cust_industry + ", cust_level=" + cust_level+ ", cust_mobile=" + cust_mobile + ", cust_name=" + cust_name+ ", cust_phone=" + cust_phone + ", cust_source=" + cust_source+ "]";}}?
?
工具類:
?
public class HibernateUtils {//這個(gè)包的主要重用是為了放置工具類//這個(gè)工具類是Hibernate的工具類public static final Configuration cfg;public static final SessionFactory sf;//創(chuàng)建一個(gè)SessionFactory對(duì)象:類似于JDBC中連接池static{//加載Hibernate核心配置文件cfg=new Configuration().configure();sf=cfg.buildSessionFactory();//此處相當(dāng)于創(chuàng)建工廠 }//對(duì)外設(shè)置一個(gè)接口public static Session GetSession(){//通過(guò)SessionFactory獲取到Session對(duì)象,類似于JDBC中的Connectionreturn sf.openSession();} }轉(zhuǎn)載于:https://www.cnblogs.com/byczyz/p/11427494.html
總結(jié)
以上是生活随笔為你收集整理的Hibernate学习笔记(二)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 香粉传奇剧情介绍
- 下一篇: Struts2学习笔记(一)--入门常见