zoukankan      html  css  js  c++  java
  • hibernate二级缓存整合

    <?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();
        }
    
    }
  • 相关阅读:
    局部 与 整体 修正 逐渐逼近
    en-zh(社会问题)social problems
    单调性 [1 + 1 / (n)]^n
    en-zh(科学技术)science and technology
    mysql函数之截取字符串
    看数据库的文件大小 MySQL Binlog日志的生成和清理规则
    Brouwer不动点
    布尔巴基学派
    量子杨-Baxter方程新解系的一般量子偶构造_爱学术 https://www.ixueshu.com/document/f3385115a33571aa318947a18e7f9386.html
    COMSOL
  • 原文地址:https://www.cnblogs.com/Danial7777777/p/9348784.html
Copyright © 2011-2022 走看看