日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Hibernate實(shí)體規(guī)則、對(duì)象狀態(tài)、session緩存、事務(wù)

 印度阿三17 2019-08-31

Hibernate實(shí)體規(guī)則

javaBean規(guī)范

規(guī)范:
1.屬性私有化,提供get/set方法 - 只有提供了get/set方法的成員變量才是屬性
2.提供無參構(gòu)造器
3.基本數(shù)據(jù)類型建議使用包裝類
4.必須有主鍵oid對(duì)應(yīng)屬性
5.不能用final修飾 :hibernate使用cglib代理生成代理對(duì)象。代理對(duì)象是繼承被代理對(duì)象。如果類被final修飾,將無法生成代理對(duì)象.

主鍵生成策略 generator

		<generator class="主鍵生成策略">
<!-- 			<param name="sequence"></param> -->
		</generator>

主鍵種類:
1.代理主鍵:業(yè)務(wù)無關(guān),對(duì)象無關(guān) - 項(xiàng)目開發(fā)中常使用該類型
2.自然主鍵:表中存在非空且唯一的字段,例如身份證號(hào)
主鍵生成策略:
1.代理主鍵的生成策略:
identity:數(shù)據(jù)庫來維護(hù),自增長,不需要手動(dòng)錄入
sequence:數(shù)據(jù)庫維護(hù),seq.nextVal,適用于Oracle數(shù)據(jù)庫的序列方式,需要指定參數(shù)(序列名),不需要手動(dòng)輸入
increment:Hibernate維護(hù),自增長,不需要錄入,在插入之前會(huì)查找數(shù)據(jù)中id最大值, 1后插入
hilo:自增長算法
native:hilo identity sequence 自動(dòng)檢測(cè)
uuid:hibernate維護(hù),32位,id類型設(shè)置為varchar(32)以上
2.自然主鍵的生成策略:
assigned:必須手動(dòng)錄入

Hibernate對(duì)象狀態(tài)

1.瞬時(shí)狀態(tài):對(duì)象沒有id,并且沒有和session關(guān)聯(lián)
2.持久化狀態(tài):對(duì)象有id,并且和session關(guān)聯(lián)
-------------------內(nèi)容發(fā)生修改,在事務(wù)提交時(shí),都會(huì)同步到數(shù)據(jù)庫
3.游離|托管狀態(tài):對(duì)象有id,并且沒有和session關(guān)聯(lián)
*ID:和數(shù)據(jù)庫對(duì)比,如果數(shù)據(jù)庫中有改id,則為有效ID,數(shù)據(jù)庫中不存在,則為無效id

public void test02() {
		Session session = HibernateUtils.openSession();
		Transaction tx = session.beginTransaction();
		// c - 瞬時(shí)狀態(tài)
		Customer c = new Customer();
		c.setCust_name("新浪");
		System.out.println(c);//此時(shí)c對(duì)象沒有id,并且與session沒有關(guān)聯(lián)
		
		session.save(c);//c對(duì)象擁有id
		// c - 持久化狀態(tài)
		System.out.println(c);//c對(duì)象有id,并且與session關(guān)聯(lián)
		tx.commit();
		session.close();
		// c - 游離狀態(tài)
		System.out.println(c);
	}
	public void test03() {
		Session session = HibernateUtils.openSession();
		Transaction tx = session.beginTransaction();
		
		Customer c = session.get(Customer.class, 1l);
		// c - 持久化狀態(tài)
		System.out.println(c);
		tx.commit();
		session.close();
		// c - 游離狀態(tài)
		System.out.println(c);//c有id,但是和session沒有關(guān)聯(lián)
	}
public void test04() {
		Session session = HibernateUtils.openSession();
		Transaction tx = session.beginTransaction();
		
		Customer c = session.get(Customer.class, 3l);
		// c - 持久化狀態(tài)
		System.out.println(c);
		
		session.delete(c); // -- 沒打印
		
		System.out.println(c); 
		
		tx.commit(); // -- 執(zhí)行sql語句
		session.save(c);
		session.close();	
	}
public void test05() {
		Session session = HibernateUtils.openSession();
		Transaction tx = session.beginTransaction();
		
		Customer c = session.get(Customer.class, 2234236l);
		// c - 持久化狀態(tài)
		System.out.println(c);
		c.setCust_linkman("王總");
		
//		session.update(c);
		//處于持久化狀態(tài)對(duì)象內(nèi)容發(fā)生修改,在事務(wù)提交時(shí),都會(huì)同步到數(shù)據(jù)庫
		tx.commit();
		session.close();
	}
	public void test06() {
		Session session = HibernateUtils.openSession();
		Transaction tx = session.beginTransaction();
		
		// 游離狀態(tài)
		Customer c = new Customer();
		c.setCust_id(7l);//數(shù)據(jù)庫存在該id,但是c與session沒有關(guān)聯(lián)
		c.setCust_name("阿里媽媽");
//		session.update(c);
		session.saveOrUpdate(c);
		tx.commit();
		session.close();
	}

在這里插入圖片描述

Session緩存

session是有緩存的,
在這里插入圖片描述
緩存的作用:為了提高查詢效率,Hibernate一級(jí)緩存
快照:節(jié)省不必要的update操作,提高效率

load:默認(rèn)懶加載,使用對(duì)象時(shí),彩之星sql語句,變成真正的對(duì)象

Hibernate事務(wù)

事務(wù)

1.事務(wù)特性:原子性、一致性、隔離性、持久性
2.事務(wù)并發(fā)問題:臟讀1、不可重復(fù)讀2、幻讀3
3.事務(wù)的隔離級(jí)別:讀未提交123、讀已提交23、可重復(fù)讀3、串行化

Hibernate中的事務(wù)

1.在Hibernate中設(shè)置事務(wù)隔離級(jí)別

<!--設(shè)置事務(wù)隔離級(jí)別  
		hibernate.connection.isolation 4(1|2|4|8)
		0001 1 讀未提交
		0010 2 讀已提交
		0100 4 可重復(fù)讀
		1000 8 串行化
		-->
		
		<property name="hibernate.connection.isolation">4</property>

2.在項(xiàng)目中管理事務(wù)
1.業(yè)務(wù)開始之前打開事務(wù),業(yè)務(wù)執(zhí)行之后–提交事務(wù) 執(zhí)行過程中出現(xiàn)異常–回滾事務(wù)
2.在dao層操作數(shù)據(jù)庫需要用到session對(duì)象。在service控制事務(wù)也是使用session對(duì)象完成. 確保dao層和service層使用的同一個(gè)session對(duì)象
3.在hibernate中,確保使用同一個(gè)session的問題,hibernate已經(jīng)幫我們解決了. 我們開發(fā)人員只需要調(diào)用sf.getCurrentSession()方法即可獲得與當(dāng)前線程綁定的session對(duì)象
注意1: 調(diào)用getCurrentSession方法必須配合主配置中的一段配置

注意2:通過getCurrentSession方法獲得的session對(duì)象.當(dāng)事務(wù)提交時(shí),session會(huì)自動(dòng)關(guān)閉.不要手動(dòng)調(diào)用close關(guān)閉.

		<!--將session與當(dāng)前線程綁定 -->
		<property name="current_session_context_class">thread</property>

4.crm項(xiàng)目中:
service層:
在這里插入圖片描述
dao層:
在這里插入圖片描述

來源:https://www./content-4-428251.html

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多