二级缓存:存放公有数据

   1、适用场合:

        1、数据不能频繁更新

        2、数据能公开,私密性不是很强

   2、hibernate本身并没有提供二级缓存的解决方案

   3、二级缓存的实现是依赖于第三方供应商完成的

         ehcache

         oscache

         jbosscache

         swamchache

   4、二级缓存的操作

         1、二级缓存存在sessionFactory中

         2、生命周期:与sessionFactory保持一致

         3、使用二级缓存的步骤

             1、在hibernate.cfg.xml

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

                  <property name="cache.provider_class">

                        org.hibernate.cache.EhCacheProvider

                  </property>

             2、让某一个对象进入到二级缓存中(以下选一种配置方式,推荐第二种)

                 * 在配置文件中

                   <class-cache usage="read-only" class="cn.itcast.hiberate.sh.domain.Classes"/>

                 *  在映射文件中

                    <cache usage="read-only"/>

             3、使用

                  session.get/session.load

   5、查询缓存

                在二级缓存的基础上 在cfg.xml加上

     <property name="cache.use_query_cache">true</property>,只能在session.createQuery()中使用

 

示例:

hibernate.cfg.xml

 1 <?xml version='1.0' encoding='utf-8'?>
 2 <!DOCTYPE hibernate-configuration PUBLIC
 3         "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
 4         "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
 5 <hibernate-configuration>
 6     <!-- 
 7         一个session-factory只能连接一个数据库
 8     -->
 9 <session-factory>
10     <!-- 
11         数据库的用户名
12     -->
13     <property name="connection.username">root</property>
14     <!-- 
15         密码
16     -->
17     <property name="connection.password">root</property>
18     <!-- 
19         url
20     -->
21     <property name="connection.url">
22         jdbc:mysql://localhost:3306/itcast_sh_hibernate
23     </property>
24     <!-- 
25         作用:根据持久化类和映射文件生成表
26         validate
27         create-drop
28         create
29         update
30     -->
31     <property name="hbm2ddl.auto">update</property>
32     <!-- 
33         显示hibernate内部生成的sql语句
34     -->
35     <property name="show_sql">true</property>
36     <property name="format_sql">true</property>
37     <!-- 
38         告诉hibernate,session由当前线程产生
39     -->
40     <property name="current_session_context_class">thread</property>
41 
42     <!-- 
43         开启二级缓存
44     -->
45     <property name="cache.use_second_level_cache">true</property>
46 
47     <!-- 
48         二级缓存的提供商 
49     -->
50     <property name="cache.provider_class">
51         org.hibernate.cache.EhCacheProvider
52     </property>
    <!--
查询缓存,用于createQuery代码-->
>
54 
55     <mapping resource="cn/itcast/hiberate/sh/domain/Classes.hbm.xml" />
56    
57     <!-- 
58         <class-cache usage="read-only" class="cn.itcast.hiberate.sh.domain.Classes"/>
59     -->
60 </session-factory>
61 </hibernate-configuration>

Classes.java

 1 package cn.itcast.hiberate.sh.domain;
 2 
 3 import java.io.Serializable;
 4 import java.util.Set;
 5 
 6 public class Classes implements Serializable{
 7     private Long cid;
 8     private String cname;
 9     private String description;
10     
11     public Long getCid() {
12         return cid;
13     }
14 
15     public void setCid(Long cid) {
16         this.cid = cid;
17     }
18 
19     public String getCname() {
20         return cname;
21     }
22 
23     public void setCname(String cname) {
24         this.cname = cname;
25     }
26 
27     public String getDescription() {
28         return description;
29     }
30 
31     public void setDescription(String description) {
32         this.description = description;
33     }
34 
35     public Set<Student> getStudents() {
36         return students;
37     }
38 
39     public void setStudents(Set<Student> students) {
40         this.students = students;
41     }
42 
43     private Set students;
44 }
View Code

相关文章:

  • 2022-12-23
  • 2021-06-19
  • 2021-10-26
  • 2022-01-13
  • 2021-06-02
  • 2021-08-29
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-10-01
  • 2021-07-11
  • 2022-01-03
  • 2021-11-28
相关资源
相似解决方案