实体类 :

  package cn.happy.entity;
public class Emp {
private Integer empNo;
private String empName;
public Integer getEmpNo() {
return empNo;
}
public void setEmpNo(Integer empNo) {
this.empNo = empNo;
}
public String getEmpName() {
return empName;
}
public void setEmpName(String empName) {
this.empName = empName;
}
}

工具类:

1 package cn.happy.util;
2
3 import org.hibernate.Session;
4 import org.hibernate.SessionFactory;
5 import org.hibernate.cfg.Configuration;
6
7 public class HibernateUtil {
8 private static final ThreadLocal sessionTL=new ThreadLocal();
9 private static Configuration cf;
10 private static final SessionFactory factory;
11 static{
12 try {
13 cf=new Configuration().configure();
14 factory=cf.buildSessionFactory();
15 } catch (Exception e) {
16 throw new ExceptionInInitializerError(e);
17 }
18 }
19 public static Session getSession()
20 {
21 //sessionTL的get()方法根据当前线程返回其对应的线程内部变量,
22 //也就是我们需要的Session,多线程情况下共享数据库连接是不安全的。
23 //ThreadLocal保证了每个线程都有自己的Session。
24 Session session = (Session)sessionTL.get();
25 //如果session为null,则打开一个新的session
26 if (session==null) {
27 //创建一个数据库连接对象session
28 session=factory.openSession();
29 //保存该数据库连接session到ThreadLocal中。
30 sessionTL.set(session);
31
32 }
33 //如果当前线程已经访问过数据库了,
34 //则从sessionTL中get()就可以获取该线程上次获取过的数据库连接对象。
35 return session;
36 }
37 /**
38 * 关闭Session
39 */
40 public static void closeSession()
41 {
42 Session session =(Session)sessionTL.get();
43 sessionTL.set(null);
44 session.close();
45 }
46
47 }

测试类:

 package cn.happy.test;

 import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test; import cn.happy.entity.Emp;
import cn.happy.util.HibernateUtil; public class STest {
Transaction tx;
Session session;
Transaction tx2;
Session session2;
@Test
public void testBulk(){
session = HibernateUtil.getSession();
tx=session.beginTransaction();
Emp emp = (Emp)session.get(Emp.class, 1);
System.out.println(emp);
tx.commit();
HibernateUtil.closeSession();
System.out.println("===================");
session2 = HibernateUtil.getSession();
tx2=session2.beginTransaction();
Emp emp2 = (Emp)session2.get(Emp.class, 1);
System.out.println(emp2);
tx2.commit();
HibernateUtil.closeSession();
}
}

小配置:

 <?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="cn.happy.entity">
<class name="Emp" table="Emp">
<cache usage="read-write"/>
<id name="empNo" type="int" column="EMPNO">
<generator class="native">
</generator>
</id>
<property name="empName" type="string" column="EMPNAME"/>
</class>
</hibernate-mapping>

大配置:

 <?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="connection.driver_class">oracle.jdbc.OracleDriver</property>
<property name="connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property>
<property name="connection.username">zc</property>
<property name="connection.password">zc</property>
<!-- 输出所有 SQL 语句到控制台。 -->
<property name="hibernate.show_sql">true</property>
<!-- 配置Hibernate.cfg.xml开启二级缓存。 -->
<property name="hibernate.cache.use_second_level_cache">true</property>
<!-- 配置二级缓存的供应商 -->
<property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property> <!-- 在 log 和 console 中打印出更漂亮的 SQL。 -->
<property name="hibernate.format_sql">true</property>
<!-- 自动生成数据表,update/create -->
<property name="hbm2ddl.auto">update</property>
<!-- 方言 -->
<property name="hibernate.dialect"> org.hibernate.dialect.Oracle10gDialect</property>
<!-- 关联小配置 --> <mapping resource="cn/happy/entity/Emp.hbm.xml"/>
<class-cache usage="read-write" class="cn.happy.entity.Emp"/>
</session-factory>
</hibernate-configuration>

Jar包导入:

package cn.happy.entity;
  public class Emp {

    private Integer empNo;

    private String empName;

    public Integer getEmpNo() {return empNo;}

    public void setEmpNo(Integer empNo) {this.empNo = empNo;}

    public String getEmpName() {return empName;}

    public void setEmpName(String empName) {this.empName = empName;}
  }

Hibernate中"二级缓存"配置的更多相关文章

  1. Hibernate中二级缓存指的是什么?

    一.一级缓存.二级缓存的概念解释 (1)一级缓存就是Session级别的缓存,一个Session做了一个查询操作,它会把这个操作的结果放在一级缓存中,如果短时间内这个 session(一定要同一个se ...

  2. 【Hibernate】解析hibernate中的缓存

    Hibernate中的缓存一共有三种,一级缓存.二级缓存.查询缓存.缓存除了使用Hibernate自带的缓存,还可以使用redis进行缓存,或是MongoDB进行缓存. 所使用的Demo: User. ...

  3. 配置Hibernate的二级缓存

    1.在applicationContex.xml文件里面添加二级缓存配置: <!-- 配置hibernate的sessionFactory --> <bean id="se ...

  4. Hibernate二级缓存简述及基于Spring4,Hibernate5,Ehcache3的二级缓存配置

    Hibernate L2缓存 缓存的分类 L2缓存工作原理 放入二级缓存的数据 Ehcache 依赖 ehcache.xml 常用的memoryStoreEvictionPolicy(缓存算法) eh ...

  5. SSM-MyBatis-18:Mybatis中二级缓存和第三方Ehcache配置

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 二级缓存 Mybatis中,默认二级缓存是开启的.可以关闭. 一级缓存开启的.可以被卸载吗?不可以的.一级缓存 ...

  6. Hibernate 二级缓存配置

    详见:https://www.cnblogs.com/Junsept/p/7324981.html Hibernate的cache管理: Cache就是缓存,它往往是提高系统性能的最重要手段,对数据起 ...

  7. Hibernate中一级缓存和二级缓存

    缓存是介于应用程序和物理数据源之间,其作用是为了降低应用程序对物理数据源访问的频次,从而提高了应用的运行性能.缓存内的数据是对物理数据源中的数据的复制,应用程序在运行时从缓存读写数据,在特定的时刻或事 ...

  8. Hibernate之二级缓存

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

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

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

随机推荐

  1. Android Study Notes

    @1:按下back键退回到home界面时,会调用onDestroy() 按下back键时会调用onDestroy()销毁当前的activity,重新启动此activity时会调用onCreate()重 ...

  2. thunk函数

    1.函数参数求值的策略 a.传值策略(c语言) 传值策略就是在进入函数体之前将 参数计算之后 将参数的值传入到函数体之中. let x = 8 f(x + 1)//参数为 f(9)//传进去的值实际上 ...

  3. python 时间和时间戳的转换

    对于时间数据,如2016-05-05 20:28:54,有时需要与时间戳进行相互的运算,此时就需要对两种形式进行转换,在Python中,转换时需要用到time模块,具体的操作有如下的几种: 将时间转换 ...

  4. 持续(集成-->交付-->部署)

    软件的开发工作的大致流程 编码 -> 构建 -> 集成 -> 测试 -> 交付 -> 部署 由上图可知「持续集成(Continuous Integration)」.「持续 ...

  5. Selenium(Webdriver)自动化测试常问到的问题解答(转自:潜龙0318)

    今天朋友问我了几个关于Selenium自动化测试的问题,我看了一下感觉还比较典型.结合我以往自动化测试的经验,给出了一些儿粗浅的答案,希望能帮大家,如果大家有什么好的看法,希望相互交流,相互学习! ( ...

  6. 独立开发一个App是一种怎样的体验?

    (本文原文是我在知乎上写的一篇回答:独立开发一个 App 是一种怎样的体验?) UWP业余开发者表示,非常愿意做一股清流.在喧闹无比的iOS和Android平台,为了给应用造势,太多人费尽心思,勾心斗 ...

  7. Linux 日志分析工具(logwatch)安装及使用

    Linux 日志分析工具(logwatch)安装及使用 日志是非常重要的系统文件,管理员每天的重要工作就是分析和查看服务器的日志,判断服务器的健康状态.但是日志管理又是一项非常枯燥的工作,如果需要管理 ...

  8. Python数据可视化:网易云音乐歌单

    通过Python对网易云音乐华语歌单数据的获取,对华语歌单数据进行可视化分析. 可视化库不采用pyecharts,来点新东西. 使用matplotlib可视化库,利用这个底层库来进行可视化展示. 推荐 ...

  9. mybatis家族

    mybatis 优秀的持久层框架,它支持定制化SQL.存储过程以及高级映射. 备注:通过mapper实现数据库与实体类相互映射 MyBatis 避免了几乎所有的JDBC 代码和手动设置参数以及获取结果 ...

  10. 20145310 《Java程序设计》第1周学习总结

    20145310 <Java程序设计>第1周学习总结 教材学习内容总结 第一周主要学习教材前两章的知识.第一章主要学习了java的历史,版本的迁移以及一些相关的专有名词之间的联系和下载安装 ...