Mybatis框架--測試延遲加載
阿新 • • 發佈:2017-09-22
tis total 測試用例 val div 默認的配置 == batis integer
在學習mybatis的延遲加載時,對 lazyLoadingEnabled 和 aggressiveLazyLoading 的區別並不理解,特別是對查詢的條件不同時,執行的查詢語句也不一樣,所以還是測試總結一下
Blog: private Integer id; private String title; /*private Integer authorId;*/ private Author author; private String state; private Boolean featured; private String style; Author:private Integer id; private String username; private String password; private String email; private String bio; private String favouriteSection; private String nickname; private String realname;
測試用例如下:
1.1 使用默認配置,不查詢任何屬性
test:
@Test public void testSelectBlogByIdLazyLoading() { SqlSession session= MyBatisUtil.getSqlsession(); BlogMapper blogMapper = session.getMapper(BlogMapper.class); System.out.println("查詢blog"); Blog blog = blogMapper.selectBlogById(1); session.close(); System.out.println("查詢結束"); }
console:
查詢blog
Opening JDBC Connection
Created connection 1263877414.
Setting autocommit to false on JDBC Connection [[email protected]]
==> Preparing: select * from blog where id = ?
==> Parameters: 1(Integer)
====> Preparing: select * from author where id = ?
====> Parameters: 1(Integer)
<==== Total: 1
<== Total: 1
Resetting autocommit to true on JDBC Connection [[email protected]]
Closing JDBC Connection [[email protected]]
Returned connection 1263877414 to pool.
查詢結束
result:
使用默認的配置,並且不對blog進行任何屬性的查詢,但是仍然執行了對author表的查詢
1.2 使用默認配置,查詢blog的非author屬性
test:
@Test public void testSelectBlogByIdLazyLoading() { SqlSession session = MyBatisUtil.getSqlsession(); BlogMapper blogMapper = session.getMapper(BlogMapper.class); System.out.println("查詢blog"); Blog blog = blogMapper.selectBlogById(1); session.close(); System.out.println("查詢blog的title屬性"); System.out.println(blog.getTitle());
System.out.println("查詢結束"); }
console:
查詢blog
Opening JDBC Connection
Created connection 1263877414.
Setting autocommit to false on JDBC Connection [[email protected]]
==> Preparing: select * from blog where id = ?
==> Parameters: 1(Integer)
====> Preparing: select * from author where id = ?
====> Parameters: 1(Integer)
<==== Total: 1
<== Total: 1
Resetting autocommit to true on JDBC Connection [[email protected]]
Closing JDBC Connection [[email protected]]
Returned connection 1263877414 to pool.
查詢blog的title屬性
My Colourful Garden
查詢結束
result:
使用默認配置,只對blog的非author屬性進行查詢,但是結果和test1.1一樣,都執行了對author表的查詢
1.3 使用默認配置,查詢blog的屬性(包括author屬性)
test: @Test public void testSelectBlogByIdLazyLoading() { SqlSession session = MyBatisUtil.getSqlsession(); BlogMapper blogMapper = session.getMapper(BlogMapper.class); System.out.println("查詢blog"); Blog blog = blogMapper.selectBlogById(1); session.close(); System.out.println("查詢blog的title屬性"); System.out.println(blog.getTitle());
System.out.println("查詢blog的author屬性");
System.out.println(blog.getAuthor().getUsername());
System.out.println("查詢結束"); } console: 查詢blog Opening JDBC Connection Created connection 1263877414. Setting autocommit to false on JDBC Connection [[email protected]] ==> Preparing: select * from blog where id = ? ==> Parameters: 1(Integer) ====> Preparing: select * from author where id = ? ====> Parameters: 1(Integer) <==== Total: 1 <== Total: 1 Resetting autocommit to true on JDBC Connection [[email protected]] Closing JDBC Connection [[email protected]] Returned connection 1263877414 to pool. 查詢blog的title屬性
My Colourful Garden
查詢blog的author屬性
helen 查詢結束 result: 使用默認配置,對blog屬性(包括author屬性)進行查詢,但是結果和test1.1以及test1.2一樣,都執行了對author表的查詢
2.1 配置 lazyLoadingEnabled:true; 不查詢任何屬性
config:
<!-- 延遲加載 默認不開啟 --> <settings> <setting name="lazyLoadingEnabled" value="true"/> </settings>
test:
@Test
public void testSelectBlogByIdLazyLoading() {
SqlSession session = MyBatisUtil.getSqlsession();
BlogMapper blogMapper = session.getMapper(BlogMapper.class);
System.out.println("查詢blog");
Blog blog = blogMapper.selectBlogById(1);
session.close();
System.out.println("查詢結束"); }
console:
查詢blog
Opening JDBC Connection
Created connection 1263877414.
Setting autocommit to false on JDBC Connection [[email protected]]
==> Preparing: select * from blog where id = ?
==> Parameters: 1(Integer)
<== Total: 1
Resetting autocommit to true on JDBC Connection [[email protected]]
Closing JDBC Connection [[email protected]]
Returned connection 1263877414 to pool.
查詢結束
result:
配置 lazyLoadingEnabled:true,並且不對blog進行任何屬性查詢,則session只執行對本表的查詢
2.2 配置 lazyLoadingEnabled:true; 查詢blog的非author屬性
config: <!-- 延遲加載 默認不開啟 --> <settings> <setting name="lazyLoadingEnabled" value="true"/> </settings> test: @Test public void testSelectBlogByIdLazyLoading() { SqlSession session = MyBatisUtil.getSqlsession(); BlogMapper blogMapper = session.getMapper(BlogMapper.class); System.out.println("查詢blog"); Blog blog = blogMapper.selectBlogById(1); session.close();
System.out.println("查詢blog的title屬性");
System.out.println(blog.getTitle());
System.out.println("查詢結束"); } console: 查詢blog Opening JDBC Connection Created connection 1263877414. Setting autocommit to false on JDBC Connection [[email protected]] ==> Preparing: select * from blog where id = ? ==> Parameters: 1(Integer) <== Total: 1 Resetting autocommit to true on JDBC Connection [[email protected]] Closing JDBC Connection [[email protected]] Returned connection 1263877414 to pool. 查詢blog的title屬性
Opening JDBC Connection
Checked out connection 1263877414 from pool.
Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JD[email protected]]
==> Preparing: select * from author where id = ?
==> Parameters: 1(Integer)
<== Total: 1
Resetting autocommit to true on JDBC Connection [[email protected]]
Closing JDBC Connection [[email protected]]
Returned connection 1263877414 to pool.
My Colourful Garden
查詢結束 result: 配置 lazyLoadingEnabled:true,並且對blog進行非author查詢,則session先執行對本表的查詢,然後執行對author表的查詢
2.3 配置 lazyLoadingEnabled:true;查詢blog的屬性(包括author屬性)
config: <!-- 延遲加載 默認不開啟 --> <settings> <setting name="lazyLoadingEnabled" value="true"/> </settings> test: @Test public void testSelectBlogByIdLazyLoading() { SqlSession session = MyBatisUtil.getSqlsession(); BlogMapper blogMapper = session.getMapper(BlogMapper.class); System.out.println("查詢blog"); Blog blog = blogMapper.selectBlogById(1); session.close();
System.out.println("查詢blog的title屬性");
System.out.println(blog.getTitle());
System.out.println("查詢blog的author屬性");
System.out.println(blog.getAuthor().getUsername());
System.out.println("查詢結束"); } console: 查詢blog Opening JDBC Connection Created connection 1263877414. Setting autocommit to false on JDBC Connection [[email protected]] ==> Preparing: select * from blog where id = ? ==> Parameters: 1(Integer) <== Total: 1 Resetting autocommit to true on JDBC Connection [[email protected]] Closing JDBC Connection [[email protected]] Returned connection 1263877414 to pool. 查詢blog的title屬性 Opening JDBC Connection Checked out connection 1263877414 from pool. Setting autocommit to false on JDBC Connection [[email protected]] ==> Preparing: select * from author where id = ? ==> Parameters: 1(Integer) <== Total: 1 Resetting autocommit to true on JDBC Connection [[email protected]] Closing JDBC Connection [[email protected]] Returned connection 1263877414 to pool. My Colourful Garden
查詢blog的author屬性
helen 查詢結束 result: 配置 lazyLoadingEnabled:true,並且對blog進行author查詢,則結果和test2.2一樣,session先執行對本表的查詢,然後執行對author表的查詢
3.1 配置lazyLoadingEnabled:true;aggressiveLazyLoading:false; 不查詢任何屬性
config:
<!-- 延遲加載 默認不開啟 -->
<!-- 默認是積極的懶加載 -->
<settings>
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="aggressiveLazyLoading" value="false"/>
</settings>
test:
@Test
public void testSelectBlogByIdLazyLoading() {
SqlSession session = MyBatisUtil.getSqlsession();
BlogMapper blogMapper = session.getMapper(BlogMapper.class);
System.out.println("查詢blog");
Blog blog = blogMapper.selectBlogById(1);
session.close();
System.out.println("查詢結束"); }
console:
查詢blog Opening JDBC Connection Created connection 1263877414. Setting autocommit to false on JDBC Connection [[email protected]] ==> Preparing: select * from blog where id = ? ==> Parameters: 1(Integer) <== Total: 1 Resetting autocommit to true on JDBC Connection [[email protected]] Closing JDBC Connection [[email protected]] Returned connection 1263877414 to pool. 查詢結束
result:
配置 lazyLoadingEnabled:true,aggressiveLazyLoading:false; 並且不對blog進行任何查詢,則session只執行對本表的查詢
3.2 配置lazyLoadingEnabled:true;aggressiveLazyLoading:false; 查詢非author屬性
config: <!-- 延遲加載 默認不開啟 -->
<!-- 默認是積極的懶加載 --> <settings> <setting name="lazyLoadingEnabled" value="true"/>
<setting name="aggressiveLazyLoading" value="false"/> </settings> test: @Test public void testSelectBlogByIdLazyLoading() { SqlSession session = MyBatisUtil.getSqlsession(); BlogMapper blogMapper = session.getMapper(BlogMapper.class); System.out.println("查詢blog"); Blog blog = blogMapper.selectBlogById(1); session.close();
System.out.println("查詢blog的title屬性");
System.out.println(blog.getTitle()); System.out.println("查詢結束"); } console: 查詢blog Opening JDBC Connection Created connection 1263877414. Setting autocommit to false on JDBC Connection [[email protected]] ==> Preparing: select * from blog where id = ? ==> Parameters: 1(Integer) <== Total: 1 Resetting autocommit to true on JDBC Connection [[email protected]] Closing JDBC Connection [[email protected]] Returned connection 1263877414 to pool. 查詢blog的title屬性
My Colourful Garden 查詢結束 result: 配置 lazyLoadingEnabled:true,aggressiveLazyLoading:false ;並且對blog進行非author查詢,則session只執行對本表的查詢
3.3 配置lazyLoadingEnabled:true;aggressiveLazyLoading:false; 查詢blog的屬性(包括author屬性)
config: <!-- 延遲加載 默認不開啟 -->
<!-- 默認是積極的懶加載 --> <settings> <setting name="lazyLoadingEnabled" value="true"/>
<setting name="aggressiveLazyLoading" value="false"/> </settings> test: @Test public void testSelectBlogByIdLazyLoading() { SqlSession session = MyBatisUtil.getSqlsession(); BlogMapper blogMapper = session.getMapper(BlogMapper.class); System.out.println("查詢blog"); Blog blog = blogMapper.selectBlogById(1); session.close();
System.out.println("查詢blog的title屬性");
System.out.println(blog.getTitle());
System.out.println("查詢blog的author屬性");
System.out.println(blog.getAuthor().getUsername());
System.out.println("查詢結束"); } console: 查詢blog Opening JDBC Connection Created connection 1263877414. Setting autocommit to false on JDBC Connection [[email protected]] ==> Preparing: select * from blog where id = ? ==> Parameters: 1(Integer) <== Total: 1 Resetting autocommit to true on JDBC Connection [[email protected]] Closing JDBC Connection [[email protected]] Returned connection 1263877414 to pool. 查詢blog的title屬性 Opening JDBC Connection Checked out connection 1263877414 from pool. Setting autocommit to false on JDBC Connection [[email protected]] ==> Preparing: select * from author where id = ? ==> Parameters: 1(Integer) <== Total: 1 Resetting autocommit to true on JDBC Connection [[email protected]] Closing JDBC Connection [[email protected]] Returned connection 1263877414 to pool. My Colourful Garden 查詢blog的author屬性 helen 查詢結束 result: 配置 lazyLoadingEnabled:true;aggressiveLazyLoading:false; 並且對blog進行author查詢,則session先執行對本表的查詢,然後執行對author表的查詢
在默認配置下,無論是否對blog的屬性進行查詢,session都會執行對blog表和對author表兩條查詢語句,然後存入緩存中,供查詢結果調用,稱為不延遲加載; 在配置lazyLoadingEnabled:true 後,如果不對blog的任何屬性進行查詢,session只會執行查詢blog的語句;但是只要對blog的任意屬性進行查詢,就會查詢blog表和author表,然後放入緩存,共查詢結果調用,稱為積極的延遲加載; 在配置 lazyLoadingEnabled:true;aggressiveLazyLoading:false;後,如果不對blog的author屬性進行查詢,session只會執行查詢blog的語句;如果查詢了blog的author屬性,就會繼續查詢author,成為不積極的延遲加載
Mybatis框架--測試延遲加載