摘要:一中實(shí)體規(guī)則實(shí)體類創(chuàng)建的注意事項(xiàng)持久化類提供無參數(shù)構(gòu)造成員變量私有,提供方法訪問,需提供屬性屬性就是方法持久化類中的屬性,應(yīng)盡量使用包裝類型可以表示,在插如數(shù)據(jù)庫中有作用持久化類需要提供主鍵屬性與數(shù)據(jù)庫中主鍵列對應(yīng)不需要修飾原因使用代理生成
一、hibernate中實(shí)體規(guī)則 實(shí)體類創(chuàng)建的注意事項(xiàng)
1.持久化類提供無參數(shù)構(gòu)造
2.成員變量私有,提供get、set方法訪問,需提供屬性(屬性就是get、set方法)
3.持久化類中的屬性,應(yīng)盡量使用包裝類型(可以表示null,在插如數(shù)據(jù)庫中有作用)
4.持久化類需要提供oid(主鍵屬性)與數(shù)據(jù)庫中主鍵列對應(yīng)
5.不需要final修飾class(原因:hibernate使用cglib代理生成代理對象,如果被final修飾將無法生成代理)
1.自然主鍵(少見)
表的業(yè)務(wù)列中,有某業(yè)務(wù)列符合,必須有且不重復(fù)的特征時,該列可以作為主鍵使用
2.代理主鍵(常見)
表的業(yè)務(wù)列中,沒有某業(yè)務(wù)列符合,必須有且不重復(fù)的特征時,創(chuàng)建一個沒有業(yè)務(wù)意義的列做為主鍵主鍵生成策略
1.代理主鍵
indentity:主鍵自增,有數(shù)據(jù)庫來維護(hù)主鍵值,錄入時不需要指定主鍵 sequence:Oracle中的主鍵生成策略 increment(了解):主鍵自增,由hibernate來維護(hù),每次插入前會先查詢表中的id的最大值,+1作為新主鍵插入 hilo(了解):高低位算法,主鍵自增,有hibernate來維護(hù),開發(fā)時不使用 native:hilo + sequence + indeyity 自動三選一策略 uuid:產(chǎn)生隨機(jī)字符串作為主鍵,主鍵類型必須為String類型
2.自然主鍵
assigned:自然主鍵生成策略,hibernate不會管理主鍵值,由開發(fā)人員自己錄入二、hibernate中的對象狀態(tài) 對象分為三種狀態(tài)
1.瞬時狀態(tài)
沒有id,沒有與session關(guān)聯(lián)
2.持久化狀態(tài)
有id,與session有關(guān)聯(lián)
3.游離|托管狀態(tài)
有id,沒有與session關(guān)聯(lián)
代碼
@Test public void save() { Session session = HibernateUtils.openSession(); Transaction tx = session.beginTransaction(); Customer c = new Customer(); // 沒有id,沒有與session對象關(guān)聯(lián) => 瞬時狀態(tài) session.save(c); // 持久化狀態(tài),有id,與session對象關(guān)聯(lián) tx.commit(); session.close(); // 游離|托管狀態(tài),有id,沒有關(guān)聯(lián) }
三種狀態(tài)的轉(zhuǎn)換圖
緩存:提高效率,hibernate中的一級緩存也是為了提高操作數(shù)據(jù)庫的效率
四、hibernate中的事務(wù)事務(wù)特性
a原子性 c一致性 i隔離性(事務(wù)并發(fā)的時候隔離級別) d持久性
事務(wù)并發(fā)問題
1、臟讀 2、不可重復(fù)讀 3、幻、虛讀
事務(wù)的隔離級別
讀未提交:出現(xiàn)的問題1、2、3 讀已提交:出現(xiàn)的問題2、3 可重復(fù)讀:出現(xiàn)的問題3(mysql默認(rèn)級別) 串行化:沒有問題,會極大的降低效率
如何在hibernate中指定隔離級別
在hibernate主配置中 hibernate.connection.isolation 1|2|4|8 數(shù)據(jù)庫中存儲級別是一個字節(jié) 0001 1 讀未提交 0010 2 讀已提交 0100 4 可重復(fù)讀 1000 8 串行化
項(xiàng)目中如何管理事務(wù)
業(yè)務(wù)開始之前打開事務(wù),業(yè)務(wù)執(zhí)行之后提交事務(wù),執(zhí)行過程中出現(xiàn)異常,回滾事務(wù) 在dao層操作數(shù)據(jù)庫需要用到session對象,在service控制事務(wù)也是使用session對象完成,我們要確保dao層和service層使用的是同一個session對象 在hibernate中確保使用同一個session的問題,hibernate已經(jīng)幫我們解決了,我們開發(fā)人員只需要調(diào)用sf.getCurrentSession()方法獲得與當(dāng)前線程綁定的session對象 注意:調(diào)用getCurrentSession()方法必須配合主配置中的一項(xiàng)配置,如下 指定session與當(dāng)前線程綁定 hibernate.current_session_context_class thread 通過getCurrentSession()方法獲得session對象,當(dāng)事務(wù)提交時session會自動關(guān)閉,不需要手動close關(guān)閉五、hibernate中的批量查詢
HQ查詢-hibernate Query Language(支持多表查詢,但一般是不復(fù)雜時使用)
// 1、書寫HQL語句 String hql = "form Customer"; // 查詢所有的Customer對象 // 2、根據(jù)HQL語句創(chuàng)建查詢對象 Query query = session.createQuery(hql); // 3、根據(jù)對象獲得查詢結(jié)果 Listlist = query.list(); // 返回list結(jié)果 // query.uniqueResult();//返回唯一的查詢結(jié)果 // ?占位符 String hql = "form Customer where cus_id = ?"; // 查詢所有的Customer對象 //設(shè)置參數(shù) session.setParamter(0, 1)// hibernate ?占位符索引從0開始,jdbc從1開始 // :占位符 String hql = "form Customer where cus_id = :cus_id"; session.setParamter("cus_id", 1)// hibernate :占位符直接輸入占位名字 // 分頁查詢 query.setFirstResult(0);// 第一條數(shù)據(jù)開始的位置,0是索引 query.setMaxResult(20);// 設(shè)置查詢結(jié)果最大條數(shù),想當(dāng)與pagesize
Criteria查詢-hibernate自創(chuàng)的無語句查詢(單表查詢)
Criteria criteria = session.createCriteria(Customer.calss); //查詢所有的Customer對象 Listlist = criteria.list();// 返回list結(jié)果 // criteria.uniqueResult();// 返回唯一查詢結(jié)果 // 條件查詢 // > gt // >= ge // < lt // <= le // == eq // != ne // in in // between and between // like like // is not null isNotNull // is null isNull // or or // and and criteria.add(Restrictions.eq("cus_id", 1))// 查詢cus_id為1的對象 // 聚合函數(shù) criteria.setProjection(Projections.rowCount);// count函數(shù) // 分頁查詢 criteria.setFirstResult(0);// 第一條數(shù)據(jù)開始的位置,0是索引 criteria.setMaxResult(20);// 設(shè)置查詢結(jié)果最大條數(shù),想當(dāng)與pagesize
原生SQL查詢(復(fù)雜業(yè)務(wù)查詢)
// 書寫sql語句 String sql = "select * from customer"; // 創(chuàng)建sql查詢對象 SQLQuery query = session.createSQLQuery(sql); // 指定結(jié)果集封裝到指定對象中 query.addEntity(Customer.class); // 調(diào)用方法查詢結(jié)果 Listlist = query.list();
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/76469.html
摘要:學(xué)編程真的不是一件容易的事不管你多喜歡或是多會編程,在學(xué)習(xí)和解決問題上總會碰到障礙。熟練掌握核心內(nèi)容,特別是和多線程初步具備面向?qū)ο笤O(shè)計(jì)和編程的能力掌握基本的優(yōu)化策略。 學(xué)Java編程真的不是一件容易的事,不管你多喜歡或是多會Java編程,在學(xué)習(xí)和解決問題上總會碰到障礙。工作的時間越久就越能明白這個道理。不過這倒是一個讓人進(jìn)步的機(jī)會,因?yàn)槟阋恢辈粩嗟膶W(xué)習(xí)才能很好的解決你面前的難題...
摘要:時間年月日星期二說明本文部分內(nèi)容均來自慕課網(wǎng)。返回對象不同返回持久化實(shí)體類對象返回代理對象。與緩存的關(guān)系不同只緩存,但不使用緩存查詢緩存除外會使用緩存。 時間:2017年07月11日星期二說明:本文部分內(nèi)容均來自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com教學(xué)源碼:無學(xué)習(xí)源碼:無 第一章:概述 1-1 概述 課程內(nèi)容 了解緩存 掌握Hibernate一級緩存的使用 掌握H...
時間:2017年07月11日星期二說明:本文部分內(nèi)容均來自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com教學(xué)源碼:無學(xué)習(xí)源碼:https://github.com/zccodere/s... 第一章:應(yīng)用場景 1-1 多對多的應(yīng)用場景 案例分析:企業(yè)項(xiàng)目開發(fā)過程中 一個項(xiàng)目可由多個員工參與開發(fā) 一個員工可同時參與開發(fā)多個項(xiàng)目 示意圖 showImg(https://segmentfau...
時間:2017年08月16日星期三說明:本文部分內(nèi)容均來自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com教學(xué)源碼:無學(xué)習(xí)源碼:https://github.com/zccodere/s... 第一章:課程介紹 1-1 課程介紹 課程目錄 1.ssh知識點(diǎn)回顧 2.搭建ssm開發(fā)環(huán)境 3.struts2整合spring 4.spring整合hibernate 5.案例:使用ssh框架開發(fā)...
閱讀 1083·2021-11-22 15:35
閱讀 1723·2021-10-26 09:49
閱讀 3266·2021-09-02 15:11
閱讀 2105·2019-08-30 15:53
閱讀 2659·2019-08-30 15:53
閱讀 2955·2019-08-30 14:11
閱讀 3550·2019-08-30 12:59
閱讀 3268·2019-08-30 12:53