亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

hibernate學(xué)習(xí)概要

Noodles / 1249人閱讀

摘要:一中實(shí)體規(guī)則實(shí)體類創(chuàng)建的注意事項(xiàng)持久化類提供無(wú)參數(shù)構(gòu)造成員變量私有,提供方法訪問(wèn),需提供屬性屬性就是方法持久化類中的屬性,應(yīng)盡量使用包裝類型可以表示,在插如數(shù)據(jù)庫(kù)中有作用持久化類需要提供主鍵屬性與數(shù)據(jù)庫(kù)中主鍵列對(duì)應(yīng)不需要修飾原因使用代理生成

一、hibernate中實(shí)體規(guī)則 實(shí)體類創(chuàng)建的注意事項(xiàng)

1.持久化類提供無(wú)參數(shù)構(gòu)造
2.成員變量私有,提供get、set方法訪問(wèn),需提供屬性(屬性就是get、set方法)
3.持久化類中的屬性,應(yīng)盡量使用包裝類型(可以表示null,在插如數(shù)據(jù)庫(kù)中有作用)
4.持久化類需要提供oid(主鍵屬性)與數(shù)據(jù)庫(kù)中主鍵列對(duì)應(yīng)
5.不需要final修飾class(原因:hibernate使用cglib代理生成代理對(duì)象,如果被final修飾將無(wú)法生成代理)

主鍵類型

1.自然主鍵(少見(jiàn))

表的業(yè)務(wù)列中,有某業(yè)務(wù)列符合,必須有且不重復(fù)的特征時(shí),該列可以作為主鍵使用

2.代理主鍵(常見(jiàn))

表的業(yè)務(wù)列中,沒(méi)有某業(yè)務(wù)列符合,必須有且不重復(fù)的特征時(shí),創(chuàng)建一個(gè)沒(méi)有業(yè)務(wù)意義的列做為主鍵
主鍵生成策略

1.代理主鍵

indentity:主鍵自增,有數(shù)據(jù)庫(kù)來(lái)維護(hù)主鍵值,錄入時(shí)不需要指定主鍵
sequence:Oracle中的主鍵生成策略
increment(了解):主鍵自增,由hibernate來(lái)維護(hù),每次插入前會(huì)先查詢表中的id的最大值,+1作為新主鍵插入
hilo(了解):高低位算法,主鍵自增,有hibernate來(lái)維護(hù),開(kāi)發(fā)時(shí)不使用
native:hilo + sequence + indeyity 自動(dòng)三選一策略
uuid:產(chǎn)生隨機(jī)字符串作為主鍵,主鍵類型必須為String類型

2.自然主鍵

assigned:自然主鍵生成策略,hibernate不會(huì)管理主鍵值,由開(kāi)發(fā)人員自己錄入

二、hibernate中的對(duì)象狀態(tài) 對(duì)象分為三種狀態(tài)

1.瞬時(shí)狀態(tài)

沒(méi)有id,沒(méi)有與session關(guān)聯(lián)

2.持久化狀態(tài)

有id,與session有關(guān)聯(lián)

3.游離|托管狀態(tài)

有id,沒(méi)有與session關(guān)聯(lián)

代碼

@Test
public void save() {
    Session session = HibernateUtils.openSession();
    
    Transaction tx = session.beginTransaction();

    Customer c = new Customer(); // 沒(méi)有id,沒(méi)有與session對(duì)象關(guān)聯(lián) => 瞬時(shí)狀態(tài)

    session.save(c); // 持久化狀態(tài),有id,與session對(duì)象關(guān)聯(lián)

    tx.commit();

    session.close(); // 游離|托管狀態(tài),有id,沒(méi)有關(guān)聯(lián)
}

三種狀態(tài)的轉(zhuǎn)換圖

三、hibernate一級(jí)緩存

緩存:提高效率,hibernate中的一級(jí)緩存也是為了提高操作數(shù)據(jù)庫(kù)的效率

四、hibernate中的事務(wù)

事務(wù)特性

a原子性
c一致性
i隔離性(事務(wù)并發(fā)的時(shí)候隔離級(jí)別)
d持久性

事務(wù)并發(fā)問(wèn)題

1、臟讀
2、不可重復(fù)讀
3、幻、虛讀

事務(wù)的隔離級(jí)別

讀未提交:出現(xiàn)的問(wèn)題1、2、3
讀已提交:出現(xiàn)的問(wèn)題2、3
可重復(fù)讀:出現(xiàn)的問(wèn)題3(mysql默認(rèn)級(jí)別)
串行化:沒(méi)有問(wèn)題,會(huì)極大的降低效率

如何在hibernate中指定隔離級(jí)別

在hibernate主配置中

hibernate.connection.isolation 1|2|4|8
數(shù)據(jù)庫(kù)中存儲(chǔ)級(jí)別是一個(gè)字節(jié)
0001 1  讀未提交
0010 2  讀已提交
0100 4  可重復(fù)讀
1000 8  串行化

項(xiàng)目中如何管理事務(wù)

業(yè)務(wù)開(kāi)始之前打開(kāi)事務(wù),業(yè)務(wù)執(zhí)行之后提交事務(wù),執(zhí)行過(guò)程中出現(xiàn)異常,回滾事務(wù)
在dao層操作數(shù)據(jù)庫(kù)需要用到session對(duì)象,在service控制事務(wù)也是使用session對(duì)象完成,我們要確保dao層和service層使用的是同一個(gè)session對(duì)象
在hibernate中確保使用同一個(gè)session的問(wèn)題,hibernate已經(jīng)幫我們解決了,我們開(kāi)發(fā)人員只需要調(diào)用sf.getCurrentSession()方法獲得與當(dāng)前線程綁定的session對(duì)象
注意:調(diào)用getCurrentSession()方法必須配合主配置中的一項(xiàng)配置,如下
    指定session與當(dāng)前線程綁定
    hibernate.current_session_context_class  thread
    通過(guò)getCurrentSession()方法獲得session對(duì)象,當(dāng)事務(wù)提交時(shí)session會(huì)自動(dòng)關(guān)閉,不需要手動(dòng)close關(guān)閉
五、hibernate中的批量查詢

HQ查詢-hibernate Query Language(支持多表查詢,但一般是不復(fù)雜時(shí)使用)

// 1、書(shū)寫(xiě)HQL語(yǔ)句
String hql = "form Customer"; // 查詢所有的Customer對(duì)象
// 2、根據(jù)HQL語(yǔ)句創(chuàng)建查詢對(duì)象
Query query = session.createQuery(hql);
// 3、根據(jù)對(duì)象獲得查詢結(jié)果
List list = query.list(); // 返回list結(jié)果
// query.uniqueResult();//返回唯一的查詢結(jié)果
// ?占位符
String hql = "form Customer  where cus_id = ?"; // 查詢所有的Customer對(duì)象
//設(shè)置參數(shù)
session.setParamter(0, 1)// hibernate ?占位符索引從0開(kāi)始,jdbc從1開(kāi)始
// :占位符
String hql = "form Customer  where cus_id = :cus_id";
session.setParamter("cus_id", 1)// hibernate :占位符直接輸入占位名字
// 分頁(yè)查詢
query.setFirstResult(0);// 第一條數(shù)據(jù)開(kāi)始的位置,0是索引
query.setMaxResult(20);// 設(shè)置查詢結(jié)果最大條數(shù),想當(dāng)與pagesize

Criteria查詢-hibernate自創(chuàng)的無(wú)語(yǔ)句查詢(單表查詢)

Criteria criteria = session.createCriteria(Customer.calss); //查詢所有的Customer對(duì)象
List list = 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的對(duì)象
// 聚合函數(shù)
criteria.setProjection(Projections.rowCount);// count函數(shù)
// 分頁(yè)查詢
criteria.setFirstResult(0);// 第一條數(shù)據(jù)開(kāi)始的位置,0是索引
criteria.setMaxResult(20);// 設(shè)置查詢結(jié)果最大條數(shù),想當(dāng)與pagesize

原生SQL查詢(復(fù)雜業(yè)務(wù)查詢)

// 書(shū)寫(xiě)sql語(yǔ)句
String sql = "select * from customer";
// 創(chuàng)建sql查詢對(duì)象
SQLQuery query = session.createSQLQuery(sql);
// 指定結(jié)果集封裝到指定對(duì)象中
query.addEntity(Customer.class);
// 調(diào)用方法查詢結(jié)果
List list = query.list();

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/76469.html

相關(guān)文章

  • 學(xué)Java編程需要注意的地方

    摘要:學(xué)編程真的不是一件容易的事不管你多喜歡或是多會(huì)編程,在學(xué)習(xí)和解決問(wèn)題上總會(huì)碰到障礙。熟練掌握核心內(nèi)容,特別是和多線程初步具備面向?qū)ο笤O(shè)計(jì)和編程的能力掌握基本的優(yōu)化策略。   學(xué)Java編程真的不是一件容易的事,不管你多喜歡或是多會(huì)Java編程,在學(xué)習(xí)和解決問(wèn)題上總會(huì)碰到障礙。工作的時(shí)間越久就越能明白這個(gè)道理。不過(guò)這倒是一個(gè)讓人進(jìn)步的機(jī)會(huì),因?yàn)槟阋恢辈粩嗟膶W(xué)習(xí)才能很好的解決你面前的難題...

    leanxi 評(píng)論0 收藏0
  • 慕課網(wǎng)_《Hibernate緩存策略》學(xué)習(xí)總結(jié)

    摘要:時(shí)間年月日星期二說(shuō)明本文部分內(nèi)容均來(lái)自慕課網(wǎng)。返回對(duì)象不同返回持久化實(shí)體類對(duì)象返回代理對(duì)象。與緩存的關(guān)系不同只緩存,但不使用緩存查詢緩存除外會(huì)使用緩存。 時(shí)間:2017年07月11日星期二說(shuō)明:本文部分內(nèi)容均來(lái)自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com教學(xué)源碼:無(wú)學(xué)習(xí)源碼:無(wú) 第一章:概述 1-1 概述 課程內(nèi)容 了解緩存 掌握Hibernate一級(jí)緩存的使用 掌握H...

    codergarden 評(píng)論0 收藏0
  • 慕課網(wǎng)_《Hibernate初探之多對(duì)多映射》學(xué)習(xí)總結(jié)

    時(shí)間:2017年07月11日星期二說(shuō)明:本文部分內(nèi)容均來(lái)自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com教學(xué)源碼:無(wú)學(xué)習(xí)源碼:https://github.com/zccodere/s... 第一章:應(yīng)用場(chǎng)景 1-1 多對(duì)多的應(yīng)用場(chǎng)景 案例分析:企業(yè)項(xiàng)目開(kāi)發(fā)過(guò)程中 一個(gè)項(xiàng)目可由多個(gè)員工參與開(kāi)發(fā) 一個(gè)員工可同時(shí)參與開(kāi)發(fā)多個(gè)項(xiàng)目 示意圖 showImg(https://segmentfau...

    caozhijian 評(píng)論0 收藏0
  • 慕課網(wǎng)_《基于SSH實(shí)現(xiàn)員工管理系統(tǒng)之框架整合篇》學(xué)習(xí)總結(jié)

    時(shí)間:2017年08月16日星期三說(shuō)明:本文部分內(nèi)容均來(lái)自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com教學(xué)源碼:無(wú)學(xué)習(xí)源碼:https://github.com/zccodere/s... 第一章:課程介紹 1-1 課程介紹 課程目錄 1.ssh知識(shí)點(diǎn)回顧 2.搭建ssm開(kāi)發(fā)環(huán)境 3.struts2整合spring 4.spring整合hibernate 5.案例:使用ssh框架開(kāi)發(fā)...

    icattlecoder 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<