MyBatis入門(五)---延時載入、快取
一、建立資料庫
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 *OLD;//*40014 SET =@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;/*!401111 SET @NO資料庫/*!32312 如果不存在*/`mybatis` /*!40100 預設字元集utf8 */;USE `mybatis`;/*表`author` 的表結構*/DROP TABLE IF EXISTS `author`;CREATE TABLE `author` (
`author_id` int(11) unsigned NOT NULL AUTO_INCRMENT COMMENT '作者ID主鍵',
`author_username` varchar(30) NOT NULL COMMENT '作者用戶名',2 N 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_INCRMENT=11 DEFAULT CHARSET=utf8;/*表格`author` 的資料* `author_username`,` author_password`,`author_email`,`author_bio`,`register_time`) values (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,'張無忌','qwertuiop','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_INCRMENT COMM_id` int(11) unsigned NOT NULL AUTO_INCRMENT COMMENT 'BlogId 主鍵',
`blog_title` varchar(255) NOT NULL COMMENT '部落格標題',
`author_id` int(11) unsigned NOT NULL COMMENT '作者ID外鍵', PRIMARY KEY (`blog_`id`) ( fk_author_id` (`author_id`), CONSTRAINT `fk_author_id` FOREIGN KEY (`author_id`) REFERENCES `author` (`author_id`)
) ENGINE=InnoDB AUTO_INCliterENT=6author_id`)
) ENGINE=InnoDB AUTO_INCliterENT=6 /insert into `blog`(` blog_id`,`blog_title`,`author_id`) values (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_INCRMENT COMMENT '文章主鍵ID',
`post_subject` varchar(255) NOT NULL COMMENT '文章主題, COMMENT '最大3000個內容內容',
`blog_id` int(11) unsigned NOT NULL COMMENT '博客主鍵做外鍵',
`createtime` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '``createtime` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '``Y. KEY `fk_blog_id` (` blog_id`), 約束`fk_blog_id` 外鍵(`blog_id`) 引用`blog` (`blog_id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4;/*Data for the table `posts` */insert into `posts`(`post_id`,`post_subject`,`post_body`,`blog_id`,`createtime`. (1,'Mybatis入門一','什麼是MyBatis ?rnMyBatis 是支援客製化SQL、預存程序以及高級映射的優秀的持久層框架。MyBatis 避免了幾乎所有的JDBC 程式碼和手動設定參數以及取得結果集。 MyBatis 可以對配置和原生Map使用簡單的xml 或註解,將介面和java 的POJOs(Plain Old Java Objects,普通的Java物件)映射成資料庫中的記錄。 32:21'),(2,'Mybatis入門二','要使用MyBatis, 只需將mybatis-x.x.x.jar 檔案置於classpath 中即可。',1,'2015-10-29 10:32:52 '),(3,'Oracle學習','Oracle Database,又稱為Oracle RDBMS,或簡稱Oracle。是甲骨文公司的關聯式資料庫管理系統',2,'2015-10-29 10:33:26' ),(4,'JAVA學習一','Java是由Sun Microsystems公司於1995年5月推出的Java物件導向程式設計語言和Java平台的總稱',3,'2015-10-29 10:34: 17'),(5,'PL/SQL','PL/SQL也是一種程式語言,叫做過程化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 */SQL/*!40111 SETSQL_NOTES=@UNIQUE_CHECKS */SQL*
三、建立實體類別與Mapper介面
.util.Date;/**
* * @ClassName: Author* @Description: TODO(作者)* @author 劉劉 劉劉南* @date 2015-10-3112:39:333312:39:333112:39*/public class Author { //作者id private Integer authorId; //作者姓名
private String authorUserName;作者信箱
private String authorEmail; //作者介紹
private String authroBio; //註冊時間
private Date registerTime;
private Date registerTime;
private Date registerTime; return authorId;
} public void setAuthorId(Integer authorId) { this.authorId = authorId;
} public String getAuthorUserName() { return authorUserName;
} public void setAuthorUserName(String authorUser") { AuthorPassword() { return authorPassword;
} public void setAuthorPassword(String authorPassword) { this.authorPassword(String authorPassword) { this.authorPassword = authorPassword;
} public String getAuthorEmail() { return authorEmail;
} public v. } public String getAuthroBio() { return authroBio;
} public void setAuthroBio(String authroBio) { this.authroBio = authroBio;
} public Date getRegisterTime() { return registerTime; = registerTime;
}
@Override public String toString() { return "Author [authorId =" + authorId + ", authorUserName="
+ authorUserName + ", authorPassword=" + authorPassword hormail +o + ammo + avol oolPassword=" + authorPassword horo +a + ammo + oge, the 褐@@ + ammo + coo Let," + ", registerTime=" + registerTime + "]";
}
}
package com.pb.mybatis.po;import java.util.List;public class Blog {
//Blog,ID
private Integer blogId; 詞// //作者
私人作者author; // 文章列表
private IntegerauthorId;
//文章列表
{ return blogId;
} public void setBlogId(Integer blogId) { this .blogId = blogId;
} public String getBlogTitle() { return blogTitle;
} public void setBlogTitle(String blog ) } public Author getAuthor() { returnauthor;
} public void setAuthor(Author writer ) { this.author = 作者;
} public Integer getAuthorId() { returnauthorId;hor>this. horId;
} 公共清單; getPostsList() { return postsList;
} public void setPostsList(List
}
blogId + “ , blogTitle=" + blogTitle + ", authorId=" +authorId + "]";
}
pop.匯入java.util.Date ;public class Posts { //文章ID
private Integer postId; // 文章標題
private String postTitle; // 文章主體內容
private String postBody; ; //建立時間
private Date createTime;
public Integer getPostId() { return postId;
} public void setPostId(Integer postId) { this.postId = postIdtle
} public void setPostTitle(String postTitle) { this. postTitle = postTitle;
} public String getPostBody() { return postBody;
} public void setCreateTime(Date createTime ) { this.createTime = createTime ;
}
public Integer getBlogId() { return blogId;
}
@Override public String toString() { return "貼文[postid =「 + postid +”,posttitle =“ + posttitle +”,postbody =“ + postbody +”,casteTime =“ + castement +”,blogid =“ + blogid +”];
}
、3個介面
package com.pb.mybatis.mapper;import com.pb.mybatis.po.Author;公共介面AuthorMapper { /**
*
* @Title: findAuthorById
* @Description: TODO(依id) @param) @return 設定檔
* @return Author
* @return Author 返回型別
* @ throws
*/
public Author findAuthorById(int id); com.pb.mybatis.mapper;導入com.pb.mybatis.po.Blog;公共介面BlogMapper {
/**
*
* @Title: findBlogById
* @Description: TODO( id
* @param @return 設定文件
* @return Blog 回傳類型
* @throws
*/
公共部落格com.pb.mybatis.mapper;導入java.util.List;導入com.pb.mybatis.po.Posts;公共介面PostsMapper { /**
*
* @Title: findPostsByBlogId
* @Description: TODO(根據BLOGID 查找列表) * @param @return 設定檔
* @return List
* @throws
*/
public List
}
、四建立mapper.xml與confinguration.xml
4.1、相對應的mapper.xml與confinguration.xml
4.1、相對應的mapperxml.
br/> PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/ dtd/mybatis-3-mapper .dtd">
.
br/> PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/ dtd/mybatis-3-mapper.dtd">
PostsMapper.xml
/p> PUBLIC "-//mybatis.org// "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
.properties
url=jdbc:mysql://localhost:3306/mybatis?character=utf8🜎時加載,同時關閉立即加載
!--資料來源 ->
套件com.pb.mybatis.mapper;導入java.io.InputStream;導入java.util.List;導入org.apache.ibatis.io.Resources;導入org.apache.ibatis.session.SqlSession;導入org.apache .ibatis.session.SqlSessionFactory;導入org.apache.ibatis.session.SqlSessionFactoryBuilder;導入org.junit.Before;導入org.junit.Test;導入com.pb.mybatis.po.Blog;導入com.pb.mybatis。 po.Posts;public class BlogMapperTest { private SqlSessionFactory sqlSessionFactory;
@Before public void setUp() throws Exception {
xml public void InputStream resource=Resources.getResourceAsStream(config);
sqlSessionFactory=新SqlSessionFactoryBuilder ().build(resource);
} /**
*
* @Title: testFindBlogs
* @Description: TODO(延遲載入)
* @Description: TODO(延遲
* @return void 回傳型
* @throws
*/
@Test public void testFindBlogById() { sqlion open////////「 ion(); //取得Mapper介面物件
BlogMapper blogMapper =sqlSession。 +blog.getBlogTitle( ));
System.out.println( "==========開始延遲載入authorAuthor===========");
System.out.println(blog.getAuthor( ));
System.out .println("==========開始延遲載入文章===========");
List;清單=blog.getPostsList (); /*int count=0;
for(貼文p:list){
System.out.println("count+"+count++); Id());
System. out.println (p.getPostTitle());
System.out.println(p.getPostBody());
System.out.println(p.getBlogId( ));
}*/
}
}
==
. =?調試[主要] - ==>參數:1(Integer)
DEBUG [main] - 1...小張的部落格===========開始延遲載入作者作者===== === ===調試[主要] - ==> 準備:從作者中選擇*,其中author_id=?調試[主要] - ==>參數: 1(Integer)
DEBUG [main] - ; 準備:從blog_id=? 的貼文中選擇*?調試[主要] - ==>參數: 1(Integer)
DEBUG [main] -
當查詢時,先去hashMap中查找,
如果有就直接,取出,不再操作資料庫
如果沒有就去資料庫查找,並放在haspMap中
當做事情時,如添加,刪除,修改,有commit時會清空一級伺服器
當做事情時,如添加,刪除,修改,有commit時會清空一級伺服器sqlSession是互不影響的,一級伺服器
6.2、還是上級的例子
6.2、還是上級的範例查詢用戶
套件com.pb.mybatis.mapper;導入靜態org.junit.Assert.*;導入java.io.InputStream;導入org.apache.ibatis.io.Resources;導入org.apache.ibatis.session.SqlSession; org.apache.ibatis.session.SqlSessionFactory;導入org.apache.ibatis.session.SqlSessionFactoryBuilder;導入org.junit.Before;導入org.junit.Test;導入com.pb.mybatis.po.Author;公共類別AuthorMapperTapper private SqlSessionFactory sqlSessionFactory;
@Before public void setUp() throws Exception {
sqlSessionFactory=new SqlSessionFactoryBuilder ().build(資源);
}
@Test public void testFindAuthorById() { //獲取會話工廠
sqlion open AuthorMapperauthorMapper=sqlSession.getMapper(AuthorMapper.class); //第一次查詢
作者author1=authorMapper .findAuthorById(2);
System.out.println(author1); //再查詢相同的
Author writer2aut.Mapper w. out.println(author2);
//再詢問不一樣的
作者author3=authorMapper.findAuthorById(4);
System.out.println(author3);
}
結果:
調試[主要] - ==>準備:從作者中選擇*,其中author_id=?調試[主要] - ==>參數: 2(Integer)
DEBUG [main] - 作者[authorId=2,authorUserName=李四,authorPassword=123asf,authorEmail=lisi@163.com,authroBiok=word=123asf,authorEmail=lisi@163.com,authroBio=word=word registerTime=Thu Oct 29 10:24:29 CST 2015]調試[主] - ==> 準備:從作者中選擇*,其中author_id=?調試[主] - ==>參數:4(Integer)DEBUG [main] -
6.3、當查詢後,做事務,再查詢一次
*
* @Title: addAuthor
* @Description: TODO(新增)
param para 設定檔* @return int 回傳型別
* @throws
*/
public int addAuthor(作者作者);
mapper.xml中做同樣的選擇
插入作者(author_username,author_password,author_email,author_bio)
VALUES(#{authorUserName},#{authorhor},{mail ,#{ authroBio})插入>
套件com.pb.mybatis.mapper;導入靜態org.junit.Assert.*;導入java.io.InputStream;導入org.apache.ibatis.io.Resources;導入org.apache.ibatis.session.SqlSession導入; org.apache.ibatis.session.SqlSessionFactory;導入org.apache.ibatis.session.SqlSessionFactoryBuilder;導入org.junit.Before;導入org.junit.Test;導入com.pb.mybatis.po.Author;公共類別AuthorMapperTapper private SqlSessionFactory sqlSessionFactory;
@Before public void setUp() throws Exception {
sqlSessionFactory=new SqlSessionFactoryBuilder ().build(資源);
}
@Test public void testFindAuthorById() { //獲取會話工廠
sqlion open AuthorMapperauthorMapper=sqlSession.getMapper(AuthorMapper.class); //第一次查詢
作者author1=authorMapper .findAuthorById(2);
System.out.println(author1);
System.out.println("==========下方有事務處理==== ===="); =new Author();
newAuthor.setAuthorEmail("qq.com@qq.com");
newAuthor.setAuthorPassword("fdsfds");
newAuthor.setAuthroBio("射雕英雄傳"); int num=authorMapper.addAuthor(newAuthor);
sqlSession.commit();
System.out.println("num="+num );
System. out.println("再查詢"); //再查詢相同的
作者author2=authorMapper.findAuthorBaut.2);
}
}
DEBUG [main] - 準備:插入作者(作者用戶名,作者密碼,作者電子郵件,作者生物)值(?,?,?,?)
DEBUG [main] - ==>參數:郭靖(String)、fdsfds(String)、qq.com @qq.com(String)、射雕英雄傳(String)DEBUG [main] - DEBUG [main] - ==> 準備:從作者中選擇*,其中author_id=?調試[主要] - ==>參數: 2(Integer)
DEBUG [main] -
sqlSession不互不影響的,一級伺服器
Mapper(namespace)是一級伺服器
多個sqlSession可以共享一個Mapper的二級伺服器區域
二級伺服器按namespace自己的二級伺服器區域namespace
第一個namespace的mapper都有一個二級伺服器區域,2個mapper的namespace如果相同,這2個mapper執行sql查詢資料將存在相同的二級伺服器區域中。
1.二級伺服器是mapper範圍等級的,除了在configuration.xml設定二級伺服器的總交換機,還在單獨的mapper.xml中開啟二級伺服器
2.mapper對就的pojo類,實現序列化
3.在authorMapper中開啟二級緩存
.
@Test public void testCache() { // 取得會話工廠
SqlSession sqlSession1 = sqlSession.openy.openSession(capper 1.getMapper(AuthorMapper.class); // 第一次查詢Author author1 = authorMapper1. findAuthorById(2); //必須關閉不資料無法寫入快取區域 sqlSession1.close(); // 取得會話工廠
openAuthorMapper authorMapper2 = sqlSession2.getMapper(AuthorMapper.class );
sqlSession2.close();*/ // 取得會話工廠
SqlSession 系統apper3 = sqlSession3.getMapper(AuthorMapper.class); // 第一次查詢
Author author3 = authorMapper3.findAuthorById(2);
sqlSession3.close();
}
DEBUG [
Opening JDBC Connection
DEBUG [main] - Created connection 873769339.
DEBUG Connectionbc.JDBC4man@3414a97b]
DEBUG [Connectionbc.JDBC. author_id=? DEBUG [main] - ==> Parameters: 2(Integer)DEBUG [main] - DEBUG [main] - Closing JDBC Connection [com.mysql.jdbc.JDBC4Connection@3414a97b]
DEBUG [main] - Returned connection 873769339 to pool.
DEBUG [maindm. .AuthorMapper]: 0.5
中間增加commit作業
@Test public void testCache() { // 取得會話工廠
Author author1 = authorMapper1.findAuthorById(2); //必須關閉不資料無法寫入快取區域 SqlSession sqlSession2 = sqlSessionFactory.openSession();
AuthorMapper authorMapper2 = sqlSession2.getMapper(AuthorMapper.class); Author author2 = authorMapper2.findAuthorById(2); hor com
author2.setAuthroBio("公司");
authorMapper2. updateAuthor(author2); //commit會清空緩存區域 sqlSession2.commit();
sqlSession3 = sqlSessionFactory.openSession();
AuthorMapper authorMapper3 = sqlSession3.getMapper(AuthorMapper. class); // 第一個查詢
Author author3 = authorMapper3.findAuthorById(2);
} SessorById(2);
} Session3.close);
DEBUG [main] - 快取命中率[com.pb.mybatis.mapper.AuthorMapper]: 0.0DEBUG [main] - 開啟JDBC 連線
DEBUG [main] - 建立連線873769339.
DEBUG [main] - 將自動提交設定為false關於JDBC 連接[com.mysql.jdbc.JDBC4Connection@3414a97b]
DEBUG [main] - ==> 準備:從作者中選擇*,其中author_id=?調試[主要] - ==>參數:2(整數)
DEBUG [main] - DEBUG [main] - 關閉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 連線上將自動提交設定為false [com.mysql.jdbc.JDBC4Connection@3414a97b]
DEBUG [main] - ==> 準備:更新作者SETauthor_username=?,,horhor kipmail=,, ==> ?,author_bio=?,register_time=?其中author_id=?調試[主要] - ==>參數: 董事長(String), 123asf(String), lisi@163.com(String), 公司(String), 2015-10-29 10:24:29.0(Timestamp), 2 (Integer)
DEBUG [main] - DEBUG [主要] - 將JDBC 連線上的自動提交重設為true [com.mysql.jdbc.JDBC4Connection@3414a97b]
DEBUG [main] - 關閉JDBC 連線[com.mysql.jdbc.JDBC4Connection@3414a97b]
DEBUG [main] - 回傳連線到連線到連線池。
DEBUG [main] - 快取命中率 [com.pb.mybatis.mapper。 AuthorMapper]: 0.3333333333333333DEBUG [main] - 開啟 JDBC 連線
DEBUG [main] - 從池簽出連線 873769339。
DEBUG [main] - 在 JDBC 連接上將自動提交設定為 false [com.mysql.jdbc.JDBC4Connection@3414a97b]
調試 [主要] - ==> 準備:從作者中選擇*,其中author_id=?調試[主要] - ==>參數:2(整數)
DEBUG [main] - DEBUG [main] - 關閉JDBC 連線[com.mysql.jdbc.JDBC4Connection@3414a97b]
DEBUG [main] - 返回連接873769339 到池。
八、Mybatis 與ehcache 整合
8.1、把jar 套件放入專案
8.2、建立ehcache.xml
="http: //www.w3.org/2001/XMLSchema-instance"xsi:noNamespaceSchemaLocation="../config/ehcache. xsd">
maxElementsOnDisk="10000000"
eternal="false" timeToLiveSeconds="120"
diskExpiryThreadIntervalSeconds="120"
memoryStoreEvictionPolicy="LRU">
memoryStoreEvictionPolicy="LRU">
ache /ehcache>
8.3、mapper的快取中指定type
8.4、測試
8.4、測試
@Test public void testCache() { // 取得會話工廠
SqlSession sqlSession1 = sqlSessionFactory.openSession(Bautor); apper(AuthorMapper.class); // 第一次查詢
Author author1 = authorMapper1.findAuthorById (2); //必須關閉不資料無法寫入快取區域 sqlSession1.close(); // 取得會話工廠
AuthorMapper authorMapper2 = sqlSession2.getMapper(AuthorMapper.class);
Author author2 = authorMapper2.findAuthorById(2); //更新
author2.setAuthorUserName("董事長" ); horMapper2.updateAuthor(author2); //commit會清空快取區域 sqlSession2 .commit();
sqlSession2.close(); // 取得會話工廠
SqlSession sqlSession3 = openSessionFactory.Sess = sqlSession3.getMapper(AuthorMapper.class); // 第一次查詢
Author author3 = 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:noNamespaceemaLocation [nnoNamespaceBUGation [儲存路徑:F:developehcache
DEBUG [main] - 使用預設設定建立新的CacheManager
DEBUG [main] -propertiesString 為null。
DEBUG [main] - 未指定 CacheManagerEventListenerFactory 類別。正在跳過...
DEBUG [main] - 未指定 BootstrapCacheLoaderFactory 類別。正在跳過...
DEBUG [main] - CacheWriter 工廠未配置。正在跳過...
DEBUG [main] - 未指定 CacheExceptionHandlerFactory 類別。跳過...
DEBUG [main] - 為com.pb.mybatis.mapper.AuthorMapper
DEBUG 初始化net.sf.ehcache.store.NotifyingMemoryStore [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 連接上將 autocommit 設定為 false [com.mysql.jdbc.JDBC4Connection@4cb533b8]
DEBUG [main] - ==> 準備:從作者中選擇*,其中author_id=?調試[主要] - ==>參數:2(整數)
DEBUG [main] - DEBUG [main] - 關閉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 連線上將自動提交設定為false [com.mysql.jdbc.JDBC4Connection@4cb533b8]
DEBUG [main] - ==> 準備:更新作者SETauthor_username=?,horhorDEBUG [main] - ==> 準備:更新作者SETauthor_username=?,horhor_hormail=,, i ?,author_bio=?,register_time=?其中author_id=?調試[主要] - ==>參數: 董事長(String), 123asf(String), lisi@163.com(String), 公司(String), 2015-10-29 10:24:29.0(Timestamp), 2 (Integer)
DEBUG [main] - DEBUG [main] - 將JDBC 連線上的自動提交重設為true [com.mysql.jdbc.JDBC4Connection@4cb533b8]
DEBUG [main] - 關閉JDBC 連線[com.mysql.jdbc.JDBC4Connection@4cb533b8]
DEBUG [main] - 返回連接池到連接池。
DEBUG [main] - 快取命中率 [com.pb.mybatis.mapper。 AuthorMapper]: 0.3333333333333333DEBUG [main] - 開啟 JDBC 連線
DEBUG [main] - 從池簽出連線 1286943672。
DEBUG [main] - 在 JDBC 連接上將自動提交設定為 false [com.mysql.jdbc.JDBC4Connection@4cb533b8]
調試 [主要] - ==> 準備:從作者中選擇*,其中author_id=?調試[主要] - ==>參數:2(整數)
DEBUG [main] - DEBUG [main] - 關閉JDBC 連線[com.mysql.jdbc.JDBC4Connection@4cb533b8]
DEBUG [main] - 返回連接1286943672到池。

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

iBatis與MyBatis:你該選擇哪一個?簡介:隨著Java語言的快速發展,許多持久化框架也應運而生。 iBatis和MyBatis是兩個備受歡迎的持久化框架,它們都提供了一個簡單而高效的資料存取解決方案。本文將介紹iBatis和MyBatis的特點和優勢,並給出一些具體的程式碼範例,幫助你選擇合適的框架。 iBatis簡介:iBatis是一個開源的持久化框架

JPA和MyBatis:功能與效能比較分析引言:在Java開發中,持久化框架扮演著非常重要的角色。常見的持久化框架包括JPA(JavaPersistenceAPI)和MyBatis。本文將對這兩個框架的功能和效能進行比較分析,並提供具體的程式碼範例。一、功能對比:JPA:JPA是JavaEE的一部分,提供了一個物件導向的資料持久化解決方案。它透過註解或X

MyBatis動態SQL標籤解讀:Set標籤用法詳解MyBatis是一個優秀的持久層框架,它提供了豐富的動態SQL標籤,可以靈活地建構資料庫操作語句。其中,Set標籤是用來產生UPDATE語句中SET子句的標籤,在更新作業中非常常用。本文將詳細解讀MyBatis中Set標籤的用法,以及透過具體的程式碼範例來示範其功能。什麼是Set標籤Set標籤用於MyBati

MyBatis中實現批量刪除語句的幾種方式,需要具體程式碼範例近年來,由於資料量的不斷增加,批量操作成為了資料庫操作的一個重要環節之一。在實際開發中,我們經常需要批量刪除資料庫中的記錄。本文將重點介紹在MyBatis中實作批量刪除語句的幾種方式,並提供相應的程式碼範例。使用foreach標籤實作批量刪除MyBatis提供了foreach標籤,可以方便地遍歷一個集

MyBatis批量刪除語句的使用方法詳解,需要具體程式碼範例引言:MyBatis是一款優秀的持久層框架,提供了豐富的SQL操作功能。在實際專案開發中,經常會遇到需要大量刪除資料的情況。本文將詳細介紹MyBatis批量刪除語句的使用方法,並附上具體的程式碼範例。使用場景:在資料庫中刪除大量資料時,逐條執行刪除語句效率低。此時,可以使用MyBatis的批次刪除功能

MyBatis快取機制詳解:一文讀懂快取儲存原理引言在使用MyBatis進行資料庫存取時,快取是一個非常重要的機制,能夠有效減少對資料庫的訪問,提高系統效能。本文將詳細介紹MyBatis的快取機制,包括快取的分類、儲存原理和具體的程式碼範例。一、快取的分類MyBatis的快取主要分為一級快取和二級快取兩種。一級緩存一級緩存是SqlSession級別的緩存,當在

iBatis和MyBatis是兩個主流的ORM(Object-RelationalMapping)框架,它們在設計和使用上有著許多相似之處,也存在一些細微的差別。本文將詳細比較iBatis和MyBatis的異同,並透過具體的程式碼範例來說明它們的特點。一、iBatis與MyBatis的歷史與背景iBatis是ApacheSoftwareFoundat

MyBatisGenerator是MyBatis官方提供的程式碼產生工具,可以幫助開發人員快速產生符合資料庫表結構的JavaBean、Mapper介面以及XML映射檔。在使用MyBatisGenerator進行程式碼產生的過程中,配置參數的設定是至關重要的。本文將從配置參數的角度出發,深入探討MyBatisGenerator的
