day35hibernate查询连接池Word文档下载推荐.docx

上传人:b****3 文档编号:8116747 上传时间:2023-05-10 格式:DOCX 页数:17 大小:21.17KB
下载 相关 举报
day35hibernate查询连接池Word文档下载推荐.docx_第1页
第1页 / 共17页
day35hibernate查询连接池Word文档下载推荐.docx_第2页
第2页 / 共17页
day35hibernate查询连接池Word文档下载推荐.docx_第3页
第3页 / 共17页
day35hibernate查询连接池Word文档下载推荐.docx_第4页
第4页 / 共17页
day35hibernate查询连接池Word文档下载推荐.docx_第5页
第5页 / 共17页
day35hibernate查询连接池Word文档下载推荐.docx_第6页
第6页 / 共17页
day35hibernate查询连接池Word文档下载推荐.docx_第7页
第7页 / 共17页
day35hibernate查询连接池Word文档下载推荐.docx_第8页
第8页 / 共17页
day35hibernate查询连接池Word文档下载推荐.docx_第9页
第9页 / 共17页
day35hibernate查询连接池Word文档下载推荐.docx_第10页
第10页 / 共17页
day35hibernate查询连接池Word文档下载推荐.docx_第11页
第11页 / 共17页
day35hibernate查询连接池Word文档下载推荐.docx_第12页
第12页 / 共17页
day35hibernate查询连接池Word文档下载推荐.docx_第13页
第13页 / 共17页
day35hibernate查询连接池Word文档下载推荐.docx_第14页
第14页 / 共17页
day35hibernate查询连接池Word文档下载推荐.docx_第15页
第15页 / 共17页
day35hibernate查询连接池Word文档下载推荐.docx_第16页
第16页 / 共17页
day35hibernate查询连接池Word文档下载推荐.docx_第17页
第17页 / 共17页
亲,该文档总共17页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

day35hibernate查询连接池Word文档下载推荐.docx

《day35hibernate查询连接池Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《day35hibernate查询连接池Word文档下载推荐.docx(17页珍藏版)》请在冰点文库上搜索。

day35hibernate查询连接池Word文档下载推荐.docx

sf=newConfiguration()

.configure()

.addClass(Dept.class)

.addClass(Employee.class)//测试时候使用

.buildSessionFactory();

}

/*

*1)Get/load主键查询

2)对象导航查询

3)HQL查询,HibernateQuerylanguagehibernate提供的面向对象的查询语言。

4)Criteria查询,完全面向对象的查询(QueryByCriteria,QBC)

5)SQLQuery,本地SQL查询

*/

@Test

publicvoidall(){

Sessionsession=sf.openSession();

session.beginTransaction();

//1)主键查询

//Deptdept=(Dept)session.get(Dept.class,12);

//Deptdept=(Dept)session.load(Dept.class,12);

//2)对象导航查询

//System.out.println(dept.getDeptName());

//System.out.println(dept.getEmps());

//3)HQL查询

//注意:

使用hql查询的时候auto-import="

true"

要设置true,

//如果是false,写hql的时候,要指定类的全名

//Queryq=session.createQuery("

fromDept"

);

//System.out.println(q.list());

//a.查询全部列

//OK

select*fromDept"

//NOK,错误,不支持*

selectdfromDeptd"

//OK

//b.查询指定的列【返回对象数据Object[]】

selectd.deptId,d.deptNamefromDeptd"

//c.查询指定的列,自动封装为对象【必须要提供带参数构造器】

selectnewDept(d.deptId,d.deptName)fromDeptd"

//d.条件查询:

一个条件/多个条件andor/betweenand/模糊查询

//条件查询:

占位符

fromDeptdwheredeptName=?

"

//q.setString(0,"

财务部"

//q.setParameter(0,"

命名参数

fromDeptdwheredeptId=:

myIdordeptName=:

name"

//q.setParameter("

myId"

12);

"

//范围

fromDeptdwheredeptIdbetween?

and?

//q.setParameter(0,1);

//q.setParameter(1,20);

//模糊

fromDeptdwheredeptNamelike?

%部%"

//e.聚合函数统计

selectcount(*)fromDept"

//Longnum=(Long)q.uniqueResult();

//System.out.println(num);

//f.分组查询

//--统计t_employee表中,每个部门的人数

//数据库写法:

SELECTdept_id,COUNT(*)FROMt_employeeGROUPBYdept_id;

//HQL写法

selecte.dept,count(*)fromEmployeeegroupbye.dept"

session.getTransaction().commit();

session.close();

//g.连接查询

publicvoidjoin(){

//1)内连接【映射已经配置好了关系,关联的时候,直接写对象的属性即可】

fromDeptdinnerjoind.emps"

//2)左外连接

fromDeptdleftjoind.emps"

//3)右外连接

Queryq=session.createQuery("

fromEmployeeerightjoine.dept"

q.list();

//g.连接查询-迫切连接

publicvoidfetch(){

//1)迫切内连接【使用fetch,会把右表的数据,填充到左表对象中!

fromDeptdinnerjoinfetchd.emps"

//q.list();

//2)迫切左外连接

fromDeptdleftjoinfetchd.emps"

//HQL查询优化

publicvoidhql_other(){

//HQL写死

fromDeptdwheredeptId<

10"

//HQL放到映射文件中

Queryq=session.getNamedQuery("

getAllDept"

q.setParameter(0,10);

System.out.println(q.list());

}

Criteria查询

//4)Criteria查询,

publicvoidcriteria(){

Criteriacriteria=session.createCriteria(Employee.class);

//构建条件

criteria.add(Restrictions.eq("

empId"

12));

//criteria.add(Restrictions.idEq(12));

//主键查询

System.out.println(criteria.list());

SQLQuery,本地SQL查询

//5)SQLQuery,本地SQL查询

//不能跨数据库平台:

如果该了数据库,sql语句有肯能要改。

publicvoidsql(){

SQLQueryq=session.createSQLQuery("

SELECT*FROMt_Deptlimit5;

.addEntity(Dept.class);

//也可以自动封装

2.分页查询

分页SQL:

先查询总记录数,再分页查询。

//分页查询

fromEmployee"

//从记录数

ScrollableResultsscroll=q.scroll();

//得到滚动的结果集

scroll.last();

//滚动到最后一行

inttotalCount=scroll.getRowNumber()+1;

//得到滚到的记录数,即总记录数

//设置分页参数

q.setFirstResult(0);

q.setMaxResults(3);

//查询

System.out.println("

总记录数:

+totalCount);

二、hibernate对连接池的支持

连接池,

作用:

管理连接;

提升连接的利用效率!

常用的连接池:

C3P0连接池

Hibernate自带的也有一个连接池,且对C3P0连接池也有支持!

Hbm自带连接池:

只维护一个连接,比较简陋。

可以查看hibernate.properties文件查看连接池详细配置:

#################################

###HibernateConnectionPool###

hibernate.connection.pool_size1【Hbm自带连接池:

只有一个连接】

###########################

###C3P0ConnectionPool###【Hbm对C3P0连接池支持】

#hibernate.c3p0.max_size2最大连接数

#hibernate.c3p0.min_size2最小连接数

#hibernate.c3p0.timeout5000超时时间

#hibernate.c3p0.max_statements100最大执行的命令的个数

#hibernate.c3p0.idle_test_period3000空闲测试时间

#hibernate.c3p0.acquire_increment2连接不够用的时候,每次增加的连接数

#hibernate.c3p0.validatefalse

【Hbm对C3P0连接池支持,核心类】

告诉hib使用的是哪一个连接池技术。

#hibernate.connection.provider_classorg.hibernate.connection.C3P0ConnectionProvider

Hibernate.cfg.xml中增加连接池相关配置:

<

!

--【连接池配置】-->

<

--配置连接驱动管理类-->

propertyname="

hibernate.connection.provider_class"

>

org.hibernate.connection.C3P0ConnectionProvider<

/property>

--配置连接池参数信息-->

hibernate.c3p0.min_size"

2<

hibernate.c3p0.max_size"

4<

hibernate.c3p0.timeout"

5000<

hibernate.c3p0.max_statements"

10<

hibernate.c3p0.idle_test_period"

30000<

hibernate.c3p0.acquire_increment"

三、二级缓存

Hibernate提供的缓存

有一级缓存、二级缓存。

目的是为了减少对数据库的访问次数,提升程序执行效率!

一级缓存:

基于Session的缓存,缓存内容只在当前session有效,session关闭,缓存内容失效!

特点:

作用范围较小!

缓存的事件短。

缓存效果不明显。

概述

二级缓存:

Hibernate提供了基于应用程序级别的缓存,可以跨多个session,即不同的session都可以访问缓存数据。

这个换存也叫二级缓存。

Hibernate提供的二级缓存有默认的实现,且是一种可插配的缓存框架!

如果用户想用二级缓存,只需要在hibernate.cfg.xml中配置即可;

不想用,直接移除,不影响代码。

如果用户觉得hibernate提供的框架框架不好用,自己可以换其他的缓存框架或自己实现缓存框架都可以。

使用二级缓存

查看hibernate.properties配置文件,二级缓存如何配置?

##########################

###Second-levelCache###

#hibernate.cache.use_second_level_cachefalse【二级缓存默认不开启,需要手动开启】

#hibernate.cache.use_query_cachetrue【开启查询缓存】

##chooseacacheimplementation【二级缓存框架的实现】

#hibernate.cache.provider_classorg.hibernate.cache.EhCacheProvider

#hibernate.cache.provider_classorg.hibernate.cache.EmptyCacheProvider

hibernate.cache.provider_classorg.hibernate.cache.HashtableCacheProvider默认实现

#hibernate.cache.provider_classorg.hibernate.cache.TreeCacheProvider

#hibernate.cache.provider_classorg.hibernate.cache.OSCacheProvider

#hibernate.cache.provider_classorg.hibernate.cache.SwarmCacheProvider

二级缓存,使用步骤

1)开启二级缓存

2)指定缓存框架

3)指定那些类加入二级缓存

4)测试

测试二级缓存!

缓存策略

class-cacheusage="

read-only"

/>

放入二级缓存的对象,只读;

<

nonstrict-read-write"

非严格的读写

read-write"

读写;

放入二级缓存的对象可以读、写;

transactional"

(基于事务的策略)

集合缓存

--集合缓存[集合缓存的元素对象,也加加入二级缓存]-->

collection-cache

usage="

collection="

cn.itcast.b_second_cache.Dept.emps"

查询缓存

list()默认情况只会放入缓存,不会从一级缓存中取!

使用查询缓存,可以让list()查询从二级缓存中取!

完整案例:

Hibernate.cfg.xml

--******************【二级缓存配置】******************-->

--a.开启二级缓存-->

hibernate.cache.use_second_level_cache"

true<

--b.指定使用哪一个缓存框架(默认提供的)-->

hibernate.cache.provider_class"

org.hibernate.cache.HashtableCacheProvider<

--开启查询缓存-->

hibernate.cache.use_query_cache"

--c.指定哪一些类,需要加入二级缓存-->

class="

cn.itcast.b_second_cache.Dept"

cn.itcast.b_second_cache.Employee"

collection-cacheusage="

App测试类

//1.测试二级缓存的使用

//没有/有用二级缓存

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2