目標:
一、hibernate查詢
二、hibernate對連線池的支援
三、二級快取
四、hibernate與struts小案例(專案中session的管理方式)
一、hibernate查詢
1. 查詢概述
1) get/load主鍵查詢
2) 物件導航查詢
3) hql查詢, hibernate query language hibernate 提供的物件導向的查詢語言。
4) criteria 查詢, 完全物件導向的查詢(query by criteria ,qbc)
5) sqlquery, 本地sql查詢
缺點:不能跨資料庫平台: 如果該了資料庫,sql語句有肯能要改
使用場景: 對於複雜sql,hql實現不了的情況,可以使用本地sql查詢。
hql查詢
private static sessionfactory sf;
static
/* * 1) get/load主鍵查詢
2) 物件導航查詢
3) hql查詢, hibernate query language hibernate 提供的物件導向的查詢語言。
4) criteria 查詢, 完全物件導向的查詢(query by criteria ,qbc)
5) sqlquery, 本地sql查詢
*/@test
public void all()
// g. 連線查詢
@test
public void join()
// g. 連線查詢 - 迫切連線
@test
public void fetch()
// hql查詢優化
@test
public void hql_other()
}criteria 查詢
//4) criteria 查詢,
@test
public void criteria()
sqlquery, 本地sql查詢
// 5) sqlquery, 本地sql查詢
// 不能跨資料庫平台: 如果該了資料庫,sql語句有肯能要改。
@test
public void sql()
2. 分頁查詢
分頁sql:
先查詢總記錄數,再分頁查詢。
// 分頁查詢
@test
public void all()
二、hibernate對連線池的支援
連線池,
作用: 管理連線;提公升連線的利用效率!
常用的連線池: c3p0連線池
hibernate 自帶的也有乙個連線池,且對c3p0連線池也有支援!
hbm 自帶連線池:
只維護乙個連線,比較簡陋。
可以檢視hibernate.properties檔案檢視連線池詳細配置:
#################################
### hibernate connection pool ###
#################################
hibernate.connection.pool_size 1 【hbm 自帶連線池: 只有乙個連線】
###########################
### c3p0 connection pool### 【hbm對c3p0連線池支援】
###########################
#hibernate.c3p0.max_size 2 最大連線數
#hibernate.c3p0.min_size 2 最小連線數
#hibernate.c3p0.timeout 5000 超時時間
#hibernate.c3p0.max_statements 100 最大執行的命令的個數
#hibernate.c3p0.idle_test_period 3000 空閒測試時間
#hibernate.c3p0.acquire_increment 2 連線不夠用的時候, 每次增加的連線數
#hibernate.c3p0.validate false
【hbm對c3p0連線池支援, 核心類】
告訴hib使用的是哪乙個連線池技術。
#hibernate.connection.provider_class org.hibernate.connection.c3p0connectionprovider
org.hibernate.connection.c3p0connectionprovider
245000
1030000
2三、二級快取
hibernate提供的快取
有一級快取、二級快取。 目的是為了減少對資料庫的訪問次數,提公升程式執行效率!
一級快取:
基於session的快取,快取內容只在當前session有效,session關閉,快取內容失效!
特點:
作用範圍較小! 快取的事件短。
快取效果不明顯。
概述二級快取:
hibernate提供了基於應用程式級別的快取, 可以跨多個session,即不同的session都可以訪問快取資料。 這個換存也叫二級快取。
hibernate提供的二級快取有預設的實現,且是一種可插配的快取框架!如果使用者想用二級快取,只需要在hibernate.cfg.xml中配置即可; 不想用,直接移除,不影響**。
如果使用者覺得hibernate提供的框架框架不好用,自己可以換其他的快取框架或自己實現快取框架都可以。
使用二級快取
檢視hibernate.properties配置檔案,二級快取如何配置?
##########################
### second-level cache ###
##########################
#hibernate.cache.use_second_level_cache false【二級快取預設不開啟,需要手動開啟】
#hibernate.cache.use_query_cache true 【開啟查詢快取】
## choose a cache implementation 【二級快取框架的實現】
#hibernate.cache.provider_class org.hibernate.cache.ehcacheprovider
#hibernate.cache.provider_class org.hibernate.cache.emptycacheprovider
hibernate.cache.provider_class org.hibernate.cache.hashtablecacheprovider 預設實現
#hibernate.cache.provider_class org.hibernate.cache.treecacheprovider
#hibernate.cache.provider_class org.hibernate.cache.oscacheprovider
#hibernate.cache.provider_class org.hibernate.cache.swarmcacheprovider
二級快取,使用步驟
1) 開啟二級快取
2)指定快取框架
3)指定那些類加入二級快取
4)測試
測試二級快取!
快取策略
放入二級快取的物件,唯讀;
非嚴格的讀寫
讀寫; 放入二級快取的物件可以讀、寫;
(基於事務的策略)
集合快取
查詢快取
list() 預設情況只會放入快取,不會從一級快取中取!
使用查詢快取,可以讓list()查詢從二級快取中取!
完整案例:
hibernate.cfg.xml
true
org.hibernate.cache.hashtablecacheprovider
true
private static sessionfactory sf;
static
// 1. 測試二級快取的使用
// 沒有/有用 二級快取
@test
public void testcache()
@test
public void listcache()
}四、專案中session的管理方式
session的建立方式:
@test
public void testsession() throws exception
四、專案應用
重點:1. struts與hibernate一起使用完成案例開發!
2. open session in view 模式應用
需求: 顯示部門資訊,部門下的所有員工!
【要求:員工資訊在jsp頁面顯示,使用懶載入完成!】
資料庫設計:
t_dept/ t_employee
專案框架搭建
a. 引用的jar檔案
struts相關jar檔案
hibernate相關jar檔案
c3p0連線池/資料庫驅動包
b. 配置
struts.xml
hibernate.cfg.xml
web.xml 【struts核心過濾器】
c. 公用類
hibernate連線池引數說明
池配置屬性 所指定的內容 initialsize 池啟動時建立的連線數量 maxactive 同一時間可從池中分配的最多連線數,如果設定為0,表示無限制 maxidle 池裡不會被釋放的最多空閒連線數,如果設定為0,表示無限制 maxopenpreparedstatements 在同一時間能夠從語句...
Hibernate對連線池的支援
連線池 作用 管理連線 提公升連線的利用效率!常用的連線池 c3p0連線池 hibernate 自帶的也有乙個連線池,且對 c3p0 連線池也有支援!hbm 自帶連線池 只維護乙個連線,比較簡陋。可以檢視hibernate.properties 檔案檢視連線池詳細配置 hibernate conne...
hibernate配置和JDBC連線池
這是hiberante.cfg.xml的標頭檔案,固定形式,否則無法解析 配置資訊 jdbc配置專案 資料庫使用者名稱 sa 資料庫密碼 sa123 連線字串 jdbc jtds sqlserver localhost 1433 tjp db 驅動類 net.sourceforge.jtds.jdb...