激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - Java教程 - Hibernate三種狀態(tài)和Session常用的方法

Hibernate三種狀態(tài)和Session常用的方法

2020-08-28 11:00尋找現(xiàn)實(shí)扭曲力場(chǎng) Java教程

本文主要介紹了Hibernate三種狀態(tài)和Session常用的方法,具有很好的參考價(jià)值,下面跟著小編一起來看下吧

我們知道hibernate的核心就是對(duì)數(shù)據(jù)庫的操作,里面的核心接口就是org.hibernate.Session接口。要想對(duì)數(shù)據(jù)庫操作我們就要理清楚對(duì)象在整個(gè)操作中的所屬的狀態(tài)(Transient,Persistent,Detached)。就像馬士兵老師在視頻中所說的,我們并不必死摳這些字眼,我們通過自己編寫測(cè)試類就可以他們之間不同的區(qū)別。

其實(shí)三種狀態(tài)各自的不必總結(jié)那么多,只是一個(gè)重要的地方就是Transient狀態(tài)里面的對(duì)象是沒有id的。

Hibernate三種狀態(tài)和Session常用的方法

session中常用的方法是save(),update(),saveOrUpdate(),get(),load(),delete(),clear(),flush()這些

其中大學(xué)期間我其實(shí)對(duì)get和load方法都不是太熟悉,死記硬背才在考試中答題,現(xiàn)在想起完全沒有這個(gè)必要。我們可以根據(jù)配置好的hibernate環(huán)境來進(jìn)行junit測(cè)試。

首先我們進(jìn)行g(shù)et()方法進(jìn)行測(cè)試。

這里我們首先建立一個(gè)實(shí)體類,StudentEntity.Java 和數(shù)據(jù)庫中student所對(duì)應(yīng)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package com.cwnu.entities;
import javax.persistence.*;
import java.io.Serializable;
/**
 * Created by yangy on 2015/12/19.
 */
@Table(name = "student")
@Entity
public class StudentEntity implements Serializable{
 private int id;
 private String name;
 @Id
 @Column(name = "id")
 @GeneratedValue(strategy = GenerationType.AUTO)
 private int getId() {
  return id;
 }
 public void setId(int id) {
  this.id = id;
 }
 @Column(name = "name")
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
}

junit類都是idea編譯環(huán)境給我們配置好了,這里我們要注意,要使用getCurrentSession()來操作的話,我們首先要在Junit類中加上@Transaction注解,下面是相關(guān)的測(cè)試方法:

?
1
2
3
4
5
6
@Test
public void testGetOrLoad() {
 Session session = sessionFactory.getCurrentSession();
 StudentEntity student = (StudentEntity)session.get(StudentEntity.class, 1);
 //StudentEntity student_load = (StudentEntity)session.load(StudentEntity.class,1); String name = student.getName();
}

先測(cè)試get方法,我們發(fā)現(xiàn)一旦我們只是拿student這個(gè)實(shí)體操作,get方法是會(huì)輸出相關(guān)的sql查詢語句的,而我們注釋掉get方法,換load方法的話,load方法執(zhí)行拿student這個(gè)實(shí)體的數(shù)據(jù)是沒有輸出相應(yīng)的sql語句的。但是我們?cè)趯?duì)student類進(jìn)行操作的時(shí)候,這時(shí)才輸出相關(guān)的語句.

所以我們看出get()和load()之間的差別:

get()每次執(zhí)行都會(huì)執(zhí)行sql語句,不會(huì)延遲。load()方法只是會(huì)在我們對(duì)拿到的實(shí)體進(jìn)行操作的時(shí)候才去執(zhí)行查詢,拿到相應(yīng)的實(shí)體信息。load方法返回的是一個(gè)代理對(duì)象(馬士兵老師視頻)。無論是get還是load首先都會(huì)查一級(jí)緩存(session)中有沒有相應(yīng)的對(duì)應(yīng)值,如果沒有,再去數(shù)據(jù)庫進(jìn)行查找。

clear()方法是對(duì)session里面的緩存進(jìn)行了清理,測(cè)試這個(gè)方法我們可以根據(jù)下面的Junit進(jìn)行測(cè)試:

?
1
2
3
4
5
6
7
@Test
 public void testClear() {
  Session session = sessionFactory.getCurrentSession();
  session.get(StudentEntity.class,1);
  session.clear();
  session.get(StudentEntity.class,1);
 }

如果我們把session.clear()注釋掉的話,我們就可以看到只執(zhí)行了一條sql語句

flush()方法是是對(duì)數(shù)據(jù)庫同步的一條語句,執(zhí)行完這個(gè)后立即刷新到數(shù)據(jù)庫。粗淺的來看哈,其實(shí)里面還是有很多東西,比如FlushMode這個(gè)類,我們默認(rèn)設(shè)置的是FlushMode.AUTO,這個(gè)一般不修改,只是為了以后的性能調(diào)優(yōu)。其實(shí)我們?cè)趫?zhí)行事務(wù)的時(shí)候,事務(wù)完成之后它會(huì)幫我們執(zhí)行flush()方法。只是我們?cè)谶M(jìn)行大規(guī)模插入的時(shí)候,我們經(jīng)??梢钥吹较旅娴牟僮鳎?/p>

?
1
2
3
4
5
6
7
8
9
10
11
12
Session session = sessionFactory.openSession();
Transaction tx = session.beginTransaction(); 
for ( int i=0; i<100000; i++ ) { 
Customer customer = new Customer(.....); 
session.save(customer); 
if ( i % 20 == 0 ) {
//20, same as the JDBC batch size  
//flush a batch of inserts and release memory:  
session.flush(); 
session.clear(); 
}} 
tx.commit();session.close();

這樣做的目的就是避免大量插入,造成session里面內(nèi)存溢出,所以我們定時(shí)清理一下就可以避免這個(gè)問題。

 

以上就是本文的全部?jī)?nèi)容,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時(shí)也希望多多支持服務(wù)器之家!

原文鏈接:http://blog.csdn.net/pearyangyang/article/details/50359382

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧洲黄视频| 精品一区二区久久久久久按摩 | 依人九九宗合九九九 | 亚洲性综合网 | 精品国产91久久久久久久妲己 | 精品欧美一区二区精品久久 | 18视频在线观看娇喘 | 免费在线一级毛片 | 中文字幕专区高清在线观看 | 欧美日韩在线播放 | av电影院在线观看 | 久久久久久久久久美女 | 青热久思思| 成人综合一区二区 | 操操操操操 | 色七七网站 | 日韩字幕在线 | 日韩在线视频在线 | 毛片国产 | aa级黄色片 | 中文字幕一区在线观看视频 | 五月天堂av91久久久 | 色婷婷综合久久久久中文 | 日韩黄色在线播放 | 羞羞网站视频 | 香蕉成人在线视频 | 国产手机国产手机在线 | 欧美亚洲免费 | av在线免费网 | av观看网站 | 色中射 | 久久久久久久黄色片 | 午夜精品久久久久久毛片 | 久久伊人精品视频 | 免费黄色在线电影 | 国产一级二级毛片 | 国产欧美在线观看不卡一 | 国产乱淫av片免费 | 欧美一级高清片 | 国产精品午夜未成人免费观看 | 一区二区国产在线 |