国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

hibernate學習概要

Noodles / 1186人閱讀

摘要:一中實體規則實體類創建的注意事項持久化類提供無參數構造成員變量私有,提供方法訪問,需提供屬性屬性就是方法持久化類中的屬性,應盡量使用包裝類型可以表示,在插如數據庫中有作用持久化類需要提供主鍵屬性與數據庫中主鍵列對應不需要修飾原因使用代理生成

一、hibernate中實體規則 實體類創建的注意事項

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

主鍵類型

1.自然主鍵(少見)

表的業務列中,有某業務列符合,必須有且不重復的特征時,該列可以作為主鍵使用

2.代理主鍵(常見)

表的業務列中,沒有某業務列符合,必須有且不重復的特征時,創建一個沒有業務意義的列做為主鍵
主鍵生成策略

1.代理主鍵

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

2.自然主鍵

assigned:自然主鍵生成策略,hibernate不會管理主鍵值,由開發人員自己錄入

二、hibernate中的對象狀態 對象分為三種狀態

1.瞬時狀態

沒有id,沒有與session關聯

2.持久化狀態

有id,與session有關聯

3.游離|托管狀態

有id,沒有與session關聯

代碼

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

    Customer c = new Customer(); // 沒有id,沒有與session對象關聯 => 瞬時狀態

    session.save(c); // 持久化狀態,有id,與session對象關聯

    tx.commit();

    session.close(); // 游離|托管狀態,有id,沒有關聯
}

三種狀態的轉換圖

三、hibernate一級緩存

緩存:提高效率,hibernate中的一級緩存也是為了提高操作數據庫的效率

四、hibernate中的事務

事務特性

a原子性
c一致性
i隔離性(事務并發的時候隔離級別)
d持久性

事務并發問題

1、臟讀
2、不可重復讀
3、幻、虛讀

事務的隔離級別

讀未提交:出現的問題1、2、3
讀已提交:出現的問題2、3
可重復讀:出現的問題3(mysql默認級別)
串行化:沒有問題,會極大的降低效率

如何在hibernate中指定隔離級別

在hibernate主配置中

hibernate.connection.isolation 1|2|4|8
數據庫中存儲級別是一個字節
0001 1  讀未提交
0010 2  讀已提交
0100 4  可重復讀
1000 8  串行化

項目中如何管理事務

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

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

// 1、書寫HQL語句
String hql = "form Customer"; // 查詢所有的Customer對象
// 2、根據HQL語句創建查詢對象
Query query = session.createQuery(hql);
// 3、根據對象獲得查詢結果
List list = query.list(); // 返回list結果
// query.uniqueResult();//返回唯一的查詢結果
// ?占位符
String hql = "form Customer  where cus_id = ?"; // 查詢所有的Customer對象
//設置參數
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);// 第一條數據開始的位置,0是索引
query.setMaxResult(20);// 設置查詢結果最大條數,想當與pagesize

Criteria查詢-hibernate自創的無語句查詢(單表查詢)

Criteria criteria = session.createCriteria(Customer.calss); //查詢所有的Customer對象
List list = criteria.list();// 返回list結果
// criteria.uniqueResult();// 返回唯一查詢結果
// 條件查詢
// >              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的對象
// 聚合函數
criteria.setProjection(Projections.rowCount);// count函數
// 分頁查詢
criteria.setFirstResult(0);// 第一條數據開始的位置,0是索引
criteria.setMaxResult(20);// 設置查詢結果最大條數,想當與pagesize

原生SQL查詢(復雜業務查詢)

// 書寫sql語句
String sql = "select * from customer";
// 創建sql查詢對象
SQLQuery query = session.createSQLQuery(sql);
// 指定結果集封裝到指定對象中
query.addEntity(Customer.class);
// 調用方法查詢結果
List list = query.list();

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/76469.html

相關文章

  • 學Java編程需要注意的地方

    摘要:學編程真的不是一件容易的事不管你多喜歡或是多會編程,在學習和解決問題上總會碰到障礙。熟練掌握核心內容,特別是和多線程初步具備面向對象設計和編程的能力掌握基本的優化策略。   學Java編程真的不是一件容易的事,不管你多喜歡或是多會Java編程,在學習和解決問題上總會碰到障礙。工作的時間越久就越能明白這個道理。不過這倒是一個讓人進步的機會,因為你要一直不斷的學習才能很好的解決你面前的難題...

    leanxi 評論0 收藏0
  • 慕課網_《Hibernate緩存策略》學習總結

    摘要:時間年月日星期二說明本文部分內容均來自慕課網。返回對象不同返回持久化實體類對象返回代理對象。與緩存的關系不同只緩存,但不使用緩存查詢緩存除外會使用緩存。 時間:2017年07月11日星期二說明:本文部分內容均來自慕課網。@慕課網:http://www.imooc.com教學源碼:無學習源碼:無 第一章:概述 1-1 概述 課程內容 了解緩存 掌握Hibernate一級緩存的使用 掌握H...

    codergarden 評論0 收藏0
  • 慕課網_《Hibernate初探之多對多映射》學習總結

    時間:2017年07月11日星期二說明:本文部分內容均來自慕課網。@慕課網:http://www.imooc.com教學源碼:無學習源碼:https://github.com/zccodere/s... 第一章:應用場景 1-1 多對多的應用場景 案例分析:企業項目開發過程中 一個項目可由多個員工參與開發 一個員工可同時參與開發多個項目 示意圖 showImg(https://segmentfau...

    caozhijian 評論0 收藏0
  • 慕課網_《基于SSH實現員工管理系統之框架整合篇》學習總結

    時間:2017年08月16日星期三說明:本文部分內容均來自慕課網。@慕課網:http://www.imooc.com教學源碼:無學習源碼:https://github.com/zccodere/s... 第一章:課程介紹 1-1 課程介紹 課程目錄 1.ssh知識點回顧 2.搭建ssm開發環境 3.struts2整合spring 4.spring整合hibernate 5.案例:使用ssh框架開發...

    icattlecoder 評論0 收藏0

發表評論

0條評論

Noodles

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<