验证Hibernate二级缓存的存在[通俗易懂]

验证Hibernate二级缓存的存在[通俗易懂]一、环境的搭建请参考EHcache环境的配置二、实体类(Student.java)packagecom.hibernate.beans;publicclassStudent{privateIntegerid;privateStringname;privateintage;privatedoublescore;publicStu

大家好,又见面了,我是你们的朋友全栈君。

一、环境的搭建

请参考EHcache环境的配置

二、实体类(Student.java)

package com.hibernate.beans;

public class Student { 
   

    private Integer id;
    private String name;
    private int age;
    private double score;
    public Student() {
        super();
    }

    public Student(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }

    public Integer getId() {
        return id;
    }
    public Student(String name, int age, double score) {
        super();
        this.name = name;
        this.age = age;
        this.score = score;
    }

    @Override
    public String toString() {
        return "Student [id=" + id + ", name=" + name + ", age=" + age
                + ", score=" + score + "]";
    }

    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public double getScore() {
        return score;
    }
    public void setScore(double score) {
        this.score = score;
    }
}

三、映射文件(Student.hbm.xml)

<?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="com.hibernate.beans">
     <class name="Student" table="t_student">
        <id name="id" column="t_id">
            <!-- 主键生成策略 -->
            <generator class="native"></generator>
        </id>
        <property name="name" column="t_name"></property>
        <property name="age" column="t_age"></property>
        <property name="score" column="t_score"></property>
     </class>
 </hibernate-mapping>

四、主配置文件(hibernate.cfg.xml)

<?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>
    <!--DB连接四要素 Ctrl shift C -->
    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
    <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/test?useUnicode=true&amp;characterEncoding=UTF8</property>
    <property name="hibernate.connection.username">root</property>
    <property name="hibernate.connection.password">123456</property>
    <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
    <!-- 数据源:数据库连接池 -->
    <property name="hibernate.connection.provider_class">org.hibernate.c3p0.internal.C3P0ConnectionProvider</property>
    <!-- 当前session的上下文 保证在同一线程中获取到的是同一个session-->
    <property name="hibernate.current_session_context_class">thread</property>
    <!-- 自动建表-->
    <property name="hibernate.hbm2ddl.auto">update</property>
    <!-- 显示SQL -->
    <property name="hibernate.show_sql">true</property>
    <!-- 格式化SQL -->
    <property name="hibernate.format_sql">true</property>


    <!-- 开启二级缓存 -->
    <property name="hibernate.cache.use_second_level_cache">true</property>
    <!-- 注册二级缓存区域工厂 -->
    <property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</property>
    <!-- 加载映射文件 -->
    <mapping resource="com/hibernate/beans/Student.hbm.xml"/>
    <!-- 配置缓存类 -->
    <class-cache usage="read-only" class="com.hibernate.beans.Student"/>
    <!-- 配置缓存集合 <collection-cache usage="read-only" collection="com.hibernate.beans.Student.name"/> -->
    </session-factory>
</hibernate-configuration>

五、测试代码
------

public void testEHcache(){
        //获取session
        Session session = HbnUtils.getSession();
        try {
            //开启事务
            session.beginTransaction();
            //第一次执行get操作
            Student student = session.get(Student.class, 1);
            System.out.println(student);
            //第二次执行get操作
            Student student1 = session.get(Student.class, 1);
            System.out.println(student1);
            //清除session缓存
            session.clear();

            //第三次执行get操作
            Student student2 = session.get(Student.class, 1);
            System.out.println(student2);
            //提交事务
            session.getTransaction().commit();
        } catch (Exception e) {
            //回滚事务
            session.getTransaction().rollback();
        }
    }

结果

 select
        student0_.t_id as t_id1_0_0_,
        student0_.t_name as t_name2_0_0_,
        student0_.t_age as t_age3_0_0_,
        student0_.t_score as t_score4_0_0_ 
    from
        t_student student0_ 
    where
        student0_.t_id=?
Student [id=1, name=李四, age=20, score=90.0]
Student [id=1, name=李四, age=20, score=90.0]
Student [id=1, name=李四, age=20, score=90.0]

分析

日志上的sql语句是第一次查询出现了,

第一次输出的详情是从数据库中加载来的,

第二次输出的详情是从session缓存中读取的,

然后session缓存被清空,

第三次输出的详情就只能是从二级缓存中读取的了

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/142426.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 什么是热拔插?[通俗易懂]

    什么是热拔插?[通俗易懂](1)带电插拔,热插拔功能就是允许用户在不关闭系统,不切断电源的情况下取出和更换损坏的硬盘、电源或板卡等部件,从而提高了系统对灾难的及时恢复能力、扩展性和灵活性等,例如一些面向高端应用的磁盘镜像系统都可以提供磁盘的热插拔功能。(2)具体用学术的说法就是:热替换(Hotreplacement)、热添加(hotexpansion)和热升级(hotupgrade),而热插拔最早出现在服务器领域,…

  • snmptrap怎么发送_cmd运行nmap

    snmptrap怎么发送_cmd运行nmapSNMP简单网络管理协议,其中其支持的一个命令snmptrap命令,用于模拟向管理机发送trap消息。启动陷阱方法:snmptrapd-C-c/etc/snmp/snmptrapd.conf-Lf/var/log/net-snmptrap.log例如:snmptrap-v1-cpublic192.168.2.124.1.3.6.1.4.1.1192.168.2.12561…

  • ubuntu系统查看gcc版本及版本切换[通俗易懂]

    ubuntu系统查看gcc版本及版本切换[通俗易懂]写在前面:自己的测试环境是Ubuntu16.04,安装了gcc-5、gcc-7,通过下面的方式从实现默认的gcc-5切换到gcc-7,亲测有效~~1.查看自己当前的gcc版本gcc-v通过下图的最后一行可以得到,这里电脑当前gcc的版本是5.42.安装另一个版本gcc我这里安装的是gcc-7sudoadd-apt-repositoryppa:ubuntu-toolch…

  • uuid截取_jsp获取session中的值

    uuid截取_jsp获取session中的值switch_core_session_t*session=NULL;if(!(session=switch_core_session_locate(channel_uuid))){       return;}

  • scrapy ROBOTSTXT_OBEY 协议:「建议收藏」

    scrapy ROBOTSTXT_OBEY 协议:「建议收藏」

  • SpringCloud原理–FeignClient

    SpringCloud原理–FeignClient本文介绍SpringCloud的FeignClient的原理。Feign服务调用的工作原理可以总结为以下几个步骤首先通过@EnableFeignCleints注解开启FeignCleint。根据Feign的规则实现接口,添加@FeignCleint注解。程序启动后,会扫描所有有@FeignCleint的类,并将这些信息注入到ioc容器中。注入时从FeignClientFactoryBean.class获取FeignClient当接口的方法被调用时,通过jdk的代理,来生

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号