AAA Mybatis一级缓存 简单入门(上篇)

来源:互联网 发布:python row函数 编辑:程序博客网 时间:2024/06/05 22:38

sqlSession.selectOne方法相当于get方法

sqlSession.selectList方法相当于find方法(查询多个的党法)


一、建一个普通java项目,

项目目录如下:


添加jar包如下:

junit-4.10.jar

log4j-1.2.16.jar

mybatis-3.1.1.jar

mysql-connector-java-5.1.7-bin.jar


二、实体类

[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. public class User{  
  2.       
  3.     private int id;  
  4.     private String name;  
  5.     private int age;  
  6.   
  7.     public User() {  
  8.     }  
  9.   
  10.     public User(int id, String name, int age) {  
  11.         this.id = id;  
  12.         this.name = name;  
  13.         this.age = age;  
  14.     }  
  15.   
  16.     public int getId() {  
  17.         return id;  
  18.     }  
  19.   
  20.     public void setId(int id) {  
  21.         this.id = id;  
  22.     }  
  23.   
  24.     public String getName() {  
  25.         return name;  
  26.     }  
  27.   
  28.     public void setName(String name) {  
  29.         this.name = name;  
  30.     }  
  31.   
  32.     public int getAge() {  
  33.         return age;  
  34.     }  
  35.   
  36.     public void setAge(int age) {  
  37.         this.age = age;  
  38.     }  
  39.   
  40.     @Override  
  41.     public String toString() {  
  42.         return "User [id=" + id + ", name=" + name + ", age=" + age + "]";  
  43.     }  
  44.   
  45. }  

无参数构造函数千万别忘了哟。。。

三、db.properties

[sql] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. driver=com.mysql.jdbc.Driver  
  2. url=jdbc:mysql://localhost:3306/mybatis  
  3. username=root  
  4. password=xxxx  

四、conf.xml(略去了干扰内容)

[html] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"   
  3. "http://mybatis.org/dtd/mybatis-3-config.dtd">  
  4. <configuration>  
  5.     <properties resource="db.properties"/>  
  6.       
  7.     <typeAliases>  
  8.         <typeAlias type="com.test9.User" alias="_CUser"/>  
  9.     </typeAliases>  
  10.       
  11.     <environments default="development">  
  12.         <environment id="development">  
  13.             <transactionManager type="JDBC" />  
  14.             <dataSource type="POOLED">  
  15.                 <property name="driver" value="${driver}" />  
  16.                 <property name="url" value="${url}" />  
  17.                 <property name="username" value="${username}" />  
  18.                 <property name="password" value="${password}" />  
  19.             </dataSource>  
  20.         </environment>  
  21.     </environments>  
  22.       
  23.     <mappers>  
  24.         <mapper resource="com/test9/userMapper.xml"/>  
  25.     </mappers>  
  26. </configuration>  

五、userMapper.xml

[html] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE  mapper  PUBLIC  "-//mybatis.org//DTD  Mapper  3.0//EN"   
  3. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">  
  4. <mapper namespace="com.test9.userMapper">  
  5.     <select id="getUser" parameterType="int" resultType="_CUser">  
  6.         select * from c_user where id=#{id}  
  7.     </select>  
  8.     <update id="updateUser" parameterType="_CUser">  
  9.         update c_user set name=#{name}, age=#{age} where id=#{id}  
  10.     </update>  
  11. </mapper>  

六、MybatisUtils

[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. import java.io.IOException;  
  2. import java.io.Reader;  
  3.   
  4. import org.apache.ibatis.io.Resources;  
  5. import org.apache.ibatis.session.SqlSessionFactory;  
  6. import org.apache.ibatis.session.SqlSessionFactoryBuilder;  
  7.   
  8. public class MybatisUtils {  
  9.   
  10.     public static SqlSessionFactory getSessionFactory(String resource)  
  11.             throws IOException {  
  12.         // 加载 mybatis 的配置文件(它也加载关联的映射文件)  
  13.         Reader reader = Resources.getResourceAsReader(resource);  
  14.         // 构建 sqlSession 的工厂  
  15.         SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder()  
  16.                 .build(reader);  
  17.           
  18.         return sessionFactory;  
  19.     }  
  20. }  


七、测试类

[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. import java.io.IOException;  
  2.   
  3. import org.apache.ibatis.session.SqlSession;  
  4. import org.apache.ibatis.session.SqlSessionFactory;  
  5. import org.junit.Test;  
  6.   
  7. import com.util.MybatisUtils;  
  8.   
  9. public class Test9 {  
  10.     /* 
  11.      * 一级缓存: 也就 Session 级的缓存(默认开启) 
  12.      */  
  13.     @Test  
  14.     public void testCache1() throws IOException {  
  15.         SqlSessionFactory factory = MybatisUtils.getSessionFactory("conf.xml");  
  16.         SqlSession session = factory.openSession();  
  17.   
  18.         String statement = "com.test9.userMapper.getUser";  
  19.         User user = session.selectOne(statement, 1);  
  20.         System.out.println(user);  
  21.   
  22.         /* 
  23.          * 一级缓存默认就会被使用 
  24.          */  
  25.         user = session.selectOne(statement, 1);  
  26.         System.out.println(user);  
  27.   
  28.         /* 
  29.          * 1. 必须是同一个 Session,如果 session 对象已经close()过了就不可能用了 
  30.          */  
  31.         SqlSession session1 = factory.openSession();  
  32.         user = session1.selectOne(statement, 1);  
  33.         System.out.println(user);  
  34.   
  35.         /* 
  36.          * 2. 查询条件是不一样的,没有缓存,重新查询 
  37.          */  
  38.         user = session.selectOne(statement, 2);  
  39.         System.out.println(user);  
  40.   
  41.         /* 
  42.          * 3. 清理缓存,重新查询 
  43.          */  
  44.         session.clearCache();  
  45.         user = session.selectOne(statement, 2);  
  46.         System.out.println(user);  
  47.   
  48.         /* 
  49.          * 4. 执行过增删改的操作(这些操作都会清理缓存) 
  50.          */  
  51.         session.update("com.test9.userMapper.updateUser"new User(2"user",  
  52.                 23));  
  53.         user = session.selectOne(statement, 2);  
  54.         System.out.println(user);  
  55.     }  
  56. }  

执行日志:

2015-05-09 17:59:51,078 [main] DEBUG [com.test9.userMapper.getUser] - ooo Using Connection [com.mysql.jdbc.JDBC4Connection@1ef3a22]
2015-05-09 17:59:51,078 [main] DEBUG [com.test9.userMapper.getUser] - ==>  Preparing: select * from c_user where id=? 
2015-05-09 17:59:51,140 [main] DEBUG [com.test9.userMapper.getUser] - ==> Parameters: 1(Integer)
User [id=1, name=Tom, age=12]
User [id=1, name=Tom, age=12]
2015-05-09 17:59:51,187 [main] DEBUG [com.test9.userMapper.getUser] - ooo Using Connection [com.mysql.jdbc.JDBC4Connection@6f947b]
2015-05-09 17:59:51,187 [main] DEBUG [com.test9.userMapper.getUser] - ==>  Preparing: select * from c_user where id=? 
2015-05-09 17:59:51,187 [main] DEBUG [com.test9.userMapper.getUser] - ==> Parameters: 1(Integer)
User [id=1, name=Tom, age=12]
2015-05-09 17:59:51,187 [main] DEBUG [com.test9.userMapper.getUser] - ooo Using Connection [com.mysql.jdbc.JDBC4Connection@1ef3a22]
2015-05-09 17:59:51,187 [main] DEBUG [com.test9.userMapper.getUser] - ==>  Preparing: select * from c_user where id=? 
2015-05-09 17:59:51,187 [main] DEBUG [com.test9.userMapper.getUser] - ==> Parameters: 2(Integer)
User [id=2, name=Jack, age=11]
2015-05-09 17:59:51,187 [main] DEBUG [com.test9.userMapper.getUser] - ooo Using Connection [com.mysql.jdbc.JDBC4Connection@1ef3a22]
2015-05-09 17:59:51,187 [main] DEBUG [com.test9.userMapper.getUser] - ==>  Preparing: select * from c_user where id=? 
2015-05-09 17:59:51,187 [main] DEBUG [com.test9.userMapper.getUser] - ==> Parameters: 2(Integer)
User [id=2, name=Jack, age=11]
2015-05-09 17:59:51,203 [main] DEBUG [com.test9.userMapper.updateUser] - ooo Using Connection [com.mysql.jdbc.JDBC4Connection@1ef3a22]
2015-05-09 17:59:51,203 [main] DEBUG [com.test9.userMapper.updateUser] - ==>  Preparing: update c_user set name=?, age=? where id=? 
2015-05-09 17:59:51,203 [main] DEBUG [com.test9.userMapper.updateUser] - ==> Parameters: user(String), 23(Integer), 2(Integer)
2015-05-09 17:59:51,437 [main] DEBUG [com.test9.userMapper.getUser] - ooo Using Connection [com.mysql.jdbc.JDBC4Connection@1ef3a22]
2015-05-09 17:59:51,437 [main] DEBUG [com.test9.userMapper.getUser] - ==>  Preparing: select * from c_user where id=? 
2015-05-09 17:59:51,437 [main] DEBUG [com.test9.userMapper.getUser] - ==> Parameters: 2(Integer)
User [id=2, name=user, age=23]


可以看到哪些查询用到了一级缓存,哪些没有用到。

0 0
原创粉丝点击