zoukankan      html  css  js  c++  java
  • mybatis的缓存机制

    一级缓存:

    MyBatis的一级缓存指的是在一个Session域内,session为关闭的时候执行的查询会根据SQL为key被缓存(跟mysql缓存一样,修改任何参数的值都会导致缓存失效)

    package cn.itcast.mybatis.dao;
    
    import static org.junit.Assert.*;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.Date;
    import java.util.HashMap;
    import java.util.List;
    
    import org.apache.ibatis.io.Resources;
    import org.apache.ibatis.session.SqlSession;
    import org.apache.ibatis.session.SqlSessionFactory;
    import org.apache.ibatis.session.SqlSessionFactoryBuilder;
    import org.junit.Before;
    import org.junit.Test;
    
    import cn.itcast.mybatis.pojo.User;
    
    public class UserDAOTest2 {
    
        private static IUser userDAO = null;
        
        private static SqlSession sqlSession = null;
    
        @Before
        public void init() {
            try {
                // 构造SqlSessionFactory
                // 定义配置文件路径
                String resource = "mybatis-config.xml";
                // 读取配置文件
                InputStream inputStream = Resources.getResourceAsStream(resource);
                // 通过SqlSessionFactoryBuilder构建一个SqlSessionFactory
                SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream,"test");
                
                this.sqlSession = sqlSessionFactory.openSession(false);//设为false时,必须手动提交:sqlSession.commit();
    //            this.sqlSession.close();
                this.userDAO = sqlSession.getMapper(IUser.class);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        
        static{
            
              // 构造SqlSessionFactory
            // 定义配置文件路径
            String resource = "mybatis-config.xml";
            // 读取配置文件
            InputStream inputStream;
            try {
                inputStream = Resources.getResourceAsStream(resource);
                 // 通过SqlSessionFactoryBuilder构建一个SqlSessionFactory
                SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream,"test");
                
               sqlSession = sqlSessionFactory.openSession(false);//设为false时,必须手动提交:sqlSession.commit();
    //            this.sqlSession.close();//当关闭的时候,在下面的方法中都会报错
               userDAO = sqlSession.getMapper(IUser.class);
                
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
           
        }
    
        @Test
        public void testQueryUserByUserName() {
            User user = this.userDAO.queryUserByUserName("zhangsan");
            System.out.println(user);
        }
        
        @Test
        public void testQueryByTabkeName() {
        
           List <HashMap<String, Object>> list2= this.userDAO.queryByTabkeName("tb_order");
          for (HashMap<String, Object> hashMap : list2) {
              System.out.println(hashMap);
            
        }
        }
        
        @Test
        public void testQueryUserByUserNameAndPassword() {
            HashMap<String, Object> map = new HashMap<String, Object>();
            map.put("userName", "zhangsan");
            map.put("password", "123456");
    //        User user = this.userDAO.queryUserByUserNameAndPassword(map);
            User user = this.userDAO.queryUserByUserNameAndPassword("zhangsan","123456");
            System.out.println(user);
        }
    
        @Test
        public void testSaveUser() {
           User user = new User();
           user.setAge(20);
           user.setBirthday(new Date());
           user.setName("test_name_9");
           user.setPassword("123456");
           user.setSex(true);
           user.setUserName("test_username_9");
           
           this.userDAO.saveUser(user);
           
           System.out.println(user);
           // 提交
           this.sqlSession.commit();
        }
    
        @Test
        public void testUpdateUser() {
            User user = new User();
            user.setAge(20);
            user.setBirthday(new Date());
            user.setName("test_name_1");
            user.setPassword("123qwe");
            user.setSex(true);
            user.setId(6L);
            
            this.userDAO.updateUser(user);
            this.sqlSession.commit();
        }
    
        @Test
        public void testDeleteUserById() {
            this.userDAO.deleteUserById(6L);
        }
    
    }

    二级缓存:

    Mybatis的二级缓存的作用域是一个mapper的namespace,同一个namespace中查询sql可以从缓存中命中。

    二级缓存是可以跨session的。

    开启二级缓存:

    在mapper.xml文件中加入 <cache /> 。

  • 相关阅读:
    149. Max Points on a Line(js)
    148. Sort List(js)
    147. Insertion Sort List(js)
    146. LRU Cache(js)
    145. Binary Tree Postorder Traversal(js)
    144. Binary Tree Preorder Traversal(js)
    143. Reorder List(js)
    142. Linked List Cycle II(js)
    141. Linked List Cycle(js)
    140. Word Break II(js)
  • 原文地址:https://www.cnblogs.com/wangchuanfu/p/5884644.html
Copyright © 2011-2022 走看看