zoukankan      html  css  js  c++  java
  • Hibernate二级缓存存集合对象

    新建java project项目:chapter17_setehcache

    hibernate.cfg.xml

    代码:

    <?xml version='1.0' encoding='UTF-8'?>
    <!DOCTYPE hibernate-configuration PUBLIC
              "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
              "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

     <!-- Generated by MyEclipse Hibernate Tools.                   -->
    <hibernate-configuration>

     <session-factory>
      <property name="dialect">
       org.hibernate.dialect.MySQLDialect
      </property>
      <property name="connection.url">
       jdbc:mysql://localhost:3307/users
      </property>
      <property name="connection.username">root</property>
      <property name="connection.password">root</property>
      <property name="connection.driver_class">
       com.mysql.jdbc.Driver
      </property>
      <property name="myeclipse.connection.profile">
       mysqlusers
      </property>
      <property name="show_sql">true</property>
      <property name="format_sql">true</property>
      <property name="current_session_context_class">thread</property>
      <property name="cache.provider_class">
       org.hibernate.cache.EhCacheProvider
         </property>
      <mapping resource="com/b510/examplex/Category.hbm.xml" />
      <mapping resource="com/b510/examplex/Product.hbm.xml" />

     </session-factory>

    </hibernate-configuration>

    ehcache.xml

    代码:

    <?xml version="1.0" encoding="UTF-8"?>
    <ehcache>
                 <!-- 说明:maxElementsInMemory  设置 保存在内存中的缓存对象的最大数量
                   etemal  设置缓存中对象 是否永远不过期,如果值为true,超过设置被忽略,缓存对象永远不过期
                   timeToIdleSeconds   设置缓存中对象在他过期之前的最大空闲时间,单位为秒
                   timeToLiveSeconds   设置缓存中对象在他过期之前的最大生存时间 ,单位为秒
                   overflowToDisk      设置内存中的缓存对象达到maxElementsInMemory限制时,是否将缓存对象保存到硬盘中      
                 -->
         <!--  -->
     <diskStore path="java.io.tmpdir"/>
     <defaultCache maxElementsInMemory="10000" eternal="false"
     timeToIdleSeconds="120" timeToLiveSeconds="120"
     overflowToDisk="true"/>
     <cache name="com.b510.examples.Product" maxElementsInMemory="1000"
     eternal="true" timeToIdleSeconds="300" timeToLiveSeconds="600"
     overflowToDisk="true"/> 
     <cache name="com.b510.example.Category.products" maxElementsInMemory="1000"
     eternal="true" timeToIdleSeconds="300" timeToLiveSeconds="600"
     overflowToDisk="true"/> 
     <cache name="com.b510.example.Category" maxElementsInMemory="1000"
     eternal="true" timeToIdleSeconds="300" timeToLiveSeconds="600"
     overflowToDisk="true"/> 
    </ehcache>

    Category.java

    代码:

    package com.b510.examplex;

    import java.util.HashSet;
    import java.util.Set;

    /**
     * Category entity. @author MyEclipse Persistence Tools
     */

    public class Category implements java.io.Serializable {

     private static final long serialVersionUID = 7187702390542761264L;
     private Integer id;
     private String name;
     private String description;
     private Set products = new HashSet(0);

     public Category() {
     }

     public Integer getId() {
      return this.id;
     }

     public void setId(Integer id) {
      this.id = id;
     }

     public String getName() {
      return this.name;
     }

     public void setName(String name) {
      this.name = name;
     }

     public String getDescription() {
      return this.description;
     }

     public void setDescription(String description) {
      this.description = description;
     }

     public Set getProducts() {
      return this.products;
     }

     public void setProducts(Set products) {
      this.products = products;
     }

    }

    Product.java

    代码;

    package com.b510.examplex;

    /**
     * Product entity. @author MyEclipse Persistence Tools
     */

    public class Product implements java.io.Serializable {

     private static final long serialVersionUID = 1449100306422352085L;
     private Integer id;
     private Category category;
     private String name;
     private String price;
     private String descripton;

     public Product() {
     }

     public Integer getId() {
      return this.id;
     }

     public void setId(Integer id) {
      this.id = id;
     }

     public Category getCategory() {
      return this.category;
     }

     public void setCategory(Category category) {
      this.category = category;
     }

     public String getName() {
      return this.name;
     }

     public void setName(String name) {
      this.name = name;
     }

     public String getPrice() {
      return this.price;
     }

     public void setPrice(String price) {
      this.price = price;
     }

     public String getDescripton() {
      return this.descripton;
     }

     public void setDescripton(String descripton) {
      this.descripton = descripton;
     }

    }

    Category.hbm.xml

    代码:

    <?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <!--
        Mapping file autogenerated by MyEclipse Persistence Tools
    -->
    <hibernate-mapping>
        <class name="com.b510.examplex.Category" table="category" catalog="users">
            <cache usage="read-only"/>
            <id name="id" type="java.lang.Integer">
                <column name="id" />
                <generator class="increment"></generator>
            </id>
            <property name="name" type="java.lang.String">
                <column name="name" length="500" />
            </property>
            <property name="description" type="java.lang.String">
                <column name="description" length="500" />
            </property>
            <set name="products" inverse="true">
                <cache usage="read-only"/>
                <key>
                    <column name="category_id" />
                </key>
                <one-to-many class="com.b510.examplex.Product" />
            </set>
        </class>
    </hibernate-mapping>

    Product.hbm.xml

    代码:

    <?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <!--
        Mapping file autogenerated by MyEclipse Persistence Tools
    -->
    <hibernate-mapping>
        <class name="com.b510.examplex.Product" table="product" catalog="users">
            <id name="id" type="java.lang.Integer">
                <column name="id" />
                <generator class="increment"></generator>
            </id>
            <many-to-one name="category" class="com.b510.examplex.Category" fetch="select">
                <column name="category_id" />
            </many-to-one>
            <property name="name" type="java.lang.String">
                <column name="name" length="500" />
            </property>
            <property name="price" type="java.lang.String">
                <column name="price" length="10" />
            </property>
            <property name="descripton" type="java.lang.String">
                <column name="descripton" length="500" />
            </property>
        </class>
    </hibernate-mapping>

    测试代码:

    HibernateTest.java

    代码:

    /**
     *
     */
    package com.b510.examplex;

    import java.util.Set;

    import org.hibernate.Session;

    /**
     *
     * @author XHW
     *
     * @date 2011-7-17
     *
     */
    public class HibernateTest {
     public static void main(String[] args) {
      new HibernateTest().test();
     }
     public void test(){
      Session session=HibernateSessionFactoryUtil.getSessionFactory().openSession();
      session.beginTransaction();
      Category c1=(Category)session.get(Category.class, 1);
      System.out.println("id:"+c1.getId()+"  name: "+c1.getName());
      
      Set<Product> products=c1.getProducts();
      for(Product p:products){
       System.out.println(p.getName());
      }  
      session.getTransaction().commit();
      
      System.out.println("--------------------------------");
      Session session2=HibernateSessionFactoryUtil.getSessionFactory().openSession();
      session2.beginTransaction();
      Category c2=(Category)session2.get(Category.class, 1);
      Set<Product> products2=c1.getProducts();
      for(Product p2:products2){
       System.out.println(p2.getName());
      }  
      session2.getTransaction().commit();
     }
    }

    运行效果:

    log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).
    log4j:WARN Please initialize the log4j system properly.
    Hibernate:
        select
            category0_.id as id0_0_,
            category0_.name as name0_0_,
            category0_.description as descript3_0_0_
        from
            users.category category0_
        where
            category0_.id=?
    id:1  name: java
    Hibernate:
        select
            products0_.category_id as category2_1_,
            products0_.id as id1_,
            products0_.id as id1_0_,
            products0_.category_id as category2_1_0_,
            products0_.name as name1_0_,
            products0_.price as price1_0_,
            products0_.descripton as descripton1_0_
        from
            users.product products0_
        where
            products0_.category_id=?
    java WEB开发与实战
    java SE应用程序设计
    --------------------------------
    java WEB开发与实战
    java SE应用程序设计

  • 相关阅读:
    linux脚本练习之将数据导入oracle表
    linux脚本之一个程序调用另一个程序
    使用客户端Navicat连接数据库oracle19c
    centos7安装与卸载oracle19c
    Redis-cluster集群搭建(redis版本5.0.4)
    linux下redis的哨兵模式
    使用POI导入Excel文件
    MySQL8.0搭建MGR集群(MySQL-shell、MySQL-router)
    MySQL Shell用法
    CentOS 7下使用rpm包安装MySQL8.0
  • 原文地址:https://www.cnblogs.com/hongten/p/2108883.html
Copyright © 2011-2022 走看看