Today i will show a simple example on how to combine ehcache caching framework with MyBatis ORM. I use Maven as my build tool, and Netbeans as my IDE.
    Okay, here is my pom.xml,
        |    01   02   03   04   05   06   07   08   09   10   11   12   13   14   15   16   17   18   19   20   21   22   23   24   25   26   27   28   29   30   31   32   33   34   35   36   37   38   39   40   41   42   43   44   45   46   47   48   49   50   51    |      <project  xmlns="http://maven.apache.org/POM/4.0.0"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"            xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">       <modelVersion>4.0.0</modelVersion>       <groupId>com.edw.ehcache</groupId>       <artifactId>MyBatisEhCache</artifactId>       <version>1.0-SNAPSHOT</version>       <packaging>jar</packaging>       <name>MyBatisEhCache</name>       <url>http://maven.apache.org</url>       <properties>           <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>       </properties>       <dependencies>           <dependency>               <groupId>junit</groupId>               <artifactId>junit</artifactId>               <version>3.8.1</version>               <scope>test</scope>           </dependency>           <dependency>               <groupId>org.mybatis</groupId>               <artifactId>mybatis</artifactId>               <version>3.2.2</version>           </dependency>           <dependency>               <groupId>org.mybatis.caches</groupId>               <artifactId>mybatis-ehcache</artifactId>               <version>1.0.2</version>           </dependency>           <dependency>               <groupId>log4j</groupId>               <artifactId>log4j</artifactId>               <version>1.2.17</version>           </dependency>                <dependency>               <groupId>mysql</groupId>               <artifactId>mysql-connector-java</artifactId>               <version>5.1.6</version>           </dependency>           <dependency>               <groupId>net.sf.ehcache</groupId>               <artifactId>ehcache</artifactId>               <version>2.7.0</version>           </dependency>           <dependency>               <groupId>org.slf4j</groupId>               <artifactId>slf4j-log4j12</artifactId>               <version>1.7.5</version>           </dependency>           </dependencies>   </project>    |   
    
    And i create a simple mysql table,
        |    1   2   3   4   5   6   7    |      CREATE  TABLE  `testing` (     `Id` int(11) NOT  NULL  AUTO_INCREMENT,     `name` varchar(30) NOT  NULL  DEFAULT  '',     `address` varchar(255) NOT  NULL  DEFAULT  '',     PRIMARY  KEY  (`Id`),     UNIQUE  KEY  `ix` (`name`)   ) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT  CHARSET=latin1;    |   
    
    and a simple bean and xml representation from my table,
        |    01   02   03   04   05   06   07   08   09   10   11   12   13   14   15   16   17    |      package  com.edw.mybatisehcache.bean;       import  java.io.Serializable;       public  class  Testing implements  Serializable  {           private  Integer id;       private  String name;       private  String address;           // setter and getter           @Override       public  String toString() {           return  "testing{"  + "id="  + id + ", name="  + name + ", address="  + address + '}';       }              }    |   
    
   
        |    01   02   03   04   05   06   07   08   09   10   11   12   13   14   15   16   17   18    |      <?xml  version="1.0"  encoding="UTF-8"  ?>   <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >   <mapper  namespace="com.edw.mybatisehcache.mapper.TestingMapper"  >              <cache  type="org.mybatis.caches.ehcache.EhcacheCache"/>               <resultMap  id="Testings"  type="com.edw.mybatisehcache.bean.Testing"  >           <id  column="id"  property="id"  jdbcType="BIGINT"  />           <result  column="name"  property="name"  jdbcType="VARCHAR"  />           <result  column="address"  property="address"  jdbcType="VARCHAR"  />       </resultMap>            <select  id="select"  resultMap="Testings">           select           *           from testing          </select>     </mapper>    |   
    
    An xml configuration to load my database connection,
        |    01   02   03   04   05   06   07   08   09   10   11   12   13   14   15   16   17   18   19   20    |      <?xml  version="1.0"  encoding="UTF-8"  ?>   <!DOCTYPE configuration   PUBLIC "-//mybatis.org//DTD Config 3.0//EN"   "http://mybatis.org/dtd/mybatis-3-config.dtd">   <configuration>       <environments  default="development">          <environment  id="development">               <transactionManager  type="JDBC"/>               <dataSource  type="UNPOOLED">                   <property  name="driver"  value="com.mysql.jdbc.Driver"/>                   <property  name="url"  value="jdbc:mysql://localhost/test"/>                   <property  name="username"  value="root"/>                   <property  name="password"  value=""/>               </dataSource>           </environment>                </environments>        <mappers>                          <mapper  resource="com/edw/mybatisehcache/xml/TestingMapper.xml"  />        </mappers>                      </configuration>    |   
    
    A java code to load my xml configuration,
        |    01   02   03   04   05   06   07   08   09   10   11   12   13   14   15   16   17   18   19   20   21   22   23   24    |      package  com.edw.mybatisehcache.config;       import  java.io.Reader;   import  org.apache.ibatis.io.Resources;   import  org.apache.ibatis.session.SqlSessionFactory;   import  org.apache.ibatis.session.SqlSessionFactoryBuilder;       public  class  MyBatisSqlSessionFactory {           private  static  final  SqlSessionFactory FACTORY;           static  {           try  {               Reader reader = Resources.getResourceAsReader("com/edw/mybatisehcache/xml/Configuration.xml");               FACTORY = new  SqlSessionFactoryBuilder().build(reader);           } catch  (Exception e){               throw  new  RuntimeException("Fatal Error.  Cause: "  + e, e);           }       }           public  static  SqlSessionFactory getSqlSessionFactory() {           return  FACTORY;       }   }    |   
    
    A java interface to do handle queries,
        |    1   2   3   4   5   6   7   8    |      package  com.edw.mybatisehcache.mapper;       import  com.edw.mybatisehcache.bean.Testing;   import  java.util.List;       public  interface  TestingMapper {       public  List<Testing> select();      }    |   
    
    And this is my ehcache.xml configuration,
        |    01   02   03   04   05   06   07   08   09   10   11   12    |      <?xml  version="1.0"  encoding="UTF-8"?>   <!--       caching configuration   -->   <ehcache>               <diskStore  path="F:\\cache"  />               <defaultCache  eternal="true"  maxElementsInMemory="1000"                      overflowToDisk="true"  diskPersistent="true"  timeToIdleSeconds="0"                      timeToLiveSeconds="0"  memoryStoreEvictionPolicy="LRU"  statistics="true"  />   </ehcache>    |   
    
    This is my main java class, as you can see i try to do a repeated simple select queries,
        |    01   02   03   04   05   06   07   08   09   10   11   12   13   14   15   16   17   18   19   20   21   22   23   24   25   26   27   28   29   30   31   32   33   34   35    |      package  com.edw.mybatisehcache.main;       import  com.edw.mybatisehcache.bean.Testing;   import  com.edw.mybatisehcache.config.MyBatisSqlSessionFactory;   import  com.edw.mybatisehcache.mapper.TestingMapper;   import  java.util.List;   import  org.apache.ibatis.session.SqlSession;   import  org.apache.ibatis.session.SqlSessionFactory;   import  org.apache.log4j.Logger;       public  class  Main {           private  static  Logger logger = Logger.getLogger(Main.class);           public  static  void  main(String[] args) {               for  (int  i = 0; i < 3; i++) {               SqlSessionFactory sqlSessionFactory = MyBatisSqlSessionFactory.getSqlSessionFactory();               SqlSession sqlSession = sqlSessionFactory.openSession();               TestingMapper testingMapper = sqlSession.getMapper(TestingMapper.class);                   List<Testing> testings = testingMapper.select();               for  (Testing testing : testings) {                   logger.debug(testing);               }               sqlSession.close();                   try  {                   Thread.sleep(3000);               } catch  (Exception e) {                   logger.error(e, e);               }           }       }   }    |   
    
    This is what is written on my netbeans' console,
        |    1   2   3   4   5   6   7   8   9    |      2013-07-25 15:30:10,648 [Segment] DEBUG net.sf.ehcache.store.disk.Segment:779 - fault removed 0 from heap   2013-07-25 15:30:10,648 [Segment] DEBUG net.sf.ehcache.store.disk.Segment:796 - fault added 0 on disk   2013-07-25 15:30:13,722 [Cache] DEBUG net.sf.ehcache.Cache:1970 - Cache: com.edw.mybatisehcache.mapper.TestingMapper store hit for 2026218237:1652924294:com.edw.mybatisehcache.mapper.TestingMapper.select:0:2147483647:select           *           from testing   2013-07-25 15:30:13,722 [Main] DEBUG com.edw.mybatisehcache.main.Main:24 - testing{id=1, name=edw, address=Ciledug}   2013-07-25 15:30:13,722 [Main] DEBUG com.edw.mybatisehcache.main.Main:24 - testing{id=2, name=kamplenk, address=Cikokol}   2013-07-25 15:30:13,722 [Main] DEBUG com.edw.mybatisehcache.main.Main:24 - testing{id=3, name=nugie, address=Pamulang}   2013-07-25 15:30:13,722 [Main] DEBUG com.edw.mybatisehcache.main.Main:24 - testing{id=4, name=tebek, address=Karawaci}    |   
    
    Here is my Netbeans project structure
  
    Have fun 
   
     
 
0 件のコメント:
コメントを投稿