<?xml version="1.0" encoding="UTF-8"?><ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ????????xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"> ?<!-- 磁盘缓存位置 --> ?<diskStore path="java.io.tmpdir/ehcache" /> ?<!-- 默认缓存 --> ??<defaultCache ?????????eternal="false" ?????????timeToIdleSeconds="120" ?????????timeToLiveSeconds="120" ?????????diskExpiryThreadIntervalSeconds="120" ?????????memoryStoreEvictionPolicy="LRU" ?????????> ?</defaultCache> ???<!-- helloworld缓存 --> ?<cache name="HelloWorldCache" ????????maxElementsInMemory="1000" ????????eternal="false" ????????timeToIdleSeconds="5" ????????timeToLiveSeconds="5" ????????overflowToDisk="true" ????????memoryStoreEvictionPolicy="LRU"/> ?<cache name="UserCache" ????????maxElementsInMemory="1000" ????????eternal="false" ????????timeToIdleSeconds="1800" ????????timeToLiveSeconds="1800" ????????overflowToDisk="false" ????????memoryStoreEvictionPolicy="LRU"/></ehcache>
<?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"><!-- Generated by MyEclipse Hibernate Tools. --><hibernate-configuration> ???<session-factory> ???????<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> ???????<property name="connection.url">jdbc:mysql:///hibernate</property> ???????<property name="connection.driver_class">com.mysql.jdbc.Driver</property> ???????<property name="connection.username">root</property> ???????<property name="hibernate.connection.password">123456</property> ???????<property name="hibernate.show_sql">true</property> ???????<property name="hibernate.format_sql">true</property> ???????<property name="hbm2ddl.auto">update</property> ???????<!-- 开启二级缓存 --> ???????<property name="hibernate.cache.use_second_level_cache">true</property> ???????<!-- 二级缓存的提供类 在hibernate4.0版本以后我们都是配置这个属性来指定二级缓存的提供类 --> ???????<property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</property> ???????<!-- 二级缓存配置文件的位置 --> ???????<property name="hibernate.cache.provider_configuration_file_resource_path">ehcache.xml</property> ???????<mapping resource="com/hello/User.hbm.xml" /> ???????<mapping resource="com/hello/Account.hbm.xml" /> ???????<mapping resource="com/manytomany/Student.hbm.xml" /> ???????<mapping resource="com/manytomany/Teacher.hbm.xml" /> ???????<mapping resource="com/ehcache/User.hbm.xml" /> ???</session-factory></hibernate-configuration>
<?xml version="1.0"?><!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.ehcache"> ???<!-- name属性:哪个类 table属性:对应哪个表,如果不写,默认的表名就是类的简单名称 --> ???<class name="User" table="tt_user"> ???????<cache usage="read-only" /> ???????<id name="id"> ???????????<generator class="native" /> ???????</id> ???????<property name="name" not-null="true" /> ???</class></hibernate-mapping>
package com.ehcache;public class User { ???private int id; ???private String name; ???public int getId() { ???????return id; ???} ???public void setId(int id) { ???????this.id = id; ???} ???public String getName() { ???????return name; ???} ???public void setName(String name) { ???????this.name = name; ???}}
package com.ehcache;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.boot.Metadata;import org.hibernate.boot.MetadataSources;import org.hibernate.boot.registry.StandardServiceRegistry;import org.hibernate.boot.registry.StandardServiceRegistryBuilder;import org.hibernate.cfg.Configuration;import org.junit.Test;import com.ehcache.User;public class HelloTest { ???private static SessionFactory sessionFactory; ???static { ???????sessionFactory = new Configuration() ???????.configure() // 读取配置文件 ???????.buildSessionFactory(); ???} ???// 根据配置生成表结构 ???@Test ???public void test() { ???????//hibernate 5.0 ???????Configuration conf = new Configuration().configure();//1、读取配置文件 ???????StandardServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().configure().build(); ???????Metadata metadata = new MetadataSources(serviceRegistry).buildMetadata(); ???} ???//测试hibernate二级缓存配置,session关闭之后是否能读取 ???@Test ???public void hello(){ ???????Session session=sessionFactory.openSession(); ???????User user = session.get(User.class,1); ???????System.out.println(user.getName()+"==================="); ???????session.clear();//清除缓存 ???????session.close(); ???????System.out.println("================================="); ???????Session session2=sessionFactory.openSession(); ???????User user2 = session2.get(User.class,1 ); ???????System.out.println(user.getName()+"==================="); ????????/** ????????* 因为设置了二级缓存为read-only,所以不能对其进行修改 ????????*/ ???????session2.beginTransaction(); ???????user2.setName("aaa"); ???????session2.getTransaction().commit(); ???????session2.close(); ???} ???????/** ????* ?注意:二级缓存中缓存的仅仅是对象,而下面这里只保存了姓名和性别两个字段,所以 不会被加载到二级缓存里面 ????*/ ???@Test ???public void hello2(){ ???????????????Session session=sessionFactory.openSession(); ???????Query query = session.createQuery("select id,name from User where id=1"); ???????List list = query.list(); ???????session.close(); ???????Session session2=sessionFactory.openSession(); ???????/** ????????* 由于二级缓存缓存的是对象,所以此时会发出两条sql ????????*/ ???????User user = session2.get(User.class, 1); ???????System.out.println(user.getName()); ???????session.close(); ???}}
hibernate二级缓存整合
原文地址:https://www.cnblogs.com/Danial7777777/p/9348784.html