hibernate 查询、二级缓存、连接池

查询:

1) 主键查询

Dept dept =  (Dept) session.get(Dept.class, 12);

Dept dept =  (Dept) session.load(Dept.class, 12);

2) 对象导航查询

Dept dept =  (Dept) session.get(Dept.class, 12);

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

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

3)      HQL查询

注意:使用hql查询的时候 auto-import="true" 要设置true,

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

Query q = session.createQuery("from Dept");

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

a. 查询全部列

Query q = session.createQuery("from Dept");  OK

Query q = session.createQuery("select * from Dept");  NOK, 错误,不支持*

Query q = session.createQuery("select d from Dept d");   OK

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

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

Query q = session.createQuery("select d.deptId,d.deptName from Dept d");

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

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

Query q = session.createQuery("select new Dept(d.deptId,d.deptName) from Dept d");

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

d. 条件查询: 一个条件/多个条件and or/between and/模糊查询

条件查询: 占位符

Query q = session.createQuery("from Dept d where deptName=?");

q.setString(0, "财务部");

q.setParameter(0, "财务部");

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

条件查询: 命名参数

Query q = session.createQuery("from Dept d where deptId=:myId or deptName=:name");

q.setParameter("myId", 12);

q.setParameter("name", "财务部");

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

范围

Query q = session.createQuery("from Dept d where deptId between ? and ?");

q.setParameter(0, 1);

q.setParameter(1, 20);

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

模糊

Query q = session.createQuery("from Dept d where deptName like ?");

q.setString(0, "%部%");

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

e. 聚合函数统计

Query q = session.createQuery("select count(*) from Dept");

Long num = (Long) q.uniqueResult();

System.out.println(num);

f. 分组查询

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

数据库写法:SELECT dept_id,COUNT(*) FROM t_employee GROUP BY dept_id;

HQL写法

Query q = session.createQuery("select e.dept, count(*) from Employee e group by e.dept");

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

连接查询

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

Query q = session.createQuery("from Dept d inner join d.emps");

2) 左外连接

Query q = session.createQuery("from Dept d left join d.emps");

3) 右外连接

Query q = session.createQuery("from Employee e right join e.dept");

q.list();

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

Query q = session.createQuery("from Dept d inner join fetch d.emps");

q.list();

2) 迫切左外连接

Query q = session.createQuery("from Dept d left join fetch d.emps");

q.list();

HQL 放到映射文件中

Query q = session.getNamedQuery("getAllDept");

q.setParameter(0, 10);

分页查询:

// 从记录数

ScrollableResults scroll = q.scroll();  // 得到滚动的结果集

scroll.last();                                                            //  滚动到最后一行

int totalCount = scroll.getRowNumber() + 1;// 得到滚到的记录数,即总记录数

// 设置分页参数

q.setFirstResult(0);

q.setMaxResults(3);

用线程的方式创建session

//getCurrentSession 创建或者获取session

// 线程的方式创建session

// 一定要配置:

<property name="hibernate.current_session_context_class">thread</property>

Session session3 = sf.getCurrentSession();// 创建session,绑定到线程

Session session4 = sf.getCurrentSession();// 从当前访问线程获取session

【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

二级缓存:

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

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

## choose a cache implementation                   【二级缓存框架的实现】

二级缓存,使用步骤

1) 开启二级缓存

2)指定缓存框架

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

<class-cache usage="read-only"/>     放入二级缓存的对象,只读;

<class-cache usage="nonstrict-read-write"/>  非严格的读写

<class-cache usage="read-write"/>    读写; 放入二级缓存的对象可以读、写;

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

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

<property name="hibernate.cache.use_second_level_cache">true</property>

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

<property name="hibernate.cache.provider_class">org.hibernate.cache.HashtableCacheProvider</property>

<!-- 开启查询缓存 -->

<property name="hibernate.cache.use_query_cache">true</property>

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

<class-cache usage="read-write" class="cn.itcast.b_second_cache.Dept"/>

<class-cache usage="read-only" class="cn.itcast.b_second_cache.Employee"/>

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

<collection-cache usage="read-write" collection="cn.itcast.b_second_cache.Dept.emps"/>

hibernate 查询、二级缓存、连接池的更多相关文章

  1. Java面试题:Hibernate的二级缓存与Hibernate多表查询

    我们来看两个有关Java框架之Hibernate的面试题,这是关于Hibernate的常考知识点. 1.请介绍一下Hibernate的二级缓存 解题按照以下思路来回答: (1)首先说清楚什么是缓存: ...

  2. 【Hibernate】 二级缓存及查询缓存

    一.Hibernate的二级缓存 1.1 类缓存区特点 缓存的是对象的散装的数据. 图一 Hibernate的二级缓存的散装数据 1.2 集合缓存区的特点: 缓存的是对象的id.需要依赖类缓冲区的配置 ...

  3. Hibernate整合C3P0实现连接池

    Hibernate整合C3P0实现连接池 hibernate中可以使用默认的连接池,无论功能与性能都不如C3PO(网友反映,我没有测试过),C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI ...

  4. Hibernate之二级缓存

                                                            Hibernate之二级缓存 一.简介 Gaving King曾经对别人说,hibern ...

  5. hibernate(九) 二级缓存和事务级别详讲

    序言 这算是hibernate的最后一篇文章了,下一系列会讲解Struts2的东西,然后说完Struts2,在到Spring,然后在写一个SSH如何整合的案例.之后就会在去讲SSM,在之后我自己的个人 ...

  6. hibernate的二级缓存

    缓存(Cache): 计算机领域非常通用的概念.它介于应用程序和永久性数据存储源(如硬盘上的文件或者数据库)之间,其作用是降低应用程序直接读写永久性数据存储源的频率,从而提高应用的运行性能.缓存中的数 ...

  7. 不要依赖hibernate的二级缓存

    一.hibernate的二级缓存   如果开启了二级缓存,hibernate在执行任何一次查询的之后,都会把得到的结果集放到缓存中,缓存结构可以看作是一个hash table,key是数据库记录的id ...

  8. SSH整合缓存之-Memcached作为hibernate的二级缓存

    Hibernate本身不提供二级缓存,所以需要使用第三方插件来作为二级缓存:本次使用memcached作为Hiberbate的二级缓存:添加步骤如下: 一.需要安装memcached服务端 1. 下载 ...

  9. Hibernate的二级缓存策略

    Hibernate的二级缓存策略的一般过程如下: 1) 条件查询的时候,总是发出一条select * from table_name where …. (选择所有字段)这样的SQL语句查询数据库,一次 ...

  10. 【SSH网上商城项目实战16】Hibernate的二级缓存处理首页的热门显示

    转自:https://blog.csdn.net/eson_15/article/details/51405911 网上商城首页都有热门商品,那么这些商品的点击率是很高的,当用户点击某个热门商品后需要 ...

随机推荐

  1. extend

    这段时间在写一个预览图片的插件, 被我老大说了无数次了,不多说啥,说多了都是泪 昨天看着我的代码他说你用了extend,那你知道是什么意思吗 我只知道是扩展的意思,瞬间觉得自己弱爆了 真的 然后今天看 ...

  2. JavaScript 左右上下自动晃动,自动移动。

    最近做了一个项目,本来用css3动画做的,不兼容ie,用js做了个,分享给大家. 代码修改了下,上下左右四个模块,顺时针转动. <!DOCTYPE html> <html> & ...

  3. 【leetcode】Binary Tree Postorder Traversal (hard) ☆

    二叉树的后序遍历 用标记右子树vector的方法 vector<int> postorderTraversal(TreeNode *root) { vector<int> an ...

  4. [ASP.NET] 下一代ASP.NET开发规范:OWIN

    今天投简历 准备面试了... 本节目录: OWIN简介 OWIN规范 Katana Hello World(3种Host) 自定义Middleware OWIN简介 OWIN(Open Web Int ...

  5. IOS开发之—— iOS 支付 [支付宝、银联、微信]

    支付宝iOSsdk官方下载sdk地址:https://b.alipay.com/order/productDetail.htm?productId=2013080604609654&tabId ...

  6. Daas

    联想到这些年遇到的各种客户使用桌面虚拟化的场景,深有感触.桌面虚拟化技术并不一定适合所有的用户和场景,也不仅仅只是技术方面的问题.加强安全的方法有千万种,为何此客户情守桌面虚拟化呢?某客户已经规模化实 ...

  7. 关于 Java 对象序列化您不知道的 5 件事

    数年前,当和一个软件团队一起用 Java 语言编写一个应用程序时,我体会到比一般程序员多知道一点关于 Java 对象序列化的知识所带来的好处. 关于本系列 您觉得自己懂 Java 编程?事实上,大多数 ...

  8. 遗传算法matlab实现

    我是小鸭酱,博客地址为:http://www.cnblogs.com/xiaoyajiang 以下运用MATLAB实现遗传算法:   clc clear   %参数 a = 0 ; b = 4 ; e ...

  9. 使用JavaScript把页面上的表格导出为Excel文件

    如果在页面上展示了一个数据表格,而用户想把这个表格导出为Excel文件,那么在要求不高的情况下,可以不通过服务器生成表格,而是直接利用JavaScript的Blob和Object URL特性将表格导出 ...

  10. wdc网站部署问题

    最近公司新买了一个服务器,将项目迁移到新服务器上,按照wdcp安装方法,部署了lnamp环境,具体方法如下: 安装方法1 只安装wdcp面板看看wget http://down.wdlinux.cn/ ...