Mybatis基础知识(3)

SpringBoot 基础3 - Mybatis 基础知识 Mybatis 的功能架构 API 接口层:提供给外部使用的接口API,开发人员通过这些本地API来操纵数据库。接口层一接收到调用请求就会调用数据处理层来完成具体的数据处理。 数据处理层:负责具体的SQL查找、SQL解析、SQL执行和执行结果映射处理等。它主要的目的是根据调用的请求完成一次数据库操作。 基础支撑层:负责最基础的功能支撑,包括连接管理、事务管理、配置加载和缓存处理,这些都是共用的东西,将他们抽取出来作为最基础的组件。为上层的数据处理层提供最基础的支撑。 MyBatis XML配置 X 阅读详情

1、查询缓存

      Mybatis提供一级缓存和二级缓存。

      

      一级缓存是SqlSession级别的缓存。在操作数据库时需要构造sqlSession对象。在该对象中有一个数据结构(HashMap)用户存储缓存数据。

      不同的sqlSession之间的缓存数据区域(HashMap)是互相不影响的。

      二级缓存是mapper级别的缓存,多个sqlSession去操作同一个mapper的sql语句,多个sqlSession可以共用二级缓存,二级缓存是跨sqlSession的。

      1.1、一级缓存

      1.1.1、一级缓存工作原理

      

      1.1.2、一级缓存测试

      测试代码:(使用同一个sqlSession进行查询)

    @Test
    public void testFirstCache(){
        SqlSession sqlSession = sqlSessionFactory.openSession();
        UserDao userDao = sqlSession.getMapper(UserDao.class);
        
        User user = userDao.findUserById(1);
        User user1 = userDao.findUserById(1);
        
        System.out.println(user);
        System.out.println(user1);
    }
      测试结果:(查询结果相同,而且只生成一条sql语句,证明一级缓存存在)

      

      1.2、二级缓存

      1.2.1、二级缓存原理:

      
      Mybatis是根据映射文件来开辟二级缓存的存储空间:使用哪个映射文件进行查询,就开辟哪一个映射文件的二级缓存。
      使用多个映射文件查询的,根据namespace运行存储空间的开辟。
      Mybatis查询获取原理:
      第一次使用sql语句进行查询,首先检测二级缓存,如果二级缓存中没有,再检测一级缓存,如果一级缓存也没有,查询数据库。
      第二次使用相同的sql语句进行查询,如果二级缓存开启的情况下,先检测二级缓存,如果二级缓存有,直接使用。
      二级缓存数据存储结构:
      Map结构:key是hashcode+sqlid+sql语句,value是存储查询值。

     1.2.2、开启二级缓存

      Mybatis的二级缓存是mapper级别的,除了需要在sqlMapConfig.xml中开启二级缓存,还需要在具体的mapper.xml中开启二级缓存。
      ☆注意:Mybatis缓存对应的pojo类要实现序列化接口(Serializable)
      在核心配置文件中加入:
<?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">
<configuration>
<settings>
	<!-- 开启二级缓存 -->
	<setting name="cacheEnabled" value="true"/>
</settings>
      在具体的mapper.xml文件中开启二级缓存:
<?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="lsq.study.dao.UserDao">

	<!-- 开启本mapper的namespace下的二级缓存 -->
	<cache/>

	<select id="findUserById" parameterType="int" resultType="lsq.study.domain.User">
		select * from user where id = #{id}
	</select>

</mapper>

      1.2.3、测试代码

      ☆注意:sqlSession1要提交关闭,
    @Test
    public void testSecondCache(){
        SqlSession sqlSession1 = sqlSessionFactory.openSession();
        UserDao userDao1 = sqlSession1.getMapper(UserDao.class);
        
        User user1 = userDao1.findUserById(1);
        sqlSession1.commit();
        sqlSession1.close();
        
        SqlSession sqlSession2 = sqlSessionFactory.openSession();
        UserDao userDao2 = sqlSession2.getMapper(UserDao.class);
        
        User user2 = userDao2.findUserById(1);
        
        System.out.println(user1);
        System.out.println(user2);
    }
      测试结果:
      

      1.2.4、useCache配置

      在statement中设置useCache=false可以禁用当前select语句的二级缓存,即每次查询都会发出sql语句查询,默认情况是true,即该sql使用二级缓存。
      <select id = "..." resultMap="..."   useCache="false">
      总结:针对每次查询都需要最新数据的sql,要设置成useCache=false,禁用二级缓存。

      1.2.5、刷新缓存

      在mapper的同一个namespace中,如果有其他insert、update、delete操作数据后需要刷新缓存,如果不执行刷新缓存会出现脏读。
      设置statement配置中的flushCache="true"属性,默认情况下为true,即刷新缓存。如果改成false则不会刷新。使用缓存时如果手动修改数据库表中的查询数据会出现脏读。
      如下:
      <insert   id=" "   parameterType=" "   flushCache="true">
      总结:一般情况下,执行完commit操作都需要刷新缓存,flushCache=true表示刷新缓存,这样可以避免数据库脏读。



      








【SpringBoot3】Spring Boot 3.0 集成 Mybatis Plus MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。 阅读详情

相关推荐

机器人C++开源库The Robotics Library (RL)使用手册(三)

进入VS工程,我们先看看这些功能函数及其依赖库的分布关系:rl命名空间下,主要有八大模块。搞定VS后将逐个拆解。

qq_34839823的博客 1736

【笔记】JDBC的使用

0.jdbc的入门使用 1.查询数据库 new Driver()是导包mysql驱动里面的。import com.mysql.jdbc.Driver; 不需要释放资源 Exception in thread "main" java.sql.SQLException: Before start of result set 取数据传入的参数写错了 String url = "jdbc:mysql://localhost:3306/jdbc_demo"; String url = "协议:子

weixin_TB20160103的博客 1840

手把手教你用89C52单片机驱动0.96寸OLED(IIC接口,附完整代码)

本文详细介绍了如何使用89C52单片机通过I2C接口驱动0.96寸OLED显示屏,包括硬件连接、I2C通信原理、SSD1306驱动芯片的初始化及显存管理技巧,并提供了完整的代码示例和常见问题排查方法,帮助电子爱好者快速掌握OLED显示技术。

weixin_30781433的博客 369

MyBatis学习笔记(三)

原生Dao方法及其实现类:public interface Dao { //根据id查信息 public User findUserById(int id) throws Exception; //添加信息 public void insertUser(User user)throws Exception; //删除信息 public void delet

Jessieの家 503

动手学Moveit2|使用配置助手创建自己机械臂的功能包

今天没时间了,先生成功能包,下一步还需要装一些依赖才能运行,明天再补充下面的内容。

生活不止眼前的苟且 1万+

ENVI与Sarscape协同处理哨兵一号数据的完整流程解析

本文详细解析了利用ENVI与Sarscape软件协同处理哨兵一号(Sentinel-1)SAR数据的完整工作流程。从环境搭建、数据导入与裁剪,到核心的DEM辅助多时相配准、斑点噪声滤波,再到最终的地理编码与辐射定标,提供了标准化的操作指南与实用技巧,帮助用户高效地将原始雷达数据转化为可用于分析的地理编码产品。

weixin_29251131的博客 339

mybatis的总结1

Mybatis笔记 学习过的持久层框架:DBUtils , Hibernate Mybatis就是类似于hibernate的orm持久层框架。 为什么学Mybatis? 目前最主流的持久层框架为hibernate与mybatis,而且国内目前情况使用Mybatis的公司比hibernate要多。 Hibernate学习门槛不低,要精通门槛更高。门槛高在怎么设计O/R映射,在性能和对象模型之间如何...

赵宪福的博客 286

WPS文档编辑时空行问题解决方案

本文详细介绍了如何解决WPS文档编辑时空行的问题,从问题描述与分析、解决方案详解到操作示例与注意事项等多个方面进行了全面阐述。通过本文的介绍和指导,用户可以快速定位问题根源并采取有效措施进行解决,从而提升文档编辑效率和美观性。未来,随着WPS软件的不断升级和优化,相信会有更多便捷高效的功能被添加到软件中。同时,用户也需要不断学习和探索新的操作技巧和方法,以适应不断变化的办公需求。希望本文能够为广大WPS用户提供有益的参考和帮助,共同推动办公效率的提升和发展。

mmoo_python的博客 1244

MyBatis知识整理----(第三部分)

延迟加载(Lazy Loading)是指在真正需要使用关联数据时才发起查询,而非在查询主对象时立即加载所有关联数据,以此提升性能。生命周期与应用同步,数据会序列化保存到硬盘或其它共享存储中。当查询涉及多张表,查询结果的字段名与 POJO 属性名无法直接对应时,需要使用。中,连续执行两次相同的查询,第二次会直接从一级缓存中获取数据。方法时,只会执行查询用户信息的 SQL。,如果都没有命中,最后才去查询数据库。:当发起查询时,MyBatis 会。后,查询结果才会被存入二级缓存。时,MyBatis 才会执行。

StackNoOverflow的博客 774

混合编程实战:C#集成C++ PCL点云处理库,打造跨语言动态链接库

本文详细介绍了C#与C++混合编程实战,重点讲解如何通过动态链接库(DLL)集成C++ PCL点云处理库,实现跨语言协作。内容涵盖环境配置、PCL功能封装、C#调用DLL的完整方案,以及性能优化和错误处理等进阶技巧,帮助开发者高效处理大规模点云数据,提升工业软件开发效率。

weixin_42620913的博客 381

Allegro如何去掉PCB内层未使用的过孔孔环?

在用Allegro进行PCB设计过程中,遇到铺铜铜箔被焊盘大量割断,导致铺铜不完整,这样就会导致铺铜过电流太小,影响板的性能,严重的会导致板工作不稳定,甚至不工作。解决办法:是去掉内层未使用的过孔孔环,增大过铜箔面积。

bhxc809751502的博客 2571

MyBatis学习(一)

概述 MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。 使用 资源 下载地址:https://github.com/mybatis/mybatis-3 中文学习文档:http://www.mybatis.org/m...

SICAUliuy的博客 354

华为OD技术面真题 - Python开发 - 2

汇总华为OD技术面八股Python八股,高频技术真题并提供详细解答。

qq_45776114的博客 910

Mybatis3的基础知识

MyBatis最初是Apache的一个开源项目iBatis,。iBatis3.x正式更名为MyBatis。iBatis一词来源于“internet”和“abatis”的组合,是一个基于Java的持久层框架。二、mybatis的基本使用 1.创建maven工程 2.创建mybatis的核心配置文件 3.创建mapper接口 3.创建xml的映射文件 4.sqlsession的工具类 4.测试类 二、mybatis使用的注意事项...

qq_45134058的博客 348

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

mybatis基础知识2——mybatis入门程序3[插入]

插入1.config配置文件包①.mybatis总的配置文件②.用来存放sql语句的配置文件2.src包①.实体类②.测试类 1.config配置文件包 ①.mybatis总的配置文件 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config...

是草莓味的啊 137

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Mybatis:基础知识3-sqlMapConfig.xml

sqlMapConfig.xml SqlMapConfig.xml中配置的内容和顺序如下: properties(属性) settings(全局配置参数) typeAliases(类型别名) typeHandlers(类型处理器) objectFactory(对象工厂) plugins(插件) environments(环境集合属性对象) environment(环境子属性对象...

琦彦 9329

你不得不知道的MyBatis基础知识 MyBatis的CURD之多表(3)

目录商品类和商品类别类的封装ProductsMapper.javaProductsMapper.xmlApp.java 测试测试结果   这里我们以之前山科超市项目中的商品类和商品类别类为例进行MyBatis的多表操作。 商品类和商品类别类的封装 package com.lazy.domain; public class Products { private int pid; private String pcode; private String pname; priva

汤姆lazy的优快云博客 457

Mybatis基础知识--入门程序篇3

环境等相关的参考第一篇 http://blog.youkuaiyun.com/gao36951/article/details/50423750修改会员在映射文件中配置修改sql语句 程序编写 执行程序前数据如下 执行后数据如下 查询单个会员信息在映射文件中配置查询单个会员sql语句 程序编写 查询结果如下 模糊查询多个会员信息在映射文件中配置模糊查询返回多个会员sql语句

Ibex-Relieved的专栏 768

MyBatis 3学习

Mybatis 3 学习,github地址:https://mybatis.github.io/mybatis-3/zh/getting-started.html

gol_phing的博客 366

mybatis实战教程(mybatis in action),mybatis入门到精通

http://www.yihaomen.com/article/java/302.htm 写在这个系列前面的话: 以前曾经用过ibatis,这是mybatis的前身,当时在做项目时,感觉很不错,比hibernate灵活。性能也比hibernate好。而且也比较轻量级,因为当时在项目中,没来的及做很很多笔记。后来项目结束了,我也没写总结文档。已经过去好久了。但最近突然又对这个

saydo 592

学习mybatis3的第9天(ssm收官)

学习mybatis3的第9天 学习这里的时候,是我们已经学好了Spring知识了。 然后回来再补充学习 Spring整合Mybatis的知识点

有上进心的阿龙 220

从Javaweb原生jdbc到快速掌握新版MyBatis3.X

简介:原生jdbc访问数据库缺点和ORM框架介绍原生jdbc缺点每次要加载驱动,连接信息是硬编码sql和java代码耦合一起,改动不易参数设置缺少灵活性处理结果集麻烦,不能自动映射到实体类连接资源不能复用,资源浪费什么是ORM框架对数据库的表和POJO(Plain Ordinary Java Object)Java对象的做映射的框架市面上的ORM框架比较笨重,sql调优麻烦推荐指数:不推荐Java Persistence API, 轻量级,部分中小项目适合推荐指数:次之。

m0_59519985的博客 702

Mybatis 关联查询

MyBatis魔法堂:即学即用篇一、前言                                          本篇内容以理解MyBatis的基本用法和快速在项目中实践为目的,遵循Make it work,better and excellent原则。 技术栈为MyBatis3.2.7+log4j1.2.17+sqlite3+jdk1.7。 二、示例                  ...

shadow_zed的博客 223

学习MyBatis3这一篇就够了

目录第一章 MyBatis3概述1.1、概述1.2、特点1.3、对比1.4、官网1.5、下载第二章 MyBatis3的增删改查2.1、环境准备2.2、创建工程2.3、导入依赖2.4、创建数据库2.5、编写CRUD第三章 MyBatis3的全局配置3.1、properties3.2、settings3.3、typeAliases3.4、typeHandlers3.5、objectFactory3.6、plugins3.7、environments3.8、databaseIdProvider3.9、mapper

轻松的小希 9562

【Mybatis】Mybatis基础知识全总结

=0"></if>=0"></if>=null"></if>

2502_90730181的博客 984
上一篇: Mybatis基础知识(2)
下一篇: SpringMVC基础知识(2)
l4j
l4j
博客等级 码龄11年 28粉丝 50原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值