> Java > java지도 시간 > MyBatis 시작하기 (5) --- 지연된 로딩 및 캐싱

MyBatis 시작하기 (5) --- 지연된 로딩 및 캐싱

黄舟
풀어 주다: 2016-12-21 14:34:16
원래의
1351명이 탐색했습니다.

1. 데이터베이스 생성

1.1. 데이터베이스 생성


/*SQLyog EnterPRise v12.09(64비트)MySQL - 5.7.9-log : 데이터베이스 - mybatis
************************ ************************************************// *!40101 세트 이름 utf8 */;/*!40101 SET SQL_MODE=''*/;/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS , FOREIGN_KEY_CHECKS=0 */;/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;CREATE DATABASE /*! 32312 IF NOT EXISTS*/`mybatis` /*!40100 DEFAULT CHARACTER SET utf8 */;USE `mybatis`;/* 테이블 `author`의 테이블 구조 */DROP TABLE IF EXISTS `author`;CREATE TABLE `author` (
 `author_id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '작자ID主键',
 `author_username` varchar(30) NOT NULL COMMENT '작자용户name',
 `author_passWord` varchar(32) NOT NULL COMMENT '작자密码',
 `author_email` varchar(50) NOT NULL COMMENT '작자邮箱',
 `author_bio` varchar(1000) DEFAULT '这家伙很赖,什么也没留下' COMMENT '작자简介',
 `register_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '注册时间',  PRIMARY KEY (`author_id`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;/*`author 테이블에 대한 데이터 ` */insert  `author`(`author_id`,`author_username`,`author_password`,`author_email`,`author_bio`,`register_time`) 값(1,'张三','123456','123@QQ .com','张三是个新手,刚开始注册','2015-10-29 10:23:59'),(2,'이사','123asf','lisi@163.com','魂牵梦萦 ','2015-10-29 10:24:29'),(3,'王五','dfsd342','ww@sina.com','康熙王朝','2015-10-29 10: 25:23'),(4,'赵六','123098sdfa','zhaoliu@qq.com','꽃午骨','2015-10-29 10:26:09'),(5,'钱七','zxasqw','qianqi@qq.com','这家伙很赖,什么也没留下','2015-10-29 10:27:04'),(6,'张三丰', '123456','zhangsf@qq.com','这家伙很赖,什么也没留下','2015-10-29 11:48:00'),(7,'张无忌','qwertyuiop', 'wuji@163.com','这家伙很赖,什么也没留下','2015-10-29 11:48:24'),(8,'fdsf','ffff','fdsfds', NULL,NULL),(9,'fdsf','ffff','fdsfds',NULL,NULL),(10,'aaaa','bbbb','ddd@qq.com','这家伙很赖,什么也没留下','2015-10-29 22:07:45');/*`blog` 테이블의 테이블 구조 */DROP TABLE IF EXISTS `blog`;CREATE TABLE `blog`(
 ` blog_id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'BlogId主键',
 `blog_title` varchar(255) NOT NULL COMMENT 'blog标题',
 `author_id` int(11) unsigned NOT NULL COMMENT '작자 ID외键',  PRIMARY KEY (`blog_id`),  KEY `fk_author_id` (`author_id`),  CONSTRAINT `fk_author_id` FOREIGN KEY (`author_id`) REFERENCES `author` (`author_id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;/*`blog` 테이블의 데이터 */`blog`(`blog_id`,`blog_title`,`author_id`) 값에 삽입(1,'작은 블로그',1) ,(2,'작은 리',2),(3,'王五不是人',3),(4,'赵地人',4),(5,'钱钱钱',5);/ *`posts` 테이블의 테이블 구조 */DROP TABLE IF EXISTS `posts`;CREATE TABLE `posts` (
 `post_id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '文章主键ID',
 `post_subject ` varchar(255) NOT NULL COMMENT '文章主题,标题',
 `post_body` text NOT NULL COMMENT '文章内容最大3000个字符',
 `blog_id` int(11) unsigned NOT NULL COMMENT 'Blog主键做外键',
 `createtime` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '文章创建时间',  PRIMARY KEY (`post_id`),  KEY `fk_blog_id` (`blog_id`),  CONSTRAINT `fk_blog_id` FOREIGN KEY (`blog_id` ) 참조 `blog`(`blog_id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4;/*`posts` 테이블의 데이터 */`posts`(`post_id`,`post_subject`,`post_body`,`blog_id`,`createtime`) 값에 삽입 (1, 'MyBatis 소개 1', 'MyBatis란 무엇입니까? rnMyBatis는 맞춤형 SQL, 저장 프로시저 및 고급 매핑을 지원하는 탁월한 지속성 계층 프레임워크입니다. MyBatis는 거의 모든 JDBC 코드와 매개변수 수동 설정 및 결과 세트 획득을 방지합니다. MyBatis 구성 및 기본 맵에 간단한 XML 또는 주석을 사용하여 인터페이스 및 Java POJO(Plain Old Java Objects, 일반 Java 객체)를 데이터베이스의 레코드에 매핑할 수 있습니다. ',1,'2015-10-29 10: 32:21') ,(2,'Mybatis 2 소개','MyBatis를 사용하려면 클래스 경로에 mybatis-x.x.x.jar 파일을 넣으시면 됩니다.',1,'2015-10-29 10:32:52 '),(3,' Oracle Learning','Oracle Database, Oracle RDBMS, 줄여서 Oracle이라고도 합니다. 오라클사의 관계형 데이터베이스 관리 시스템입니다.',2,'2015-10-29 10:33:26' ),(4, 'JAVA 학습 1','Java는 Sun Microsystems가 1995년 5월 출시한 Java 객체지향 프로그래밍 언어이자 Java 플랫폼의 총칭입니다.',3,'2015-10-29 10:34:17'),(5 ,'PL/SQL','PL/SQL은 Procedural Language/SQL이라는 프로그래밍 언어이기도 합니다. PL/SQL은 Oracle 데이터베이스를 SQL 문으로 확장한 것입니다.',4, '2015-10-29 10:37:52' ),(6,'CSS 태그 선택기','태그 선택기rnID 선택기rn클래스 선택기rn특수 선택기',5,'2015-10-29 10 :39:44'),(7,'javascript','js:는 프런트 엔드입니다. 스크립팅 언어',2,'2015-10-29 10:40:18');/*!40101 SET SQL_MODE=@OLD_SQL_MODE */ ;/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;/*!40014 SET UNIQUE_CHECKS =@OLD_UNIQUE_CHECKS */;/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

데이터 테이블 및 데이터

2. 프로젝트 생성

2.1. 프로젝트 생성


3.

3.1, 3개 엔터티 클래스

package com.pb.mybatis.po; import java.util.Date;/**
*

* @ClassName: 저자

* @Description: TODO(저자)

* @author Liu Nan

* @date 2015 -10-31 오후 12:39:33

**/public class 작성자 { //저자 ID
private IntegerauthorId; //저자 이름
private StringauthorUserName; //저자 비밀번호
private StringauthorPassword; //저자 이메일
//저자 소개
private String authroBio; //등록 시간
private Date RegisterTime


public Integer getAuthor ID() { returnauthorId;
} public void setAuthorId(Integer AuthorId) authorId =authorId;
} public String getAuthorUserName() { returnauthorUserName;
} public void setAuthorUserName(String ingauthorUserName) { this.authorUserName =authorUserName;
} public String getAuthorPassword() { returnauthorPassword;
} public void setAuthorPassword(String AuthorPassword) { this.authorPassword =authorPassword;
} public String getAuthorEmail() { returnauthorEmail;
} public void setAuthorEmail(String AuthorEmail) { this.authorEmail =authorEmail;
} public String getAuthroBio() { return authroBio;
} public void setAuthroBio(String authroBio) { this.authroB io = authroBio;
} public Date getRegisterTime() {       returnregisterTime;
  }     public void setRegisterTime (날짜 등록 시간) {         this.registerTime =registerTime; +authorId + ",authorUserName=" 🎜 > }


}




패키지 com.pb.mybatis.po;import java.util.List;public class Blog {    
   //Blog,ID
   private Integer blogId;    //Blog name称标题
   private String blogTitle;    //외주저자 ID    //작자
   개인 저자 작성자;    //文章 列表
   private Integer 작성자 ID;    
   //文章列表
   비공개 목록 게시물목록;    
   
   public Integer getBlogId() {        return blogId;
   }    public void setBlogId(Integer blogId) {        this.blogId = blogId;
   }    public String getBlogTitle() {     return blogTitle;
   } public void setBlogTitle(String blogTitle) {        this.blogTitle = blogTitle;
   }    public Author getAuthor() {        returnauthor;
   }    public void setAuthor(저자 작성자) {        this.author = 작성자;
   }   공개 정수 getAuthorId() {        return AuthorId;
   }    public void setAuthorId(IntegerauthorId) {        this.authorId =authorId;
   }    public List getPostsList() {        returnpostList;
   }    public void setPostsList(ListpostList) {        this.postsList = postList;
   }
   
   
   @Override    public 문자열 toString() {        반환 "블로그 [blogId=" + blogId + ", blogTitle=" + blogTitle                +  ",authorId=" +authorId + "]";
   }
   
   

   
   
   

}

 

package com.pb.mybatis.po;import java.util.Date;public class 게시물 {    //文章ID
개인 정수 postId;    //文章标题
   private String postTitle;    //文章主体内容
   private String postBody;    
   //외键
   private Integer blogId;    //建立时间
   private Date createTime;    
   
   public Integer getPostId() {        return postId;
   }    public void setPostId(Integer postId) {        this.postId = postId;
   }    public String getPostTitle() {       return postTitle;
   } public void setPostTitle(String postTitle) {        this.postTitle = postTitle;
   }    public String getPostBody() {        return postBody;
   }    public void setPostBody(String postBody) {        this.postBody = postBody;
   }    공개 Date getCreateTime() {        return createTime;
   }    public void setCreateTime(Date createTime) {        this.createTime = createTime;
   }    
   
   public Integer getBlogId() {        return blogI d;
   }    공개 void setBlogId(정수 blogId) {        this.blogId = blogId;
   }
   @Override    public String toString() {        return "게시물 [postId=" + postId + ", postTitle=" + postTitle                + ", postB 몸= " + postBody + ", createTime=" + createTime                + ", blogId=" + blogId + "]";
   }
   
   
   
   
   
   
}

 

 

 

3.2、3个接口

 

패키지 com.pb.mybatis.mapper;import com.pb.mybatis.po.Author;public 인터페이스 AuthorMapper {    /**
*

* @Title: findAuthorById

* @Description: TODO(ID로 검색)

* @param @param id
* @param @ return 설정 파일

* @return 작성자 반환 유형

* @throws
*/
   public Author findAuthorById(int id);
}

 

패키지 com.pb.mybatis.mapper;import com.pb.mybatis.po.Blog;공용 인터페이스 BlogMapper {    
   /**
*

* @Title: findBlogById

* @Description: TODO(BLOGID를 기준으로 BLOG를 찾아 작성자를 연결하고 게시물로 지연 로딩 구현)

* @param @param id
* @param @return 설정 파일

* @return 블로그 반환 유형

* @throws
*/
   공개 블로그 findBlogById(int blogId);

}

 

package com.pb.mybatis.mapper;import java.util.List;import com.pb.mybatis.po.Posts;공용 인터페이스 PostsMapper {    /**
*

* @Title: findPostsByBlogId

* @Description: TODO(BLOGID를 기준으로 게시물 목록 찾기)

* @param @param blogId
* @ param @return 설정 파일

* @return List 반환 유형

* @throws
*/
   공용 List findPostsByBlogId(int blogId);
}

 

 

 

 

4、建立mapper.xml与confinguration.xml

4.1, 相对应的mapper.xml

AuthorMapper.xml

 

br/>  PUBLIC "-//mybatis.org//DTD 매퍼 3.0//EN"
 "http://mybatis.org/dtd/mybatis-3- mapper.dtd"> resultMap>

 

 

 

BlogMapper.xml

 

br/> PUBLIC "-//mybatis.org//DTD 매퍼 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd"> > ;

PostsMapper.xml

br/> PUBLIC "-//mybatis.org//DTD 매퍼 3.0//EN"
"http:// mybatis.org/dtd/mybatis-3-mapper.dtd">

4.2,configuration.xml

db.properties

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?character=utf8
사용자 이름=root
비밀번호 =root

지연 로딩 활성화 및 즉시 로딩 끄기







br/> PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">< ;settings>< ;environments default=" development">


< ;!--데이터 소스 -->







5.1. 준잇

패키지 com.pb.mybatis.mapper;import java.io.InputStream;import java.util.List;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org .apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;import org.junit.Before;import org.junit.Test;import com.pb.mybatis.po.Blog;import com.pb. mybatis.po.posts; public class blogmappertest {private sqlsessionfactory sqlsessionfactory;
@before public void setup () 예외 { String config = "configuration.xml"; inputstream resource = resources. getResourceAsStream(config);
       sqlSessionFactory=new SqlSessionFactoryBuilder().build(resource);
   }    /**
*

* @Title: testFindBlogs

* @Description: TODO(지연 로딩)

* @param 설정 파일

* @return void 반환 유형

* @throws
*/
   @Test    public void testFindBlogById() {        //建立会话
SqlSession sqlSession=sqlSessionFactory.openSession();        //获取Mapper接口对象
       BlogMapper blogMapper=sqlSession.getMapper(BlogMapper.class);        //사용Mapper 방법
       Blog blog=blogMapper.findBlogById(1);
       
       System.out.println(blog.getBlogId()+"..."+blog.getBlogTitle());
       System.out.println("===========开始延时加载작작자============");
       System.out.println(블로그 .getAuthor());
       System.out.println("===========开始延时加载文章===========");
       목록< ;게시물> list=blog.getPostsList();        /*int count=0;
       for(게시물 p:list){
           System.out.println("count+"+count++);
           System.out.println(p.getPostId());
           System.out.println(p.getPostTitle());
           System.out.println(p.getPostBody());
           System.out.println(p.getCreateTime());
System.out.println (p.getBlogid ());
}*/
}




结果:

디버그 [메인] - ==>  준비 중: SELECT * FROM 블로그 WHERE blog_id=? 디버그 [기본] - ==> 매개변수: 1(정수)

DEBUG [main] - 1...작은 블로그===========开始延时加载작자저자= ==========디버그 [메인] - ==>  준비 중: 작성자_ID=? 작성자에서 *를 선택하세요. 디버그 [기본] - ==> 매개변수: 1(정수)

DEBUG [main] -  준비 중: blog_id=?인 게시물에서 *를 선택하세요. 디버그 [기본] - ==> 매개변수: 1(정수)

DEBUG [main] -

 

六、一级缓存
6.1、mybatis一级缓存

 mybatis,默认开启了一级缓存,sqlSession中默认有一个hashMap

当查询时,先去hashMap中查找,

如果有就直接,取出,不再操数据库

如果没有就去数据库查找,并放在haspMap中

当做事물时,如添加,删除,修改,后有commit时会清空一级缓存

sqlSession是互不影响的,一级缓存

 MyBatis 시작하기 (5) --- 지연된 로딩 및 캐싱

6.2、还是上级的例子

测试:查询用户

 

 

패키지 com.pb.mybatis.mapper;import static org.junit.Assert.*;import java.io.InputStream;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession ;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;import org.junit.Before;import org.junit.Test;import com.pb.mybatis.po.Author;공용 클래스 AuthorMapperTest {    private SqlSessionFactory sqlSessionFactory;

   @Before    public void setUp()에서 예외 발생 {
       String config="configuration.xml";
       InputStream Resource=Resources.getResourceAsStream(config);
sqlSessionFactory=new SqlSessionFactoryBuilder().build(resource);
   }

   @Test    public void testFindAuthorById() {        //获取会话工厂
       Sql 세션 sqlSession=sqlSessionFactory.openSession();
AuthorMapper AuthorMapper=sqlSession.getMapper(AuthorMapper.class);        //第一次查询
       저자author1=authorMapper.findAuthorById(2);
       System.out.println(author1);        //再次查询同样的
       저자author2=authorMapper.findAuthorById(2);
       System.out.println(author2);        

 

 

 

结果:

 

DEBUG [main] - ==>  준비 중: 작성자_ID=? 작성자에서 *를 선택하세요. 디버그 [기본] - ==> 매개변수: 2(정수)

DEBUG [main] - 저자 [authorId=2,authorUserName=이사,authorPassword=123asf,authorEmail=lisi@163.com,authroBio=魂牵梦萦 ,registerTime=Thu Oct 29 10:24:29 CST 2015]

디버그 [main] - ==>  준비 중: 작성자_ID=? 작성자에서 *를 선택하세요. 디버그 [기본] - ==> 매개변수: 4(정수)

DEBUG [main] -

 

 

 

6.3、当查询后,做事务,再查询第一次的

接口中做添加方法

 

/**

*

* @Title: addAuthor

* @Description: TODO(추가)

* @param @param 작성자
* @param @return Set 정의된 파일

* @return int 반환 유형

* @throws
*/
   public int addAuthor(저자 작성자);


 

 

 

mapper.xml中做同样적select

 

< ; 설정 name="aggressiveLazyLoading" value="false"/>> ;

2. Mapper는 직렬화를 구현하기 위해 pojo 클래스를 일치시킵니다

MyBatis 시작하기 (5) --- 지연된 로딩 및 캐싱

3. authorMapper


7.3. 테스트

@Test public void testCache() { // 세션 팩토리 가져오기
SqlSession sqlSession1 = sqlSessionFactory .openSession () ;
AuthorMapper1 = sqlSession1.getMapper(AuthorMapper.class); // 첫 번째 쿼리
AuthorMapper1 = AuthorMapper1.findAuthorById(2); //해제해야 하며 캐시 영역에 데이터를 쓸 수 없습니다. qlSession1.close( ; sqlSession2.close();*/
// 세션 팩토리 가져오기
SqlSession sqlSession3 = sqlSessionFactory.openSession();
AuthorMapper3 = sqlSession3.getMapper(AuthorMapper.class); // 첫 번째 쿼리
작성자 Author3 =authorMapper3.findAuthorById(2) ;
sqlSession3.close();
}



DEBUG [main] - 캐시 히트 비율 [com.pb.mybatis.mapper.AuthorMapper]: 0.0 DEBUG [main] - JDBC 연결 열기

DEBUG [main] - 생성된 연결 873769339.

DEBUG [main] - JDBC 연결에서 자동 커밋을 false로 설정 [ com.mysql.jdbc.JDBC4Connection@3414a97b]

DEBUG [main] - ==> 준비: 작성자에서 * 선택(author_id=? DEBUG [main] - ==> 매개변수: 2(정수)
DEBUG [main] - DEBUG [main]에서 자동 커밋을 true로 재설정 중 [com.mysql. jdbc.JDBC4Connection@3414a97b]
DEBUG [main] - 풀에 대한 연결 873769339를 반환했습니다.
DEBUG [main] - 캐시 적중률 [com.pb.mybatis.mapper.AuthorMapper]: 0.5


중간 커밋 작업 추가

@ Test public void testCache() { // 세션 팩토리 가져오기

SqlSession sqlSession1 = sqlSessionFactory.openSession();

AuthorMapper1 = sqlSession1.getMapper( AuthorMapper.class); // 첫 번째 쿼리

Author Author1 =authorMapper1.findAuthorById(2); //캐시 영역에 데이터를 쓸 수 없으므로 닫아야 합니다. sqlSession1.close(); AuthorMapper.class);
Author2 =authorMapper2.findAuthorById(2); //업데이트
author2.setAuthorUserName("Chairman");
author2.setAuthroBio("회사");
authorMapper2.updateAuthor (author2); //커밋하면 캐시 영역이 지워집니다. sqlSession2.commit();
sqlSession2.close(); // 세션 팩토리 가져오기
SqlSession s qlSession3 = sqlSessionFactory.openSession();
AuthorMapper authorMapper3 = sqlSession3.getMapper(AuthorMapper.class); // 첫 번째 쿼리
AuthorMapper3 =authorMapper3.findAuthorById(2);
sqlSession3.close();
}


결과 :

DEBUG [main] - 캐시 적중률 [com.pb.mybatis.mapper.AuthorMapper]: 0.0DEBUG [main] - JDBC 연결 열기
DEBUG [main] - 생성된 연결 873769339.
DEBUG [main] ] - JDBC 연결 [com.mysql.jdbc.JDBC4Connection@3414a97b]
DEBUG [main]에서 자동 커밋을 false로 설정 - ==>  준비 중: 작성자_ID=? 작성자에서 *를 선택하세요. 디버그 [기본] - ==> 매개변수: 2(정수)
DEBUG [main] - DEBUG [main]에서 자동 커밋을 true로 재설정 - JDBC 연결 종료 [com.mysql.jdbc.JDBC4Connection@3414a97b]
DEBUG [main] - 연결 873769339를 풀로 반환했습니다.
DEBUG [main] - 캐시 적중률 [com.pb.mybatis.mapper.AuthorMapper ]: 0.5DEBUG [main] - JDBC 연결 열기
DEBUG [main] - 풀에서 873769339 연결을 확인했습니다.
DEBUG [main] - JDBC 연결 [com.mysql.jdbc.JDBC4Connection@에서 자동 커밋을 false로 설정합니다. 3414a97b]
디버그 [main] - ==>  준비 중: 작성자 업데이트 SETauthor_username=?,author_password=?,author_email=?,author_bio=?,register_time=? 어디에서 작성자_ID=? 디버그 [기본] - ==> 매개변수: 董事长(문자열), 123asf(문자열), lisi@163.com(문자열), 공사(문자열), 2015-10-29 10:24:29.0(타임스탬프), 2(정수)
DEBUG [ main] - DEBUG [main] - JDBC 연결 [com.mysql.jdbc. JDBC4Connection@3414a97b]
DEBUG [main] - JDBC 연결 종료 [com.mysql.jdbc.JDBC4Connection@3414a97b]
DEBUG [main] - 연결 873769339를 풀로 반환했습니다.
DEBUG [main] - 캐시 적중 비율 [com.pb.mybatis.mapper.AuthorMapper]: 0.3333333333333333DEBUG [main] - JDBC 연결 열기
DEBUG [main] - 풀에서 연결 873769339를 체크아웃했습니다.
DEBUG [main] - 자동 커밋을 false로 설정 JDBC 연결 [com.mysql.jdbc.JDBC4Connection@3414a97b]
DEBUG [main] - ==>  준비 중: 작성자_ID=? 작성자에서 *를 선택하세요. 디버그 [기본] - ==> 매개변수: 2(정수)
DEBUG [main] - DEBUG [main]에서 자동 커밋을 true로 재설정 - JDBC 연결 종료 [com.mysql.jdbc.JDBC4Connection@3414a97b]
DEBUG [main] - 연결 873769339를 풀로 반환했습니다.

 

八、Mybatis与ehcache整합

8.1、把jar包导入项目

MyBatis 시작하기 (5) --- 지연된 로딩 및 캐싱

8.2、建立ehcache.xml

ehcache.xml

 

   xsi:noNamespaceSchemaLocation="../config/ehcache.xsd">
> 🎜>        overflowToDisk=" false"
       timeToIdleSeconds="120"
       timeToLiveSeconds="120"
       diskExpiryThreadIntervalSeconds="120"
       memoryStoreEvictionPolicy="LRU">
   


 

 

 

8.3、매퍼적캐시중점유형

 

type指定为ehcachecache类开지금 ehcache와 mybatis의 整合包中 -->

 

 

 

8.4、测试

 

@Test public void testCache() { // 세션 팩토리 가져오기
SqlSession sqlSession1 = sqlSessionFactory.openSession();
AuthorMapper1 = sqlSession1.getMapper(AuthorMa pper.class) // 첫 번째 쿼리
AuthorMapper1.findAuthorById(2); //닫아야 하며 캐시 영역에 데이터를 쓸 수 없습니다. sqlSession1.close(); //세션 팩토리 가져오기
SqlSession sqlSession2 = sqlSessionFactory.openSession();
AuthorMapperauthorMapper2 = sqlSession2.getMapper(AuthorMapper.class);
작성자author2 =authorMapper2.findAuthorById(2); //업데이트
author2.setAuthorUserName("Chairman");
author2.setA uthroBio(" Company" );
authorMapper2.updateAuthor(author2); //커밋하면 캐시 영역이 지워집니다. sqlSession2.commit();
sqlSession2.close(); // 세션 팩토리 가져오기
S qlSession sqlSession3 = sqlSessionFactory.openSession() ;
AuthorMapper3 = sqlSession3.getMapper(AuthorMapper.class); // 첫 번째 쿼리
AuthorMapper3 =authorMapper3.findAuthorById(2);
sqlSession3.close();
}

결과:

DEBUG [main] - 클래스 경로에 있는 ehcache.xml에서 ehcache 구성: file:/E:/mywork/MybatisDemo2/bin/ehcache.xml
DEBUG [main] - URL에서 ehcache 구성: file:/ E:/mywork/MybatisDemo2/bin/ehcache.xml
DEBUG [main] - InputStream에서 ehcache 구성
DEBUG [main] - ehcache 속성 무시 xmlns:xsi
DEBUG [main] - ehcache 속성 xsi 무시 :noNamespaceSchemaLocation
DEBUG [main] - 디스크 저장소 경로: F:developehcache
DEBUG [main] - 기본 구성으로 새 CacheManager 생성
DEBUG [main] - PropertiesString은 null입니다.
DEBUG [main] - CacheManagerEventListenerFactory 클래스가 지정되지 않았습니다. 건너뛰는 중...
DEBUG [main] - BootstrapCacheLoaderFactory 클래스가 지정되지 않았습니다. 건너뛰는 중...
DEBUG [main] - CacheWriter 공장이 구성되지 않았습니다. 건너뛰는 중...
DEBUG [main] - CacheExceptionHandlerFactory 클래스가 지정되지 않았습니다. 건너뛰는 중...
DEBUG [main] - 초기화된 net.sf.ehcache.store.NotifyingMemoryStore for com.pb.mybatis.mapper.AuthorMapper
DEBUG [main] - 초기화된 캐시: com.pb.mybatis.mapper .AuthorMapper
DEBUG [main] - CacheDecoratorFactory가 defaultCache에 대해 구성되지 않았습니다. 'com.pb.mybatis.mapper.AuthorMapper'를 건너뛰는 중입니다.
DEBUG [main] - 캐시 적중률 [com.pb.mybatis.mapper.AuthorMapper]: 0.0DEBUG [main] - JDBC 연결 열기
DEBUG [main] - 생성된 연결 1286943672.
DEBUG [main] - JDBC 연결에서 자동 커밋을 false로 설정 [com.mysql.jdbc.JDBC4Connection@4cb533b8]
DEBUG [main] - ==>  준비 중: 작성자_ID=? 작성자에서 *를 선택하세요. 디버그 [기본] - ==> 매개변수: 2(정수)
DEBUG [main] - DEBUG [main]에서 자동 커밋을 true로 재설정 - JDBC 연결 종료 [com.mysql.jdbc.JDBC4Connection@4cb533b8]
DEBUG [main] - 연결 1286943672를 풀로 반환했습니다.
DEBUG [main] - 캐시 적중률 [com.pb.mybatis.mapper.AuthorMapper ]: 0.5DEBUG [main] - JDBC 연결 열기
DEBUG [main] - 풀에서 1286943672 연결을 확인했습니다.
DEBUG [main] - JDBC 연결 [com.mysql.jdbc.JDBC4Connection@에서 자동 커밋을 false로 설정합니다. 4cb533b8]
디버그 [main] - ==>  준비 중: 작성자 업데이트 SETauthor_username=?,author_password=?,author_email=?,author_bio=?,register_time=? 어디에서 작성자_ID=? 디버그 [기본] - ==> 매개변수: 董事长(문자열), 123asf(문자열), lisi@163.com(문자열), 공사(문자열), 2015-10-29 10:24:29.0(타임스탬프), 2(정수)
DEBUG [ main] - DEBUG [main] - JDBC 연결 [com.mysql.jdbc. JDBC4Connection@4cb533b8]
DEBUG [main] - JDBC 연결 종료 [com.mysql.jdbc.JDBC4Connection@4cb533b8]
DEBUG [main] - 연결 1286943672를 풀로 반환했습니다.
DEBUG [main] - 캐시 적중 비율 [com.pb.mybatis.mapper.AuthorMapper]: 0.3333333333333333DEBUG [main] - JDBC 연결 열기
DEBUG [main] - 풀에서 연결 1286943672를 체크아웃했습니다.
DEBUG [main] - 자동 커밋을 false로 설정 JDBC 연결 [com.mysql.jdbc.JDBC4Connection@4cb533b8]
DEBUG [main] - ==>  준비 중: 작성자_ID=? 작성자에서 *를 선택하세요. 디버그 [기본] - ==> 매개변수: 2(정수)
DEBUG [main] - DEBUG [main]에서 자동 커밋을 true로 재설정 - JDBC 연결 종료 [com.mysql.jdbc.JDBC4Connection@4cb533b8]
DEBUG [main] - 연결 1286943672를 풀로 반환했습니다.

 以上就是MyBatis入门(五)---延时加载、缓存的内容,更多敳关内容请关注PHP中文网(m.sbmmt.com)! 


원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿