04-Mybatis、延迟加载、缓存、注解开发

一、Mybatis延迟加载策略
实际开发过程中很多时候我们并不需要总是在加载用户信息时就一定要加载他的账户信息。此时就是我们所说的延迟加载。 

1.1、延迟加载
延迟加载:就是在需要用到数据时才进行加载,不需要用到数据时就不加载数据。延迟加载也称懒加载.。
好处:先从单表查询,需要时再从关联表去关联查询,大大提高数据库性能,因为查询单表要比关联查询多张表速度要快。
坏处:因为只有当需要用到数据时,才会进行数据库查询,这样在大批量数据查询时,因为查询工作也要消耗时间,所以可能造成用户等待时间变长,造成用户体验下降。

1.2、实现需求
需求:查询账户(Account)信息并且关联查询用户(User)信息。如果先查询账户(Account)信息即可满足要求,当我们需要查询用户(User)信息时再查询用户(User)信息。把对用户(User)信息的按需去查询就是延迟加载。
实现多表操作的时候,使用了resultMap来实现一对一,一对多,多对多关系的操作。主要 是通过 association、collection 实现一对一及一对多映射。association、collection具备延迟加载功能

1.3、使用association实现延迟加载
1.3.1、账户的持久层DAO接口
  List<Account> findAll(); 

1.3.2、账户映射文件

<!--建立对应的关系-->
<resultMap id="accountMap" type="account">
    <id column="id" property="id"></id>
    <result column="uid" property="uid"></result>
    <result column="money" property="money"></result>
    <!--它是用于指定从表方的引用实体属性的-->
    <association property="user" column="uid" javaType="user"
                 select="com.itheima.dao.IUserDao.findById">
    </association>
</resultMap>
  
<!--查询所有-->
<select id="findAll" resultMap="accountMap">
    <!--select u.*,a.id as aid,a.uid,a.money from account a,user u where a.uid =u.id;--> 
    SELECT * FROM  account;
</select>

  
1.3.3、用户映射文件

<!--根据id查询用户-->
<select id="findById" parameterType="int" resultType="user">
    SELECT * FROM user WHERE id = #{id};
</select>

1.3.4、开启Mybatis的延迟加载策略
官方完档:


延迟与为延迟sql语句的执行流程:
直接进行多表查询:

<association property="user" column="uid" javaType="user"
  select="com.itheima.dao.IUserDao.findById">
</association>


配置了延迟加载:

<!--配置参数-->
<settings>
    <!--开启Mybatis支持延迟加载-->
    <setting name="lazyLoadingEnabled" value="true"/>
    <setting name="aggressiveLazyLoading" value="false"></setting>
</settings>


按需加载:


1.4、使用Collection实现延迟加载
也可以在一对多关系配置的<collection>结点中配置延迟加载策略。 
<collection>结点中也有 select 属性,column 属性。 

1.4.1、在User实体类中加入LIst<Account>属性

1.4.2、编写用户和账户持久层接口的方法

1.4.3、映射文件

 <!-- 
collection 是用于建立一对多中集合属性的对应关系    
ofType 用于指定集合元素的数据类型    
select 是用于指定查询账户的唯一标识(账户的 dao 全限定类名加上方法名称)    
column 是用于指定使用哪个字段的值作为条件查询   
 -->
<resultMap id="userMap" type="user">
    <id column="id" property="id"></id>
    <result column="username" property="username"></result>
    <result column="address" property="address"></result>
    <result column="sex" property="sex"></result>
    <result column="birthday" property="birthday"></result>
    <collection property="accounts" ofType="account" column="id"
        select="com.itheima.dao.IAccountDao.findAccountByUid">
    </collection>
  </resultMap>
  
  <!--查询所有-->
  <select id="findAll" resultMap="userMap">
    SELECT * FROM user;
</select>

<collection>标签: 主要用于加载关联的集合对象 。
select 属性:用于指定查询 account 列表的 sql 语句,所以填写的是该 sql 映射的 id 。
column 属性:用于指定 select 属性的 sql 语句的参数来源,上面的参数来自于 user 的 id 列,所以就写成 id 这一个字段名了。

1.4.4、编写账户持久层映射配置

<!--根据用户id查询账户列表-->
<select id="findAccountByUid" 
      parameterType="int" resultType="account">
    SELECT * FROM account WHERE uid=#{uid};
</select>

原理:



按需加载:


二、Mybatis缓存
像大多数的持久化框架一样,Mybatis 也提供了缓存策略,通过缓存策略来减少数据库的查询次数,从而提 高性能。 Mybatis 中缓存分为一级缓存,二级缓存。


2.1、Mybatis一级缓存
2.1.1、证明一级缓存的存在
一级缓存是 SqlSession 级别的缓存,只要 SqlSession 没有 flush 或 close,它就存在。 

1 @Test
2 public void testFirstLevelCache(){
3     User user1 = userDao.findById(41);
4     System.out.println(user1);
5     User user2 = userDao.findById(41);
6     System.out.println(user2);
7 
8     System.out.println(user1==user2);        
9 }
View Code

上面的代码中我们查询了两次,但最后只执行了一次数据库操作,这就是 Mybatis 提 供给我们的一级缓存在起作用了。因为一级缓存的存在,导致第二次查询 id为41 的记录时,并没有发出sql语句 从数据库中查询数据,而是从一级缓存中查询。

2.1.2、一级缓存分析
一级缓存是 SqlSession 范围的缓存,当调用 SqlSession 的修改,添加,删除,commit(),close()等方法时,就会清空一级缓存。 

第一次发起查询用户 id 为 1 的用户信息,先去找缓存中是否有 id 为 1 的用户信息,如果没有,从数据库查 询用户信息。 得到用户信息,将用户信息存储到一级缓存中。 
如果 sqlSession 去执行 commit 操作(执行插入、更新、删除),清空 SqlSession 中的一级缓存,这样 做的目的为了让缓存中存储的是最新的信息,避免脏读。
第二次发起查询用户 id 为 1 的用户信息,先去找缓存中是否有 id 为 1 的用户信息,缓存中有,直接从缓存 中获取用户信息。
分析

2.1.3、测试一级缓存的清空

@Test
public void testFirstLevelCache(){
    User user1 = userDao.findById(41);
    System.out.println(user1);
        
    sqlSession.clearCache();
    IUserDao userDao = sqlSession.getMapper(IUserDao.class);

    User user2 =userDao.findById(41);
    System.out.println(user2);

    System.out.println(user1==user2);        
}
View Code

当执行了xxxDao进行修改(添加、删除)表的操作,就会自动清除缓存,重新从数据库中进行查询。

2.2、Mybatis二级缓存
2.2.1、二级缓存结构图
二级缓存是 mapper 映射级别的缓存,多个 SqlSession 去操作同一个 Mapper 映射的 sql 语句,多个 SqlSession 可以共用二级缓存,二级缓存是跨 SqlSession 的。 


2.2.2、二级缓存的开启与关闭
2.2.2.1、第一步:在SqlMapConfig.xml文件开启二级缓存

 <!--配置参数-->
<settings>
      <!--开启二级缓存的支持-->
      <setting name="cacheEnabled" value="true"></setting>
</settings>

因为 cacheEnabled 的取值默认就为 true,所以这一步可以省略不配置。为 true 代表开启二级缓存;为 false 代表不开启二级缓存

2.2.2.2、第二步:配置相关的Mapper映射文件

<?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.itheima.dao.IUserDao">
  
  <!--开启二级缓存的支持-->
  <cache></cache>
</mapper> 

2.2.2.3、配置statement上的userCache属性

<!--根据id查询用户-->
<select id="findById" parameterType="int" resultType="user" useCache="true">
    SELECT * FROM user WHERE id = #{id};
</select>

将 UserDao.xml 映射文件中的<select>标签中设置 useCache=”true”代表当前这个 statement 要使用 二级缓存,如果不使用二级缓存可以设置为 false。
注意:针对每次查询都需要最新的数据 sql,要设置成 useCache=false,禁用二级缓存

2.2.3、二级缓存测试

@Test
public void testSecondLevelCache(){
    SqlSession sqlSession1 = factory.openSession();
    IUserDao userDao1 = sqlSession1.getMapper(IUserDao.class);
    User user1 = userDao1.findById(41);
    System.out.println(user1);
    sqlSession1.close();    //一级缓存消失

    SqlSession sqlSession2 = factory.openSession();
    IUserDao userDao2 = sqlSession2.getMapper(IUserDao.class);
    User user2 = userDao2.findById(41);
    System.out.println(user2);
    sqlSession2.close();

    System.out.println(user1==user2);
}
View Code

2.2.4、二级缓存注意事项
当我们在使用二级缓存时,所缓存的类一定要实现 java.io.Serializable 接口,这样就可以使用序列化方式来保存对象。

三、Mybatis注解开发
3.1、mybatis的常用注解说明
  @Insert:实现新增 
  @Update:实现更新 
  @Delete:实现删除 
  @Select:实现查询 
  @Result:实现结果集封装 
  @Results:可以与@Result 一起使用,封装多个结果集 
  @ResultMap:实现引用@Results 定义的封装 
  @One:实现一对一结果集封装 
  @Many:实现一对多结果集封装 
  @SelectProvider:实现动态 SQL 映射 
  @CacheNamespace:实现注解二级缓存的使用

3.2、使用Mybatis注解实现基本CRUD
3.2.1、编写实体类

public class User implements Serializable{
    //实体类代码如下:(此时的实体类属性和数据库表的列名已经不一致了) 
    private Integer userId;
    private String userName;
    private Date userBirthday;
    private String userSex;
    private String userAddress;

    public User() {
    }

    public Integer getUserId() {
        return userId;
    }

    public void setUserId(Integer userId) {
        this.userId = userId;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public Date getUserBirthday() {
        return userBirthday;
    }

    public void setUserBirthday(Date userBirthday) {
        this.userBirthday = userBirthday;
    }

    public String getUserSex() {
        return userSex;
    }

    public void setUserSex(String userSex) {
        this.userSex = userSex;
    }

    public String getUserAddress() {
        return userAddress;
    }

    public void setUserAddress(String userAddress) {
        this.userAddress = userAddress;
    }

    @Override
    public String toString() {
        return "User{" +
                "userId=" + userId +
                ", userName='" + userName + '\'' +
                ", userBirthday=" + userBirthday +
                ", userSex='" + userSex + '\'' +
                ", userAddress='" + userAddress + '\'' +
                '}';
    }
}
View Code

3.2.2、使用注解方式开发持久层接口

/**
 * 用户持久层接口
 */
public interface IUserDao {
    /**查询所有的用户
     * @return
     */
    @Select("SELECT * FROM user")
    @Results(id = "userMap", value = {
            @Result(id=true,column = "id",property = "userId"),
            @Result(column = "username",property = "userName"),
            @Result(column = "sex",property = "userSex"),
            @Result(column = "address",property = "userAddress"),
            @Result(column = "birthday",property = "userBirthday")
    })
    List<User> findAll();

    @Select("SELECT * FROM user WHERE id=#{id}")
    @ResultMap("userMap")
    User findById(Integer id);

    /**根据用户信息,查询用户列表
     * @param user
     * @return
     */
    List<User> findByUser(User user);
    

    
    /**保存用户
     * @param user
     */
    @Insert("INSERT into user (username,sex,birthday,address) VALUES (#{userName},#{userSex},#{userBirthday},#{userAddress})")
    @SelectKey(keyColumn = "id",keyProperty="userId",resultType=Integer.class,before = false, statement = { "select last_insert_id()" })
    int saveUser(User user);

    /**更新用户
     * @param user
     */
    @Update("UPDATE user SET username=#{userName},birthday=#{userBirthday},sex=#{userSex},address=#{userAddress} WHERE id=#{userId}")
    int updateUser(User user);

    /**根据id删除用户
     * @param id
     */
    @Delete("DELETE FROM user WHERE id=#{id}")
    int deleteUser(Integer id);

    /**根据名称模糊查询
     * @param username
     * @return
     */
    @Select("SELECT * FROM user WHERE username LIKE #{username}")
    @ResultMap("userMap")
    List<User> findByName(String username);

    /**查询总用户数
     * @return
     */
    @Select("SELECT COUNT(*) FROM user")
    int findTotal();

}
View Code

3.2.3、编写SqlMapConfig配置文件

<?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">
<!-- mybatis的主配置文件 -->
<configuration>
    
    <properties resource="jdbcConfig.properties">
  <!--  <property name="driver" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/eesy_mybatis"/>
        <property name="username" value="root"/>
        <property name="password" value="root"/>-->
    </properties>
    
    <!--配置参数-->
    <settings>
        <!--开启Mybatis支持延迟加载-->
        <setting name="lazyLoadingEnabled" value="true"/>
        <setting name="aggressiveLazyLoading" value="false"></setting>
        
        <!--开启二级缓存的支持-->
        <setting name="cacheEnabled" value="true"></setting>
    </settings>
    
    <typeAliases>
        <package name="com.itheima.domain"/>
    </typeAliases>
    
    <!-- 配置环境 -->
    <environments default="mysql">
        <!-- 配置mysql的环境-->
        <environment id="mysql">
            <!-- 配置事务的类型-->
            <transactionManager type="JDBC"></transactionManager>
            <!-- 配置数据源(连接池) -->
            <dataSource type="POOLED">
                <!-- 配置连接数据库的4个基本信息 -->
                <property name="driver" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>

    <!-- 指定映射配置文件的位置,映射配置文件指的是每个dao独立的配置文件 -->
    <mappers>
        <!--<mapper resource="com/itheima/dao/IUserDao.xml"/>-->
       <!-- package标签是用于指定dao接口所在的包,当指定了之后就不需要在写mapper以及resource或者class了 -->
        <package name="com.itheima.dao"></package>
    </mappers>
</configuration>
View Code

3.2.4、编写测试方法

public class UserTest {
    InputStream in;
    SqlSession sqlSession;
    IUserDao userDao;
    @Before
    public void init() throws IOException {
        in = Resources.getResourceAsStream("SqlMapConfig.xml");
        SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
        SqlSessionFactory factory = builder.build(in);
        sqlSession = factory.openSession(true);
        userDao = sqlSession.getMapper(IUserDao.class);
    }
    
    @After
    public void destroy() throws IOException {
        sqlSession.commit();
        sqlSession.close();
        in.close();
    }
    
    @Test
    public void testFindAll(){
        List<User> users = userDao.findAll();
        for(User user :users){
            System.out.println("--------------");
            System.out.println(user);
//            System.out.println(user.getAccounts());
        }
    }
    
    @Test
    public void testFindUserById(){
        User user1 = userDao.findById(41);
        System.out.println("查询到的用户:"+user1);
    }
    
    @Test
    public void testSaveUser(){
        User user = new User();   
        user.setUserName("mybatis annotation");
        user.setUserSex("男");   
        user.setUserAddress("北京市顺义区");   
        user.setUserBirthday(new Date());      
        int res = userDao.saveUser(user);   
        System.out.println("影响数据库记录的行数:"+res);   
        System.out.println("插入的主键值:"+user.getUserId());
    }

    @Test
    public void testUpdate(){
        User user = new User();
        user.setUserId(66);
        user.setUserName("mybatis annotation update");
        user.setUserAddress("北京市海淀区");
        user.setUserSex("男");
        user.setUserBirthday(new Date());

        userDao.updateUser(user);
    }
    
    @Test
    public void testDeleteUser(){
        int res = userDao.deleteUser(66);
        System.out.println(res);
    }
    
    @Test
    public void testFindTotal(){
        int res = userDao.findTotal();
        System.out.println(res);
    }
    
    @Test
    public void testFindUserByName(){
        List<User> users = userDao.findByName("%王%");
        for(User user:users){
            System.out.println(user);
        }
    }
}
View Code


3.3、使用注解实现复杂关系映射开发
3.3.1、复杂关系映射的注解说明
@Results 注解 
代替的是标签<resultMap> 
该注解中可以使用单个@Result 注解,也可以使用@Result 集合 
@Results({@Result(),@Result()})或@Results(@Result()) 

@Resutl 注解 
代替了 <id>标签和<result>标签 
@Result 中 属性介绍: 
  id 是否是主键字段 
  column 数据库的列名 
  property 需要装配的属性名 
  one 需要使用的@One 注解(@Result(one=@One)())) 
  many 需要使用的@Many 注解(@Result(many=@many)())) 

@One 注解(一对一) 
  代替了<assocation>标签,是多表查询的关键,在注解中用来指定子查询返回单一对象。 
@One 注解属性介绍: 
  select 指定用来多表查询的 sqlmapper 
  fetchType 会覆盖全局的配置参数 lazyLoadingEnabled。。 
使用格式:
  @Result(column=" ",property="",one=@One(select=" (dao中对应的方法) ") fetchType="FetchType.LAZY") 

@Many 注解(多对一) 
  代替了<Collection>标签,是是多表查询的关键,在注解中用来指定子查询返回对象集合。 
注意:聚集元素用来处理“一对多”的关系。需要指定映射的 Java 实体类的属性,属性的 javaType (一般为 ArrayList)但是注解中可以不定义; 
使用格式:
  @Result(property="",column="",many=@Many(select=" "))

3.3.2、使用注解实现一对一复杂关系映射及延迟加载
需求:加载账户信息时并且加载该账户的用户信息,根据情况可实现延迟加载。(注解方式实现) 。

3.3.2.1、添加User实体类及Account实体类

3.3.2.2、添加账户的持久层接口并使用注解配置

public interface IAccountDao {

    //查询所有账户,采用延迟加载的方式查询账户所属用户
    @Select("SELECT * FROM account")
    @Results(id="accountMap",value = {
            @Result(id=true,column = "id",property = "id"),
            @Result(column = "uid",property = "uid"),
            @Result(column = "money",property = "money"),
            @Result(column = "uid",property = "user",one = @One(select = "com.itheima.dao.IUserDao.findById",fetchType = FetchType.LAZY))
    })
    List<Account> findAll();        
}

3.3.2.3、添加用户额持久层接口并使用注解配置

3.3.2.4、测试一对一关联延迟加载

@Test
public void testFindAll(){
    List<Account> accounts = accountDao.findAll();
/*    for(Account au :accounts){
        System.out.println("--------------");
        System.out.println(au);
        System.out.println(au.getUser());
    }*/
}
View Code


3.3.3、使用注解实现一对多复杂关系映射
需求:查询用户信息时,也要查询他的账户列表。使用注解方式实现。 

3.3.3.1、User实体类加入List<Account>

3.3.3.2、编写用户的持久层接口并使用注解配置

public interface IUserDao {
    /**查询所有的用户
     * @return
     */
/*    @Select("SELECT * FROM user")
    @Results(id = "userMap", value = {
            @Result(id=true,column = "id",property = "userId"),
            @Result(column = "username",property = "userName"),
            @Result(column = "sex",property = "userSex"),
            @Result(column = "address",property = "userAddress"),
            @Result(column = "birthday",property = "userBirthday")
    })
    List<User> findAll();*/

    @Select("SELECT * FROM user")
    @Results(id = "userMap", value = {
            @Result(id=true,column = "id",property = "userId"),
            @Result(column = "username",property = "userName"),
            @Result(column = "sex",property = "userSex"),
            @Result(column = "address",property = "userAddress"),
            @Result(column = "birthday",property = "userBirthday"),
            @Result(column = "id",property = "accounts",many = @Many(select = "com.itheima.dao.IAccountDao.findAccountByUid",fetchType = FetchType.LAZY))
    })
    List<User> findAll();

@Many: 
相当于<collection>的配置 
select 属性:代表将要执行的 sql 语句 
fetchType 属性:代表加载方式,一般如果要延迟加载都设置为 LAZY 的值

3.3.3.3、编写账户的持久层接口并使用注解配置

public interface IAccountDao {

    /**查询所有用户,同时获取账户所属用户名称以及它的地址信息
     * @return
     */
    //查询所有账户,采用延迟加载的方式查询账户所属用户
    @Select("SELECT * FROM account")
    @Results(id="accountMap",value = {
            @Result(id=true,column = "id",property = "id"),
            @Result(column = "uid",property = "uid"),
            @Result(column = "money",property = "money"),
            @Result(column = "uid",property = "user",one = @One(select = "com.itheima.dao.IUserDao.findById",fetchType = FetchType.LAZY))
    })
    List<Account> findAll();
    
    @Select("SELECT * FROM account WHERE uid=#{uid}")
    List<Account> findAccountByUid();
    
}
View Code

3.3.3.4、添加测试方法

F:\Development\java\jdk1.8.0_144\bin\java -ea -Didea.test.cyclic.buffer.size=1048576 "-javaagent:F:\Intellij\JetBrains\IntelliJ IDEA 2017.3.4\lib\idea_rt.jar=56154:F:\Intellij\JetBrains\IntelliJ IDEA 2017.3.4\bin" -Dfile.encoding=UTF-8 -classpath "F:\Intellij\JetBrains\IntelliJ IDEA 2017.3.4\lib\idea_rt.jar;F:\Intellij\JetBrains\IntelliJ IDEA 2017.3.4\plugins\junit\lib\junit-rt.jar;F:\Intellij\JetBrains\IntelliJ IDEA 2017.3.4\plugins\junit\lib\junit5-rt.jar;F:\Development\java\jdk1.8.0_144\jre\lib\charsets.jar;F:\Development\java\jdk1.8.0_144\jre\lib\deploy.jar;F:\Development\java\jdk1.8.0_144\jre\lib\ext\access-bridge-64.jar;F:\Development\java\jdk1.8.0_144\jre\lib\ext\cldrdata.jar;F:\Development\java\jdk1.8.0_144\jre\lib\ext\dnsns.jar;F:\Development\java\jdk1.8.0_144\jre\lib\ext\jaccess.jar;F:\Development\java\jdk1.8.0_144\jre\lib\ext\jfxrt.jar;F:\Development\java\jdk1.8.0_144\jre\lib\ext\localedata.jar;F:\Development\java\jdk1.8.0_144\jre\lib\ext\nashorn.jar;F:\Development\java\jdk1.8.0_144\jre\lib\ext\sunec.jar;F:\Development\java\jdk1.8.0_144\jre\lib\ext\sunjce_provider.jar;F:\Development\java\jdk1.8.0_144\jre\lib\ext\sunmscapi.jar;F:\Development\java\jdk1.8.0_144\jre\lib\ext\sunpkcs11.jar;F:\Development\java\jdk1.8.0_144\jre\lib\ext\zipfs.jar;F:\Development\java\jdk1.8.0_144\jre\lib\javaws.jar;F:\Development\java\jdk1.8.0_144\jre\lib\jce.jar;F:\Development\java\jdk1.8.0_144\jre\lib\jfr.jar;F:\Development\java\jdk1.8.0_144\jre\lib\jfxswt.jar;F:\Development\java\jdk1.8.0_144\jre\lib\jsse.jar;F:\Development\java\jdk1.8.0_144\jre\lib\management-agent.jar;F:\Development\java\jdk1.8.0_144\jre\lib\plugin.jar;F:\Development\java\jdk1.8.0_144\jre\lib\resources.jar;F:\Development\java\jdk1.8.0_144\jre\lib\rt.jar;F:\CODE_SPACE\SouceCode\ITHEIMA\Frameworks\mybatis\day04_04annotationOne2Many\target\test-classes;F:\CODE_SPACE\SouceCode\ITHEIMA\Frameworks\mybatis\day04_04annotationOne2Many\target\classes;F:\Maven\maven_repository\org\mybatis\mybatis\3.4.5\mybatis-3.4.5.jar;F:\Maven\maven_repository\mysql\mysql-connector-java\5.1.6\mysql-connector-java-5.1.6.jar;F:\Maven\maven_repository\log4j\log4j\1.2.12\log4j-1.2.12.jar;F:\Maven\maven_repository\junit\junit\4.10\junit-4.10.jar;F:\Maven\maven_repository\org\hamcrest\hamcrest-core\1.1\hamcrest-core-1.1.jar" com.intellij.rt.execution.junit.JUnitStarter -ideVersion5 -junit4 com.itheima.test.AccountTest,testFindAll
2018-12-31 15:48:27,295 0      [           main] DEBUG ache.ibatis.logging.LogFactory  - Logging initialized using 'class org.apache.ibatis.logging.log4j.Log4jImpl' adapter.
2018-12-31 15:48:27,407 112    [           main] DEBUG       org.apache.ibatis.io.VFS  - Class not found: org.jboss.vfs.VFS
2018-12-31 15:48:27,407 112    [           main] DEBUG org.apache.ibatis.io.JBoss6VFS  - JBoss 6 VFS API is not available in this environment.
2018-12-31 15:48:27,407 112    [           main] DEBUG       org.apache.ibatis.io.VFS  - Class not found: org.jboss.vfs.VirtualFile
2018-12-31 15:48:27,408 113    [           main] DEBUG       org.apache.ibatis.io.VFS  - VFS implementation org.apache.ibatis.io.JBoss6VFS is not valid in this environment.
2018-12-31 15:48:27,408 113    [           main] DEBUG       org.apache.ibatis.io.VFS  - Using VFS adapter org.apache.ibatis.io.DefaultVFS
2018-12-31 15:48:27,409 114    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Find JAR URL: file:/F:/CODE_SPACE/SouceCode/ITHEIMA/Frameworks/mybatis/day04_04annotationOne2Many/target/classes/com/itheima/domain
2018-12-31 15:48:27,409 114    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Not a JAR: file:/F:/CODE_SPACE/SouceCode/ITHEIMA/Frameworks/mybatis/day04_04annotationOne2Many/target/classes/com/itheima/domain
2018-12-31 15:48:27,456 161    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Reader entry: Account.class
2018-12-31 15:48:27,456 161    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Reader entry: AccountUser.class
2018-12-31 15:48:27,456 161    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Reader entry: User.class
2018-12-31 15:48:27,457 162    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Listing file:/F:/CODE_SPACE/SouceCode/ITHEIMA/Frameworks/mybatis/day04_04annotationOne2Many/target/classes/com/itheima/domain
2018-12-31 15:48:27,457 162    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Find JAR URL: file:/F:/CODE_SPACE/SouceCode/ITHEIMA/Frameworks/mybatis/day04_04annotationOne2Many/target/classes/com/itheima/domain/Account.class
2018-12-31 15:48:27,458 163    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Not a JAR: file:/F:/CODE_SPACE/SouceCode/ITHEIMA/Frameworks/mybatis/day04_04annotationOne2Many/target/classes/com/itheima/domain/Account.class
2018-12-31 15:48:27,461 166    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Reader entry: ����   1 F
2018-12-31 15:48:27,462 167    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Find JAR URL: file:/F:/CODE_SPACE/SouceCode/ITHEIMA/Frameworks/mybatis/day04_04annotationOne2Many/target/classes/com/itheima/domain/AccountUser.class
2018-12-31 15:48:27,462 167    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Not a JAR: file:/F:/CODE_SPACE/SouceCode/ITHEIMA/Frameworks/mybatis/day04_04annotationOne2Many/target/classes/com/itheima/domain/AccountUser.class
2018-12-31 15:48:27,463 168    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Reader entry: ����   1 1
2018-12-31 15:48:27,464 169    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Find JAR URL: file:/F:/CODE_SPACE/SouceCode/ITHEIMA/Frameworks/mybatis/day04_04annotationOne2Many/target/classes/com/itheima/domain/User.class
2018-12-31 15:48:27,464 169    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Not a JAR: file:/F:/CODE_SPACE/SouceCode/ITHEIMA/Frameworks/mybatis/day04_04annotationOne2Many/target/classes/com/itheima/domain/User.class
2018-12-31 15:48:27,465 170    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Reader entry: ����   1 [      C
2018-12-31 15:48:27,465 170    [           main] DEBUG .apache.ibatis.io.ResolverUtil  - Checking to see if class com.itheima.domain.Account matches criteria [is assignable to Object]
2018-12-31 15:48:27,467 172    [           main] DEBUG .apache.ibatis.io.ResolverUtil  - Checking to see if class com.itheima.domain.AccountUser matches criteria [is assignable to Object]
2018-12-31 15:48:27,468 173    [           main] DEBUG .apache.ibatis.io.ResolverUtil  - Checking to see if class com.itheima.domain.User matches criteria [is assignable to Object]
2018-12-31 15:48:27,492 197    [           main] DEBUG source.pooled.PooledDataSource  - PooledDataSource forcefully closed/removed all connections.
2018-12-31 15:48:27,492 197    [           main] DEBUG source.pooled.PooledDataSource  - PooledDataSource forcefully closed/removed all connections.
2018-12-31 15:48:27,492 197    [           main] DEBUG source.pooled.PooledDataSource  - PooledDataSource forcefully closed/removed all connections.
2018-12-31 15:48:27,492 197    [           main] DEBUG source.pooled.PooledDataSource  - PooledDataSource forcefully closed/removed all connections.
2018-12-31 15:48:27,494 199    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Find JAR URL: file:/F:/CODE_SPACE/SouceCode/ITHEIMA/Frameworks/mybatis/day04_04annotationOne2Many/target/classes/com/itheima/dao
2018-12-31 15:48:27,494 199    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Not a JAR: file:/F:/CODE_SPACE/SouceCode/ITHEIMA/Frameworks/mybatis/day04_04annotationOne2Many/target/classes/com/itheima/dao
2018-12-31 15:48:27,495 200    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Reader entry: IAccountDao.class
2018-12-31 15:48:27,495 200    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Reader entry: IUserDao.class
2018-12-31 15:48:27,495 200    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Reader entry: other
2018-12-31 15:48:27,496 201    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Listing file:/F:/CODE_SPACE/SouceCode/ITHEIMA/Frameworks/mybatis/day04_04annotationOne2Many/target/classes/com/itheima/dao
2018-12-31 15:48:27,496 201    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Find JAR URL: file:/F:/CODE_SPACE/SouceCode/ITHEIMA/Frameworks/mybatis/day04_04annotationOne2Many/target/classes/com/itheima/dao/IAccountDao.class
2018-12-31 15:48:27,496 201    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Not a JAR: file:/F:/CODE_SPACE/SouceCode/ITHEIMA/Frameworks/mybatis/day04_04annotationOne2Many/target/classes/com/itheima/dao/IAccountDao.class
2018-12-31 15:48:27,497 202    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Reader entry: ����   1 "   ! findAll ()Ljava/util/List;     Signature 0()Ljava/util/List<Lcom/itheima/domain/Account;>; RuntimeVisibleAnnotations &Lorg/apache/ibatis/annotations/Select; value SELECT * FROM account 'Lorg/apache/ibatis/annotations/Results; id 
2018-12-31 15:48:27,498 203    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Find JAR URL: file:/F:/CODE_SPACE/SouceCode/ITHEIMA/Frameworks/mybatis/day04_04annotationOne2Many/target/classes/com/itheima/dao/IUserDao.class
2018-12-31 15:48:27,499 204    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Not a JAR: file:/F:/CODE_SPACE/SouceCode/ITHEIMA/Frameworks/mybatis/day04_04annotationOne2Many/target/classes/com/itheima/dao/IUserDao.class
2018-12-31 15:48:27,507 212    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Reader entry: ����   1 I G H findAll ()Ljava/util/List;     Signature -()Ljava/util/List<Lcom/itheima/domain/User;>; RuntimeVisibleAnnotations &Lorg/apache/ibatis/annotations/Select; value SELECT * FROM user 'Lorg/apache/ibatis/annotations/Results; id userMap &Lorg/apache/ibatis/annotations/Result;    columnproperty userIdusernameuserName sex userSex address userAddressbirthday userBirthdayaccounts many $Lorg/apache/ibatis/annotations/Many; select ,com.itheima.dao.IAccountDao.findAccountByUid     fetchType %Lorg/apache/ibatis/mapping/FetchType; LAZYfindById .(Ljava/lang/Integer;)Lcom/itheima/domain/User; !SELECT * FROM user WHERE id=#{id} )Lorg/apache/ibatis/annotations/ResultMap; 
2018-12-31 15:48:27,508 213    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Find JAR URL: file:/F:/CODE_SPACE/SouceCode/ITHEIMA/Frameworks/mybatis/day04_04annotationOne2Many/target/classes/com/itheima/dao/other
2018-12-31 15:48:27,508 213    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Not a JAR: file:/F:/CODE_SPACE/SouceCode/ITHEIMA/Frameworks/mybatis/day04_04annotationOne2Many/target/classes/com/itheima/dao/other
2018-12-31 15:48:27,508 213    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Reader entry: IAccountDao.xml
2018-12-31 15:48:27,509 214    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Reader entry: IUserDao.xml
2018-12-31 15:48:27,509 214    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Listing file:/F:/CODE_SPACE/SouceCode/ITHEIMA/Frameworks/mybatis/day04_04annotationOne2Many/target/classes/com/itheima/dao/other
2018-12-31 15:48:27,509 214    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Find JAR URL: file:/F:/CODE_SPACE/SouceCode/ITHEIMA/Frameworks/mybatis/day04_04annotationOne2Many/target/classes/com/itheima/dao/other/IAccountDao.xml
2018-12-31 15:48:27,509 214    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Not a JAR: file:/F:/CODE_SPACE/SouceCode/ITHEIMA/Frameworks/mybatis/day04_04annotationOne2Many/target/classes/com/itheima/dao/other/IAccountDao.xml
2018-12-31 15:48:27,512 217    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Reader entry: <?xml version="1.0" encoding="UTF-8"?>
2018-12-31 15:48:27,513 218    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Find JAR URL: file:/F:/CODE_SPACE/SouceCode/ITHEIMA/Frameworks/mybatis/day04_04annotationOne2Many/target/classes/com/itheima/dao/other/IUserDao.xml
2018-12-31 15:48:27,513 218    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Not a JAR: file:/F:/CODE_SPACE/SouceCode/ITHEIMA/Frameworks/mybatis/day04_04annotationOne2Many/target/classes/com/itheima/dao/other/IUserDao.xml
2018-12-31 15:48:27,514 219    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Reader entry: <?xml version="1.0" encoding="UTF-8"?>
2018-12-31 15:48:27,514 219    [           main] DEBUG .apache.ibatis.io.ResolverUtil  - Checking to see if class com.itheima.dao.IAccountDao matches criteria [is assignable to Object]
2018-12-31 15:48:27,514 219    [           main] DEBUG .apache.ibatis.io.ResolverUtil  - Checking to see if class com.itheima.dao.IUserDao matches criteria [is assignable to Object]
2018-12-31 15:48:27,603 308    [           main] DEBUG ansaction.jdbc.JdbcTransaction  - Opening JDBC Connection
2018-12-31 15:48:27,838 543    [           main] DEBUG source.pooled.PooledDataSource  - Created connection 811587677.
2018-12-31 15:48:27,840 545    [           main] DEBUG theima.dao.IAccountDao.findAll  - ==>  Preparing: SELECT * FROM account 
2018-12-31 15:48:27,859 564    [           main] DEBUG theima.dao.IAccountDao.findAll  - ==> Parameters: 
2018-12-31 15:48:27,901 606    [           main] DEBUG theima.dao.IAccountDao.findAll  - <==      Total: 3
--------------
2018-12-31 15:48:27,902 607    [           main] DEBUG .itheima.dao.IUserDao.findById  - ==>  Preparing: SELECT * FROM user WHERE id=? 
2018-12-31 15:48:27,902 607    [           main] DEBUG .itheima.dao.IUserDao.findById  - ==> Parameters: 41(Integer)
2018-12-31 15:48:27,910 615    [           main] DEBUG .itheima.dao.IUserDao.findById  - <==      Total: 1
Account{id=1, uid=41, money=1000.0}
2018-12-31 15:48:27,910 615    [           main] DEBUG o.IAccountDao.findAccountByUid  - ==>  Preparing: SELECT * FROM account WHERE uid=? 
2018-12-31 15:48:27,911 616    [           main] DEBUG o.IAccountDao.findAccountByUid  - ==> Parameters: 41(Integer)
2018-12-31 15:48:27,915 620    [           main] DEBUG o.IAccountDao.findAccountByUid  - <==      Total: 2
User{userId=41, userName='老王', userBirthday=Tue Feb 27 17:47:08 CST 2018, userSex='男', userAddress='CCC'}
--------------
2018-12-31 15:48:27,918 623    [           main] DEBUG .itheima.dao.IUserDao.findById  - ==>  Preparing: SELECT * FROM user WHERE id=? 
2018-12-31 15:48:27,918 623    [           main] DEBUG .itheima.dao.IUserDao.findById  - ==> Parameters: 45(Integer)
2018-12-31 15:48:27,920 625    [           main] DEBUG .itheima.dao.IUserDao.findById  - <==      Total: 1
Account{id=2, uid=45, money=1000.0}
2018-12-31 15:48:27,920 625    [           main] DEBUG o.IAccountDao.findAccountByUid  - ==>  Preparing: SELECT * FROM account WHERE uid=? 
2018-12-31 15:48:27,920 625    [           main] DEBUG o.IAccountDao.findAccountByUid  - ==> Parameters: 45(Integer)
2018-12-31 15:48:27,921 626    [           main] DEBUG o.IAccountDao.findAccountByUid  - <==      Total: 1
User{userId=45, userName='传智播客', userBirthday=Sun Mar 04 12:04:06 CST 2018, userSex='男', userAddress='北京金燕龙'}
--------------
Account{id=3, uid=41, money=2000.0}
User{userId=41, userName='老王', userBirthday=Tue Feb 27 17:47:08 CST 2018, userSex='男', userAddress='CCC'}
2018-12-31 15:48:27,922 627    [           main] DEBUG ansaction.jdbc.JdbcTransaction  - Closing JDBC Connection [com.mysql.jdbc.JDBC4Connection@305fd85d]
2018-12-31 15:48:27,922 627    [           main] DEBUG source.pooled.PooledDataSource  - Returned connection 811587677 to pool.
延迟加载日志信息-1
F:\Development\java\jdk1.8.0_144\bin\java -ea -Didea.test.cyclic.buffer.size=1048576 "-javaagent:F:\Intellij\JetBrains\IntelliJ IDEA 2017.3.4\lib\idea_rt.jar=56189:F:\Intellij\JetBrains\IntelliJ IDEA 2017.3.4\bin" -Dfile.encoding=UTF-8 -classpath "F:\Intellij\JetBrains\IntelliJ IDEA 2017.3.4\lib\idea_rt.jar;F:\Intellij\JetBrains\IntelliJ IDEA 2017.3.4\plugins\junit\lib\junit-rt.jar;F:\Intellij\JetBrains\IntelliJ IDEA 2017.3.4\plugins\junit\lib\junit5-rt.jar;F:\Development\java\jdk1.8.0_144\jre\lib\charsets.jar;F:\Development\java\jdk1.8.0_144\jre\lib\deploy.jar;F:\Development\java\jdk1.8.0_144\jre\lib\ext\access-bridge-64.jar;F:\Development\java\jdk1.8.0_144\jre\lib\ext\cldrdata.jar;F:\Development\java\jdk1.8.0_144\jre\lib\ext\dnsns.jar;F:\Development\java\jdk1.8.0_144\jre\lib\ext\jaccess.jar;F:\Development\java\jdk1.8.0_144\jre\lib\ext\jfxrt.jar;F:\Development\java\jdk1.8.0_144\jre\lib\ext\localedata.jar;F:\Development\java\jdk1.8.0_144\jre\lib\ext\nashorn.jar;F:\Development\java\jdk1.8.0_144\jre\lib\ext\sunec.jar;F:\Development\java\jdk1.8.0_144\jre\lib\ext\sunjce_provider.jar;F:\Development\java\jdk1.8.0_144\jre\lib\ext\sunmscapi.jar;F:\Development\java\jdk1.8.0_144\jre\lib\ext\sunpkcs11.jar;F:\Development\java\jdk1.8.0_144\jre\lib\ext\zipfs.jar;F:\Development\java\jdk1.8.0_144\jre\lib\javaws.jar;F:\Development\java\jdk1.8.0_144\jre\lib\jce.jar;F:\Development\java\jdk1.8.0_144\jre\lib\jfr.jar;F:\Development\java\jdk1.8.0_144\jre\lib\jfxswt.jar;F:\Development\java\jdk1.8.0_144\jre\lib\jsse.jar;F:\Development\java\jdk1.8.0_144\jre\lib\management-agent.jar;F:\Development\java\jdk1.8.0_144\jre\lib\plugin.jar;F:\Development\java\jdk1.8.0_144\jre\lib\resources.jar;F:\Development\java\jdk1.8.0_144\jre\lib\rt.jar;F:\CODE_SPACE\SouceCode\ITHEIMA\Frameworks\mybatis\day04_04annotationOne2Many\target\test-classes;F:\CODE_SPACE\SouceCode\ITHEIMA\Frameworks\mybatis\day04_04annotationOne2Many\target\classes;F:\Maven\maven_repository\org\mybatis\mybatis\3.4.5\mybatis-3.4.5.jar;F:\Maven\maven_repository\mysql\mysql-connector-java\5.1.6\mysql-connector-java-5.1.6.jar;F:\Maven\maven_repository\log4j\log4j\1.2.12\log4j-1.2.12.jar;F:\Maven\maven_repository\junit\junit\4.10\junit-4.10.jar;F:\Maven\maven_repository\org\hamcrest\hamcrest-core\1.1\hamcrest-core-1.1.jar" com.intellij.rt.execution.junit.JUnitStarter -ideVersion5 -junit4 com.itheima.test.AccountTest,testFindAll
2018-12-31 15:51:17,182 0      [           main] DEBUG ache.ibatis.logging.LogFactory  - Logging initialized using 'class org.apache.ibatis.logging.log4j.Log4jImpl' adapter.
2018-12-31 15:51:17,273 91     [           main] DEBUG       org.apache.ibatis.io.VFS  - Class not found: org.jboss.vfs.VFS
2018-12-31 15:51:17,273 91     [           main] DEBUG org.apache.ibatis.io.JBoss6VFS  - JBoss 6 VFS API is not available in this environment.
2018-12-31 15:51:17,274 92     [           main] DEBUG       org.apache.ibatis.io.VFS  - Class not found: org.jboss.vfs.VirtualFile
2018-12-31 15:51:17,274 92     [           main] DEBUG       org.apache.ibatis.io.VFS  - VFS implementation org.apache.ibatis.io.JBoss6VFS is not valid in this environment.
2018-12-31 15:51:17,275 93     [           main] DEBUG       org.apache.ibatis.io.VFS  - Using VFS adapter org.apache.ibatis.io.DefaultVFS
2018-12-31 15:51:17,275 93     [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Find JAR URL: file:/F:/CODE_SPACE/SouceCode/ITHEIMA/Frameworks/mybatis/day04_04annotationOne2Many/target/classes/com/itheima/domain
2018-12-31 15:51:17,275 93     [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Not a JAR: file:/F:/CODE_SPACE/SouceCode/ITHEIMA/Frameworks/mybatis/day04_04annotationOne2Many/target/classes/com/itheima/domain
2018-12-31 15:51:17,324 142    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Reader entry: Account.class
2018-12-31 15:51:17,324 142    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Reader entry: AccountUser.class
2018-12-31 15:51:17,324 142    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Reader entry: User.class
2018-12-31 15:51:17,325 143    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Listing file:/F:/CODE_SPACE/SouceCode/ITHEIMA/Frameworks/mybatis/day04_04annotationOne2Many/target/classes/com/itheima/domain
2018-12-31 15:51:17,325 143    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Find JAR URL: file:/F:/CODE_SPACE/SouceCode/ITHEIMA/Frameworks/mybatis/day04_04annotationOne2Many/target/classes/com/itheima/domain/Account.class
2018-12-31 15:51:17,325 143    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Not a JAR: file:/F:/CODE_SPACE/SouceCode/ITHEIMA/Frameworks/mybatis/day04_04annotationOne2Many/target/classes/com/itheima/domain/Account.class
2018-12-31 15:51:17,326 144    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Reader entry: ����   1 F
2018-12-31 15:51:17,327 145    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Find JAR URL: file:/F:/CODE_SPACE/SouceCode/ITHEIMA/Frameworks/mybatis/day04_04annotationOne2Many/target/classes/com/itheima/domain/AccountUser.class
2018-12-31 15:51:17,327 145    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Not a JAR: file:/F:/CODE_SPACE/SouceCode/ITHEIMA/Frameworks/mybatis/day04_04annotationOne2Many/target/classes/com/itheima/domain/AccountUser.class
2018-12-31 15:51:17,328 146    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Reader entry: ����   1 1
2018-12-31 15:51:17,328 146    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Find JAR URL: file:/F:/CODE_SPACE/SouceCode/ITHEIMA/Frameworks/mybatis/day04_04annotationOne2Many/target/classes/com/itheima/domain/User.class
2018-12-31 15:51:17,330 148    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Not a JAR: file:/F:/CODE_SPACE/SouceCode/ITHEIMA/Frameworks/mybatis/day04_04annotationOne2Many/target/classes/com/itheima/domain/User.class
2018-12-31 15:51:17,332 150    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Reader entry: ����   1 [      C
2018-12-31 15:51:17,332 150    [           main] DEBUG .apache.ibatis.io.ResolverUtil  - Checking to see if class com.itheima.domain.Account matches criteria [is assignable to Object]
2018-12-31 15:51:17,334 152    [           main] DEBUG .apache.ibatis.io.ResolverUtil  - Checking to see if class com.itheima.domain.AccountUser matches criteria [is assignable to Object]
2018-12-31 15:51:17,334 152    [           main] DEBUG .apache.ibatis.io.ResolverUtil  - Checking to see if class com.itheima.domain.User matches criteria [is assignable to Object]
2018-12-31 15:51:17,355 173    [           main] DEBUG source.pooled.PooledDataSource  - PooledDataSource forcefully closed/removed all connections.
2018-12-31 15:51:17,355 173    [           main] DEBUG source.pooled.PooledDataSource  - PooledDataSource forcefully closed/removed all connections.
2018-12-31 15:51:17,355 173    [           main] DEBUG source.pooled.PooledDataSource  - PooledDataSource forcefully closed/removed all connections.
2018-12-31 15:51:17,355 173    [           main] DEBUG source.pooled.PooledDataSource  - PooledDataSource forcefully closed/removed all connections.
2018-12-31 15:51:17,357 175    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Find JAR URL: file:/F:/CODE_SPACE/SouceCode/ITHEIMA/Frameworks/mybatis/day04_04annotationOne2Many/target/classes/com/itheima/dao
2018-12-31 15:51:17,360 178    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Not a JAR: file:/F:/CODE_SPACE/SouceCode/ITHEIMA/Frameworks/mybatis/day04_04annotationOne2Many/target/classes/com/itheima/dao
2018-12-31 15:51:17,362 180    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Reader entry: IAccountDao.class
2018-12-31 15:51:17,362 180    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Reader entry: IUserDao.class
2018-12-31 15:51:17,362 180    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Reader entry: other
2018-12-31 15:51:17,362 180    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Listing file:/F:/CODE_SPACE/SouceCode/ITHEIMA/Frameworks/mybatis/day04_04annotationOne2Many/target/classes/com/itheima/dao
2018-12-31 15:51:17,362 180    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Find JAR URL: file:/F:/CODE_SPACE/SouceCode/ITHEIMA/Frameworks/mybatis/day04_04annotationOne2Many/target/classes/com/itheima/dao/IAccountDao.class
2018-12-31 15:51:17,363 181    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Not a JAR: file:/F:/CODE_SPACE/SouceCode/ITHEIMA/Frameworks/mybatis/day04_04annotationOne2Many/target/classes/com/itheima/dao/IAccountDao.class
2018-12-31 15:51:17,364 182    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Reader entry: ����   1 "   ! findAll ()Ljava/util/List;     Signature 0()Ljava/util/List<Lcom/itheima/domain/Account;>; RuntimeVisibleAnnotations &Lorg/apache/ibatis/annotations/Select; value SELECT * FROM account 'Lorg/apache/ibatis/annotations/Results; id 
2018-12-31 15:51:17,364 182    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Find JAR URL: file:/F:/CODE_SPACE/SouceCode/ITHEIMA/Frameworks/mybatis/day04_04annotationOne2Many/target/classes/com/itheima/dao/IUserDao.class
2018-12-31 15:51:17,365 183    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Not a JAR: file:/F:/CODE_SPACE/SouceCode/ITHEIMA/Frameworks/mybatis/day04_04annotationOne2Many/target/classes/com/itheima/dao/IUserDao.class
2018-12-31 15:51:17,366 184    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Reader entry: ����   1 I G H findAll ()Ljava/util/List;     Signature -()Ljava/util/List<Lcom/itheima/domain/User;>; RuntimeVisibleAnnotations &Lorg/apache/ibatis/annotations/Select; value SELECT * FROM user 'Lorg/apache/ibatis/annotations/Results; id userMap &Lorg/apache/ibatis/annotations/Result;    columnproperty userIdusernameuserName sex userSex address userAddressbirthday userBirthdayaccounts many $Lorg/apache/ibatis/annotations/Many; select ,com.itheima.dao.IAccountDao.findAccountByUid     fetchType %Lorg/apache/ibatis/mapping/FetchType; LAZYfindById .(Ljava/lang/Integer;)Lcom/itheima/domain/User; !SELECT * FROM user WHERE id=#{id} )Lorg/apache/ibatis/annotations/ResultMap; 
2018-12-31 15:51:17,366 184    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Find JAR URL: file:/F:/CODE_SPACE/SouceCode/ITHEIMA/Frameworks/mybatis/day04_04annotationOne2Many/target/classes/com/itheima/dao/other
2018-12-31 15:51:17,367 185    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Not a JAR: file:/F:/CODE_SPACE/SouceCode/ITHEIMA/Frameworks/mybatis/day04_04annotationOne2Many/target/classes/com/itheima/dao/other
2018-12-31 15:51:17,367 185    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Reader entry: IAccountDao.xml
2018-12-31 15:51:17,368 186    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Reader entry: IUserDao.xml
2018-12-31 15:51:17,368 186    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Listing file:/F:/CODE_SPACE/SouceCode/ITHEIMA/Frameworks/mybatis/day04_04annotationOne2Many/target/classes/com/itheima/dao/other
2018-12-31 15:51:17,368 186    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Find JAR URL: file:/F:/CODE_SPACE/SouceCode/ITHEIMA/Frameworks/mybatis/day04_04annotationOne2Many/target/classes/com/itheima/dao/other/IAccountDao.xml
2018-12-31 15:51:17,368 186    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Not a JAR: file:/F:/CODE_SPACE/SouceCode/ITHEIMA/Frameworks/mybatis/day04_04annotationOne2Many/target/classes/com/itheima/dao/other/IAccountDao.xml
2018-12-31 15:51:17,370 188    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Reader entry: <?xml version="1.0" encoding="UTF-8"?>
2018-12-31 15:51:17,371 189    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Find JAR URL: file:/F:/CODE_SPACE/SouceCode/ITHEIMA/Frameworks/mybatis/day04_04annotationOne2Many/target/classes/com/itheima/dao/other/IUserDao.xml
2018-12-31 15:51:17,371 189    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Not a JAR: file:/F:/CODE_SPACE/SouceCode/ITHEIMA/Frameworks/mybatis/day04_04annotationOne2Many/target/classes/com/itheima/dao/other/IUserDao.xml
2018-12-31 15:51:17,372 190    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Reader entry: <?xml version="1.0" encoding="UTF-8"?>
2018-12-31 15:51:17,373 191    [           main] DEBUG .apache.ibatis.io.ResolverUtil  - Checking to see if class com.itheima.dao.IAccountDao matches criteria [is assignable to Object]
2018-12-31 15:51:17,373 191    [           main] DEBUG .apache.ibatis.io.ResolverUtil  - Checking to see if class com.itheima.dao.IUserDao matches criteria [is assignable to Object]
2018-12-31 15:51:17,463 281    [           main] DEBUG ansaction.jdbc.JdbcTransaction  - Opening JDBC Connection
2018-12-31 15:51:17,705 523    [           main] DEBUG source.pooled.PooledDataSource  - Created connection 811587677.
2018-12-31 15:51:17,707 525    [           main] DEBUG theima.dao.IAccountDao.findAll  - ==>  Preparing: SELECT * FROM account 
2018-12-31 15:51:17,728 546    [           main] DEBUG theima.dao.IAccountDao.findAll  - ==> Parameters: 
2018-12-31 15:51:17,770 588    [           main] DEBUG theima.dao.IAccountDao.findAll  - <==      Total: 3
2018-12-31 15:51:17,770 588    [           main] DEBUG ansaction.jdbc.JdbcTransaction  - Closing JDBC Connection [com.mysql.jdbc.JDBC4Connection@305fd85d]
2018-12-31 15:51:17,771 589    [           main] DEBUG source.pooled.PooledDataSource  - Returned connection 811587677 to pool.

Process finished with exit code 0
延迟加载日志信息-2

 


3.4、mybatis基于注解的二级缓存
3.4.1、在SqlMapConfig中开启二级缓存支持

 <!--配置参数-->
<settings>
        <!--开启二级缓存的支持-->
        <setting name="cacheEnabled" value="true"></setting>
</settings>

3.4.2、在持久层接口中使用注解配置二级缓存

/**
 * 用户持久层接口
 */
@CacheNamespace(blocking = true)
public interface IUserDao {


测试:

@Test
public void testSecondLevelCache(){
    SqlSession sqlSession1 = factory.openSession();
    IUserDao userDao1 = sqlSession1.getMapper(IUserDao.class);
    User user1 = userDao1.findById(41);
    System.out.println(user1);
    sqlSession1.close();    //一级缓存消失

    SqlSession sqlSession2 = factory.openSession();
    IUserDao userDao2 = sqlSession2.getMapper(IUserDao.class);
    User user2 = userDao2.findById(41);
    System.out.println(user2);
    sqlSession2.close();

    System.out.println(user1==user2);
}
View Code

 

二级缓存日志-未使用-1
F:\Development\java\jdk1.8.0_144\bin\java -ea -Didea.test.cyclic.buffer.size=1048576 "-javaagent:F:\Intellij\JetBrains\IntelliJ IDEA 2017.3.4\lib\idea_rt.jar=56546:F:\Intellij\JetBrains\IntelliJ IDEA 2017.3.4\bin" -Dfile.encoding=UTF-8 -classpath "F:\Intellij\JetBrains\IntelliJ IDEA 2017.3.4\lib\idea_rt.jar;F:\Intellij\JetBrains\IntelliJ IDEA 2017.3.4\plugins\junit\lib\junit-rt.jar;F:\Intellij\JetBrains\IntelliJ IDEA 2017.3.4\plugins\junit\lib\junit5-rt.jar;F:\Development\java\jdk1.8.0_144\jre\lib\charsets.jar;F:\Development\java\jdk1.8.0_144\jre\lib\deploy.jar;F:\Development\java\jdk1.8.0_144\jre\lib\ext\access-bridge-64.jar;F:\Development\java\jdk1.8.0_144\jre\lib\ext\cldrdata.jar;F:\Development\java\jdk1.8.0_144\jre\lib\ext\dnsns.jar;F:\Development\java\jdk1.8.0_144\jre\lib\ext\jaccess.jar;F:\Development\java\jdk1.8.0_144\jre\lib\ext\jfxrt.jar;F:\Development\java\jdk1.8.0_144\jre\lib\ext\localedata.jar;F:\Development\java\jdk1.8.0_144\jre\lib\ext\nashorn.jar;F:\Development\java\jdk1.8.0_144\jre\lib\ext\sunec.jar;F:\Development\java\jdk1.8.0_144\jre\lib\ext\sunjce_provider.jar;F:\Development\java\jdk1.8.0_144\jre\lib\ext\sunmscapi.jar;F:\Development\java\jdk1.8.0_144\jre\lib\ext\sunpkcs11.jar;F:\Development\java\jdk1.8.0_144\jre\lib\ext\zipfs.jar;F:\Development\java\jdk1.8.0_144\jre\lib\javaws.jar;F:\Development\java\jdk1.8.0_144\jre\lib\jce.jar;F:\Development\java\jdk1.8.0_144\jre\lib\jfr.jar;F:\Development\java\jdk1.8.0_144\jre\lib\jfxswt.jar;F:\Development\java\jdk1.8.0_144\jre\lib\jsse.jar;F:\Development\java\jdk1.8.0_144\jre\lib\management-agent.jar;F:\Development\java\jdk1.8.0_144\jre\lib\plugin.jar;F:\Development\java\jdk1.8.0_144\jre\lib\resources.jar;F:\Development\java\jdk1.8.0_144\jre\lib\rt.jar;F:\CODE_SPACE\SouceCode\ITHEIMA\Frameworks\mybatis\day04_04annotationOne2Many\target\test-classes;F:\CODE_SPACE\SouceCode\ITHEIMA\Frameworks\mybatis\day04_04annotationOne2Many\target\classes;F:\Maven\maven_repository\org\mybatis\mybatis\3.4.5\mybatis-3.4.5.jar;F:\Maven\maven_repository\mysql\mysql-connector-java\5.1.6\mysql-connector-java-5.1.6.jar;F:\Maven\maven_repository\log4j\log4j\1.2.12\log4j-1.2.12.jar;F:\Maven\maven_repository\junit\junit\4.10\junit-4.10.jar;F:\Maven\maven_repository\org\hamcrest\hamcrest-core\1.1\hamcrest-core-1.1.jar" com.intellij.rt.execution.junit.JUnitStarter -ideVersion5 -junit4 com.itheima.test.SecondLevelCacheTest,testSecondLevelCache
2018-12-31 16:13:11,461 0      [           main] DEBUG ache.ibatis.logging.LogFactory  - Logging initialized using 'class org.apache.ibatis.logging.log4j.Log4jImpl' adapter.
2018-12-31 16:13:11,546 85     [           main] DEBUG       org.apache.ibatis.io.VFS  - Class not found: org.jboss.vfs.VFS
2018-12-31 16:13:11,546 85     [           main] DEBUG org.apache.ibatis.io.JBoss6VFS  - JBoss 6 VFS API is not available in this environment.
2018-12-31 16:13:11,547 86     [           main] DEBUG       org.apache.ibatis.io.VFS  - Class not found: org.jboss.vfs.VirtualFile
2018-12-31 16:13:11,547 86     [           main] DEBUG       org.apache.ibatis.io.VFS  - VFS implementation org.apache.ibatis.io.JBoss6VFS is not valid in this environment.
2018-12-31 16:13:11,548 87     [           main] DEBUG       org.apache.ibatis.io.VFS  - Using VFS adapter org.apache.ibatis.io.DefaultVFS
2018-12-31 16:13:11,548 87     [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Find JAR URL: file:/F:/CODE_SPACE/SouceCode/ITHEIMA/Frameworks/mybatis/day04_04annotationOne2Many/target/classes/com/itheima/domain
2018-12-31 16:13:11,548 87     [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Not a JAR: file:/F:/CODE_SPACE/SouceCode/ITHEIMA/Frameworks/mybatis/day04_04annotationOne2Many/target/classes/com/itheima/domain
2018-12-31 16:13:11,597 136    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Reader entry: Account.class
2018-12-31 16:13:11,598 137    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Reader entry: AccountUser.class
2018-12-31 16:13:11,598 137    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Reader entry: User.class
2018-12-31 16:13:11,598 137    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Listing file:/F:/CODE_SPACE/SouceCode/ITHEIMA/Frameworks/mybatis/day04_04annotationOne2Many/target/classes/com/itheima/domain
2018-12-31 16:13:11,598 137    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Find JAR URL: file:/F:/CODE_SPACE/SouceCode/ITHEIMA/Frameworks/mybatis/day04_04annotationOne2Many/target/classes/com/itheima/domain/Account.class
2018-12-31 16:13:11,598 137    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Not a JAR: file:/F:/CODE_SPACE/SouceCode/ITHEIMA/Frameworks/mybatis/day04_04annotationOne2Many/target/classes/com/itheima/domain/Account.class
2018-12-31 16:13:11,600 139    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Reader entry: ����   1 F
2018-12-31 16:13:11,601 140    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Find JAR URL: file:/F:/CODE_SPACE/SouceCode/ITHEIMA/Frameworks/mybatis/day04_04annotationOne2Many/target/classes/com/itheima/domain/AccountUser.class
2018-12-31 16:13:11,601 140    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Not a JAR: file:/F:/CODE_SPACE/SouceCode/ITHEIMA/Frameworks/mybatis/day04_04annotationOne2Many/target/classes/com/itheima/domain/AccountUser.class
2018-12-31 16:13:11,603 142    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Reader entry: ����   1 1
2018-12-31 16:13:11,603 142    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Find JAR URL: file:/F:/CODE_SPACE/SouceCode/ITHEIMA/Frameworks/mybatis/day04_04annotationOne2Many/target/classes/com/itheima/domain/User.class
2018-12-31 16:13:11,604 143    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Not a JAR: file:/F:/CODE_SPACE/SouceCode/ITHEIMA/Frameworks/mybatis/day04_04annotationOne2Many/target/classes/com/itheima/domain/User.class
2018-12-31 16:13:11,606 145    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Reader entry: ����   1 [      C
2018-12-31 16:13:11,606 145    [           main] DEBUG .apache.ibatis.io.ResolverUtil  - Checking to see if class com.itheima.domain.Account matches criteria [is assignable to Object]
2018-12-31 16:13:11,607 146    [           main] DEBUG .apache.ibatis.io.ResolverUtil  - Checking to see if class com.itheima.domain.AccountUser matches criteria [is assignable to Object]
2018-12-31 16:13:11,609 148    [           main] DEBUG .apache.ibatis.io.ResolverUtil  - Checking to see if class com.itheima.domain.User matches criteria [is assignable to Object]
2018-12-31 16:13:11,628 167    [           main] DEBUG source.pooled.PooledDataSource  - PooledDataSource forcefully closed/removed all connections.
2018-12-31 16:13:11,628 167    [           main] DEBUG source.pooled.PooledDataSource  - PooledDataSource forcefully closed/removed all connections.
2018-12-31 16:13:11,628 167    [           main] DEBUG source.pooled.PooledDataSource  - PooledDataSource forcefully closed/removed all connections.
2018-12-31 16:13:11,628 167    [           main] DEBUG source.pooled.PooledDataSource  - PooledDataSource forcefully closed/removed all connections.
2018-12-31 16:13:11,630 169    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Find JAR URL: file:/F:/CODE_SPACE/SouceCode/ITHEIMA/Frameworks/mybatis/day04_04annotationOne2Many/target/classes/com/itheima/dao
2018-12-31 16:13:11,630 169    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Not a JAR: file:/F:/CODE_SPACE/SouceCode/ITHEIMA/Frameworks/mybatis/day04_04annotationOne2Many/target/classes/com/itheima/dao
2018-12-31 16:13:11,631 170    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Reader entry: IAccountDao.class
2018-12-31 16:13:11,631 170    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Reader entry: IUserDao.class
2018-12-31 16:13:11,631 170    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Reader entry: other
2018-12-31 16:13:11,631 170    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Listing file:/F:/CODE_SPACE/SouceCode/ITHEIMA/Frameworks/mybatis/day04_04annotationOne2Many/target/classes/com/itheima/dao
2018-12-31 16:13:11,632 171    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Find JAR URL: file:/F:/CODE_SPACE/SouceCode/ITHEIMA/Frameworks/mybatis/day04_04annotationOne2Many/target/classes/com/itheima/dao/IAccountDao.class
2018-12-31 16:13:11,632 171    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Not a JAR: file:/F:/CODE_SPACE/SouceCode/ITHEIMA/Frameworks/mybatis/day04_04annotationOne2Many/target/classes/com/itheima/dao/IAccountDao.class
2018-12-31 16:13:11,633 172    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Reader entry: ����   1 "   ! findAll ()Ljava/util/List;     Signature 0()Ljava/util/List<Lcom/itheima/domain/Account;>; RuntimeVisibleAnnotations &Lorg/apache/ibatis/annotations/Select; value SELECT * FROM account 'Lorg/apache/ibatis/annotations/Results; id 
2018-12-31 16:13:11,633 172    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Find JAR URL: file:/F:/CODE_SPACE/SouceCode/ITHEIMA/Frameworks/mybatis/day04_04annotationOne2Many/target/classes/com/itheima/dao/IUserDao.class
2018-12-31 16:13:11,633 172    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Not a JAR: file:/F:/CODE_SPACE/SouceCode/ITHEIMA/Frameworks/mybatis/day04_04annotationOne2Many/target/classes/com/itheima/dao/IUserDao.class
2018-12-31 16:13:11,635 174    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Reader entry: ����   1 K I J findAll ()Ljava/util/List;     Signature -()Ljava/util/List<Lcom/itheima/domain/User;>; RuntimeVisibleAnnotations &Lorg/apache/ibatis/annotations/Select; value SELECT * FROM user 'Lorg/apache/ibatis/annotations/Results; id userMap &Lorg/apache/ibatis/annotations/Result;    columnproperty userIdusernameuserName sex userSex address userAddressbirthday userBirthdayaccounts many $Lorg/apache/ibatis/annotations/Many; select ,com.itheima.dao.IAccountDao.findAccountByUid     fetchType %Lorg/apache/ibatis/mapping/FetchType; LAZYfindById .(Ljava/lang/Integer;)Lcom/itheima/domain/User; !SELECT * FROM user WHERE id=#{id} )Lorg/apache/ibatis/annotations/ResultMap; 
2018-12-31 16:13:11,635 174    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Find JAR URL: file:/F:/CODE_SPACE/SouceCode/ITHEIMA/Frameworks/mybatis/day04_04annotationOne2Many/target/classes/com/itheima/dao/other
2018-12-31 16:13:11,635 174    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Not a JAR: file:/F:/CODE_SPACE/SouceCode/ITHEIMA/Frameworks/mybatis/day04_04annotationOne2Many/target/classes/com/itheima/dao/other
2018-12-31 16:13:11,636 175    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Reader entry: IAccountDao.xml
2018-12-31 16:13:11,636 175    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Reader entry: IUserDao.xml
2018-12-31 16:13:11,636 175    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Listing file:/F:/CODE_SPACE/SouceCode/ITHEIMA/Frameworks/mybatis/day04_04annotationOne2Many/target/classes/com/itheima/dao/other
2018-12-31 16:13:11,636 175    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Find JAR URL: file:/F:/CODE_SPACE/SouceCode/ITHEIMA/Frameworks/mybatis/day04_04annotationOne2Many/target/classes/com/itheima/dao/other/IAccountDao.xml
2018-12-31 16:13:11,637 176    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Not a JAR: file:/F:/CODE_SPACE/SouceCode/ITHEIMA/Frameworks/mybatis/day04_04annotationOne2Many/target/classes/com/itheima/dao/other/IAccountDao.xml
2018-12-31 16:13:11,638 177    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Reader entry: <?xml version="1.0" encoding="UTF-8"?>
2018-12-31 16:13:11,638 177    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Find JAR URL: file:/F:/CODE_SPACE/SouceCode/ITHEIMA/Frameworks/mybatis/day04_04annotationOne2Many/target/classes/com/itheima/dao/other/IUserDao.xml
2018-12-31 16:13:11,638 177    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Not a JAR: file:/F:/CODE_SPACE/SouceCode/ITHEIMA/Frameworks/mybatis/day04_04annotationOne2Many/target/classes/com/itheima/dao/other/IUserDao.xml
2018-12-31 16:13:11,640 179    [           main] DEBUG rg.apache.ibatis.io.DefaultVFS  - Reader entry: <?xml version="1.0" encoding="UTF-8"?>
2018-12-31 16:13:11,642 181    [           main] DEBUG .apache.ibatis.io.ResolverUtil  - Checking to see if class com.itheima.dao.IAccountDao matches criteria [is assignable to Object]
2018-12-31 16:13:11,645 184    [           main] DEBUG .apache.ibatis.io.ResolverUtil  - Checking to see if class com.itheima.dao.IUserDao matches criteria [is assignable to Object]
2018-12-31 16:13:11,746 285    [           main] DEBUG       com.itheima.dao.IUserDao  - Cache Hit Ratio [com.itheima.dao.IUserDao]: 0.0
2018-12-31 16:13:11,752 291    [           main] DEBUG ansaction.jdbc.JdbcTransaction  - Opening JDBC Connection
2018-12-31 16:13:11,988 527    [           main] DEBUG source.pooled.PooledDataSource  - Created connection 712256162.
2018-12-31 16:13:11,988 527    [           main] DEBUG ansaction.jdbc.JdbcTransaction  - Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@2a742aa2]
2018-12-31 16:13:11,990 529    [           main] DEBUG .itheima.dao.IUserDao.findById  - ==>  Preparing: SELECT * FROM user WHERE id=? 
2018-12-31 16:13:12,010 549    [           main] DEBUG .itheima.dao.IUserDao.findById  - ==> Parameters: 41(Integer)
2018-12-31 16:13:12,059 598    [           main] DEBUG .itheima.dao.IUserDao.findById  - <==      Total: 1
2018-12-31 16:13:12,059 598    [           main] DEBUG o.IAccountDao.findAccountByUid  - ==>  Preparing: SELECT * FROM account WHERE uid=? 
2018-12-31 16:13:12,060 599    [           main] DEBUG o.IAccountDao.findAccountByUid  - ==> Parameters: 41(Integer)
2018-12-31 16:13:12,061 600    [           main] DEBUG o.IAccountDao.findAccountByUid  - <==      Total: 2
User{userId=41, userName='老王', userBirthday=Tue Feb 27 17:47:08 CST 2018, userSex='男', userAddress='CCC'}
2018-12-31 16:13:12,073 612    [           main] DEBUG ansaction.jdbc.JdbcTransaction  - Resetting autocommit to true on JDBC Connection [com.mysql.jdbc.JDBC4Connection@2a742aa2]
2018-12-31 16:13:12,076 615    [           main] DEBUG ansaction.jdbc.JdbcTransaction  - Closing JDBC Connection [com.mysql.jdbc.JDBC4Connection@2a742aa2]
2018-12-31 16:13:12,076 615    [           main] DEBUG source.pooled.PooledDataSource  - Returned connection 712256162 to pool.
2018-12-31 16:13:12,121 660    [           main] DEBUG       com.itheima.dao.IUserDao  - Cache Hit Ratio [com.itheima.dao.IUserDao]: 0.5
User{userId=41, userName='老王', userBirthday=Tue Feb 27 17:47:08 CST 2018, userSex='男', userAddress='CCC'}
false

Process finished with exit code 0
二级缓存日志-使用-2





posted @ 2018-12-30 12:01  payn  阅读(481)  评论(0)    收藏  举报