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 /> 。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM