Java学习之MyBatis(5)

附上学习链接
以下是我的学习笔记。


Mybatis的缓存

一级缓存

  • session缓存,默认开启
  • 测试类Test_8
package com.southwind.test;

import com.southwind.entity.Account;
import com.southwind.repository.AccountRepository;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.InputStream;
//一级缓存  SqlSession级别
public class Test_8 {
   
    public static void main(String[] args) {
   
        InputStream inputStream = Test.class.getClassLoader().getResourceAsStream("config.xml");
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        AccountRepository accountRepository = sqlSession.getMapper(AccountRepository.class);
        Account account = accountRepository.findById(1);
        System.out.println(account);
//        测试 关闭sqlSession再打开是否查询两次SQL语句
//        sqlSession.close();
//        sqlSession = sqlSessionFactory.openSession();
//        accountRepository = sqlSession.getMapper(AccountRepository.class);
        Account account1 = accountRepository.findById(1);
        System.out.println(account1);
    }
}

  • 连续查询同样的对象,SQL语句只执行一次
    在这里插入图片描述
  • 关闭SQLSession后再次打开,查询了两次SQL语句
    在这里插入图片描述

二级缓存

MyBatis自带的二级缓存
  • 测试类Test_9
package com.southwind.test;

import com.southwind.entity.Account;
import com.southwind.repository.AccountRepository;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.InputStream;

//Mybatis 自带的二级缓存
//config.xml配制开启二级缓存
//Mapper.xml开启二级缓存
//实体类实现序列化接口
//只要来自同一个Mapper.xml就可以用
public class Test_9 {
   
    public static void main(String[] args) {
   
        InputStream inputStream = Test.class.getClassLoader().getResourceAsStream("config.xml");
        SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
        SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();
        AccountRepository accountRepository = sqlSession.getMapper(AccountRepository.class);
        Account account = accountRepository.findById(1);
        System.out.println(account);
//        测试 关闭sqlSession再打开是否查询两次SQL语句
        sqlSession.close();
        sqlSession = sqlSessionFactory.openSession();
        accountRepository = sqlSession.getMapper(AccountRepository.class);
        Account account1 = accountRepository.findById(1);
        System.out.println(account1);

    }
}

  • AccountRepositoryMapper.xml 添加该条语句(Mapper.xml开启二级缓存)
<!--    在Mapper.xml中开启二级缓存-->
    <cache></cache>
  • config.xml 中配制开启二级缓存
<!--    延时加载的配制-->
    <settings>
<!--        打印SQL-->
        <setting name="logImpl" value="STDOUT_LOGGING"/>
<!--        延时加载-->
        <setting name="lazyLoadingEnabled" value="true"/>
<!--        开启二级缓存-->
        <setting name="cacheEnabled" value="true"/>
    </settings>
  • 实体类实现序列化接口 Account.java
package com.southwind.entity;
import lombok.Data;

import java.io.Serializable;

@Data
public class Account implements Serializable{
   
    private int id;
    private String username;
    private String password;
    private int age;
    public Account(int id, String username, String password, int age) {
   
        this.id = id;
        this.username = username;
        this.password = password;
        this.age = age;
    }

    @Override
    public String toString() 
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值