Mybaits生命域、结果集映射、缓存

Java 领域 MyBatis 映射结果集的排序处理 MyBatis 基础排序机制静态与动态排序实现复杂对象映射中的排序处理性能优化与最佳实践实际应用案例分析首先介绍 MyBatis 的基本排序机制然后探讨静态和动态排序的实现接着分析复杂场景下的排序处理最后讨论性能优化和高级应用ResultMap: MyBatis 中定义如何从数据库结果集映射到 Java 对象的配置元素动态 SQL: 根据运行时条件动态生成 SQL 语句的 MyBatis 特性: 处理特定 Java 类型与数据库类型之间转换的组件云原生适配。 阅读详情

一、生命域和作用周期

理解我们目前已经讨论过的不同作用域和生命周期类是至关重要的,因为错误的使用会导致非常严重的并发问题。

我们可以先画一个流程图,分析一下Mybatis的执行过程!
MyBatis执行过程
作用域理解

  • SqlSessionFactoryBuilder 的作用在于创建 SqlSessionFactory,创建成功后,SqlSessionFactoryBuilder 就失去了作用,所以它只能存在于创建 SqlSessionFactory 的方法中,而不要让其长期存在。因此 SqlSessionFactoryBuilder 实例的最佳作用域是方法作用域(也就是局部方法变量)。

  • SqlSessionFactory 可以被认为是一个数据库连接池,它的作用是创建 SqlSession 接口对象。因为 MyBatis 的本质就是 Java 对数据库的操作,所以 SqlSessionFactory 的生命周期存在于整个 MyBatis 的应用之中,所以一旦创建了 SqlSessionFactory,就要长期保存它,直至不再使用 MyBatis 应用,所以可以认为 SqlSessionFactory 的生命周期就等同于 MyBatis 的应用周期。

  • 由于 SqlSessionFactory 是一个对数据库的连接池,所以它占据着数据库的连接资源。如果创建多个 SqlSessionFactory,那么就存在多个数据库连接池,这样不利于对数据库资源的控制,也会导致数据库连接资源被消耗光,出现系统宕机等情况,所以尽量避免发生这样的情况。

  • 因此在一般的应用中我们往往希望 SqlSessionFactory 作为一个单例,让它在应用中被共享。所以说 SqlSessionFactory 的最佳作用域是应用作用域。

  • 如果说 SqlSessionFactory 相当于数据库连接池,那么 SqlSession 就相当于一个数据库连接(Connection 对象),你可以在一个事务里面执行多条 SQL,然后通过它的 commit、rollback 等方法,提交或者回滚事务。所以它应该存活在一个业务请求中,处理完整个请求后,应该关闭这条连接,让它归还给 SqlSessionFactory,否则数据库资源就很快被耗费精光,系统就会瘫痪,所以用 try…catch…finally… 语句来保证其正确关闭。

  • 所以 SqlSession 的最佳的作用域是请求或方法作用域。
    在这里插入图片描述

二、结果集映射(ResultMap)

  • 假设有两个表,一个Teacher表,一个Student表,一个老师会教多个学生,所以老师跟学生的关系是一对多,学生跟老师的关系是多对一
    表结构

1、一对一或多对一

实体类

@Data //GET,SET,ToString,有参,无参构造
// 老师实体类
public class Teacher {
   private int id;
   private String name;
}
@Data
// 学生实体类
public class Student {
   private int id;
   private String name;
   //多个学生可以是同一个老师,即多对一
   private Teacher teacher;
}

Mapper接口对应的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="com.kuang.mapper.StudentMapper">

   <!--
   需求:获取所有学生及对应老师的信息
   思路:
       1. 获取所有学生的信息
       2. 根据获取的学生信息的老师ID->获取该老师的信息
       3. 思考问题,这样学生的结果集中应该包含老师,该如何处理呢,数据库中我们一般使用关联查询?
           1. 做一个结果集映射:StudentTeacher
           2. StudentTeacher结果集的类型为 Student
           3. 学生中老师的属性为teacher,对应数据库中为tid。
              多个 [1,...)学生关联一个老师=> 一对一,一对多
           4. 查看官网找到:association – 一个复杂类型的关联;使用它来处理关联查询
   -->
   <select id="getStudents" resultMap="StudentTeacher">
    	select * from student
   </select>
   <resultMap id="StudentTeacher" type="Student">
   <!--association对应的是Student类中的teacher对象,property对应的是成员变量名,tid是作为getTeacher查询的条件,javaType代表类型为Teacher-->
       <association property="teacher"  column="tid" javaType="Teacher" select="getTeacher"/>
   </resultMap>
   <!--
   这里传递过来的id,只有一个属性的时候,下面可以写任何值
   association中column多参数配置:
       column="{key=value,key=value}"
       其实就是键值对的形式,key是传给下个sql的取值名称,value是片段一中sql查询的字段名。
   -->
   <select id="getTeacher" resultType="teacher">
      select * from teacher where id = #{id}
   </select>

</mapper>

注意点说明

<resultMap id="StudentTeacher" type="Student">
   <!--association关联属性 property属性名 javaType属性类型 column在多的一方的表中的列名-->
   <association property="teacher"  column="{id=tid,name=tid}" javaType="Teacher" select="getTeacher"/>
</resultMap>
<!--
这里传递过来的id,只有一个属性的时候,下面可以写任何值
association中column多参数配置:
   column="{key=value,key=value}"
   其实就是键值对的形式,key是传给下个sql的取值名称,value是片段一中sql查询的字段名。
-->
<select id="getTeacher" resultType="teacher">
  select * from teacher where id = #{id} and name = #{name}
</select>

这种查询方式等价于嵌套查询

select s.*, (select t.name from teacher t where t.id = s.tid) as tname from student s;

当然,也可以通过表连接的方式查询

<!--
思路:
   1. 直接查询出结果,进行结果集的映射
-->
<select id="getStudents2" resultMap="StudentTeacher2" >
  select s.id sid, s.name sname , t.name tname
  from student s,teacher t
  where s.tid = t.id
</select>

<resultMap id="StudentTeacher2" type="Student">
	<!--property对应的是实体类中的成员变量,column对应的是查询结果的列名或别名-->
	<!--id代表主键-->
   <id property="id" column="sid"/>
   <!--result即普通成员属性-->
   <result property="name" column="sname"/>
   <!--association对应的是Student类中的teacher对象-->
   <association property="teacher" javaType="Teacher">
       <result property="name" column="tname"/>
   </association>
</resultMap>

2、一对多

实体类

@Data
public class Student {
   private int id;
   private String name;
   private int tid;
}
@Data
public class Teacher {
   private int id;
   private String name;
   //一个老师多个学生
   private List<Student> students;
}

Mapper接口对应的Mapper.xml配置文件

<select id="getTeacher2" resultMap="TeacherStudent2">
select * from teacher where id = #{id}
</select>
<resultMap id="TeacherStudent2" type="Teacher">
   <!--collection对应的是Teacher对象中的students成员变量,类型为List<Student>-->
   <collection property="students" javaType="ArrayList" ofType="Student" column="id" select="getStudentByTeacherId"/>
</resultMap>
<select id="getStudentByTeacherId" resultType="Student">
  select * from student where tid = #{id}
</select>
<mapper namespace="com.kuang.mapper.TeacherMapper">

   <!--
   思路:
       1. 从学生表和老师表中查出学生id,学生姓名,老师姓名
       2. 对查询出来的操作做结果集映射
           1. 集合的话,使用collection!
               JavaType和ofType都是用来指定对象类型的
               JavaType是用来指定pojo中属性的类型
               ofType指定的是映射到list集合属性中pojo的类型。
   -->
   <select id="getTeacher" resultMap="TeacherStudent">
      select s.id sid, s.name sname , t.name tname, t.id tid
      from student s,teacher t
      where s.tid = t.id and t.id=#{id}
   </select>

   <resultMap id="TeacherStudent" type="Teacher">
       <result  property="name" column="tname"/>
       <!--collection对应的是Teacher对象中的students成员变量,类型为List<Student>-->
       <collection property="students" ofType="Student">
           <result property="id" column="sid" />
           <result property="name" column="sname" />
           <result property="tid" column="tid" />
       </collection>
   </resultMap>
</mapper>

三、Mybatis缓存

简介

1、什么是缓存 [ Cache ]?

  • 存在内存中的临时数据。

  • 将用户经常查询的数据放在缓存(内存)中,用户去查询数据就不用从磁盘上(关系型数据库数据文件)查询,从缓存中查询,从而提高查询效率,解决了高并发系统的性能问题。

2、为什么使用缓存?

  • 减少和数据库的交互次数,减少系统开销,提高系统效率。

3、什么样的数据能使用缓存?

  • 经常查询并且不经常改变的数据。

Mybaits缓存

  • MyBatis包含一个非常强大的查询缓存特性,它可以非常方便地定制和配置缓存。缓存可以极大的提升查询效率。

  • MyBatis系统中默认定义了两级缓存:一级缓存和二级缓存

    • 默认情况下,只有一级缓存开启。(SqlSession级别的缓存,也称为本地缓存)

    • 二级缓存需要手动开启和配置,他是基于namespace级别的缓存。

  • 为了提高扩展性,MyBatis定义了缓存接口Cache。我们可以通过实现Cache接口来自定义二级缓存

一级缓存

一级缓存也叫本地缓存:

  • 与数据库同一次会话期间查询到的数据会放在本地缓存中
    • 一个SqlSession对应一个一级缓存
    • 相同的查询条件,会直接从缓存中获取数据,不会查询数据库
    • SqlSession关闭或提交后,一级缓存会被清除
    • 一级缓存失效的情况
      • SqlSession不同
      • SqlSeesion相同,查询sql不同
      • SqlSeesion相同,两次查询之间执行了增删改操作
      • SqlSeesion相同,手动清除了缓存

二级缓存

  • 二级缓存也叫全局缓存,一级缓存作用域太低了,所以诞生了二级缓存

  • 基于namespace级别的缓存,一个名称空间,对应一个二级缓存;

  • 工作机制

    • 一个会话查询一条数据,这个数据就会被放在当前会话的一级缓存中;

    • 如果当前会话关闭或提交了,这个会话对应的一级缓存就没了;如果开启了二级缓存,一级缓存中的数据会被保存到二级缓存中;

    • 同样的,同一个命名空间下

    • 一个命名空间(mapper类)对应一个二级缓存

在这里插入图片描述

一级缓存测试

 @Test
    public void test11() {
        // 声明一个SqlSession
        SqlSession sqlSession = MybatisUtil.getSqlSession();

        // 同一个sqlSession下,声明三个mapper
        UserMapper userMapper1 = sqlSession.getMapper(UserMapper.class);
        UserMapper userMapper2 = sqlSession.getMapper(UserMapper.class);
        TeacherMapper teacherMapper = sqlSession.getMapper(TeacherMapper.class);

        // sqlSession中的userMapper1查询
        List<User> users1 = userMapper1.selectUserList();

        // sqlSession2中的userMapper2查询
        List<User> users2 = userMapper2.selectUserList();
        // 结果为true,命中此sqlSession的一级缓存
        System.out.println(users1 == users2);

        // 新增一个teacher
        Teacher teacher = new Teacher();
        teacher.setId(3);
        teacher.setName("hahaha");
        teacherMapper.addTeacher(teacher);

        // sqlSession2中的userMapper2查询
        List<User> users3 = userMapper2.selectUserList();
        // 结果为false,说明此sqlSession的任何增删改操作都会影响此sqlSession的一级缓存
        System.out.println(users1 == users3);
    }

二级缓存测试

		// 声明两个SqlSession
        SqlSession sqlSession1 = MybatisUtil.getSqlSession();
        SqlSession sqlSession2 = MybatisUtil.getSqlSession();

        // 声明三个mapper
        UserMapper userMapper1 = sqlSession1.getMapper(UserMapper.class);
        UserMapper userMapper2 = sqlSession2.getMapper(UserMapper.class);
        TeacherMapper teacherMapper2 = sqlSession2.getMapper(TeacherMapper.class);

        // sqlSession1中的userMapper1查询
        List<User> users1 = userMapper1.selectUserList();
        // 查询后提交,一级缓存清除,保存到UserMapper的二级缓存中
        sqlSession1.commit();

        // sqlSession2中的userMapper2查询
        List<User> users20 = userMapper2.selectUserList();
        // 结果为true,命中UserMapper的二级缓存
        System.out.println(users1 == users20);

        // 通过sqlsession2中的teacherMapper2新增一个user
        User user = new User();
        user.setId(8);
        user.setUsername("hahahaha");
        user.setPassword("123456");
        teacherMapper2.addUser(user);
        sqlSession2.commit();

        // sqlSession2中的userMapper2查询
        List<User> users21 = userMapper2.selectUserList();
        // 结果为true,说明其他命名空间的增删改操作不会影响当前命名空间的缓存,是个需要注意的地方
        System.out.println(users1 == users21);

总结

  • 对于一级缓存,同一个SqlSeesion中,任何增删改操作都会影响此SqlSession的缓存
  • 对于二级缓存,只有同一个命名空间的增删改操作才会影响此命名空间的缓存
  • 当然,MyBatis定义了缓存接口Cache,我们可以通过实现Cache接口来自定义二级缓存
【TRAE调教指南之MCP篇】Context 7 MCP:让AI永远拥有最新技术文档 阅读详情

相关推荐

Habitat安装全网最详细教程,手把手带你跑通example.py(全网唯一)

全网最详细具身智能仿真平台habitat的安装教程

shannanshouyin的博客 2756

介绍一下MyBatis缓存?

MyBatis的缓存机制是其性能优化的关键,主要包括一级缓存和二级缓存。一级缓存是SqlSession级别的,默认开启,用于在同一个SqlSession中缓存查询结果,减少数据库访问。二级缓存是Mapper级别的,需要手动开启,允许多个SqlSession共享缓存,适用于读多写少的场景。MyBatis的缓存结构基于装饰器模式,支持自定义缓存实现。合理使用缓存可以显著提升性能,但需注意缓存一致性和脏读问题。对于实时性要求高的系统,建议谨慎使用二级缓存。

weixin_46072507的博客 1175

OpenClaw + Ollama 本地大模型部署教程:彻底告别Token焦虑

OpenClaw + Ollama 本地大模型部署教程:彻底告别Token焦虑

leaning_java的博客 1228

MyBatis 查询结果的缓存

MyBatis的缓存指的是缓存查询结果,当以后使用相同的sql语句、传入相同的参数进行查询时,可直接从mybatis本地缓存中获取查询结果,而不必查询数据库。 mybatis的缓存包括一级缓存、二级缓存,一级缓存默认是开启的,二级缓存默认是关闭的。 一级缓存: SqlSession级别,在SqlSession中有一个Map,key是由sql语句、参数等信息组成的唯一值,value是查...

chenhongyong 694

Win11/Win10系统下,Proe5.0 M280终极版保姆级安装与激活指南(含SSQ补丁避坑)

本文提供Win11/Win10系统下Pro/E 5.0 M280终极版的详细安装与激活指南,涵盖环境配置、SSQ补丁应用及常见问题解决方案。通过系统调整、分步安装和性能优化,确保软件在现代操作系统上的稳定运行,特别适合机械设计用户参考。

weixin_30895059的博客 442

让 ABAP 开发更聪明的搭档:SAP Joule for Developers 与 ABAP AI Capabilities 全面实战

摘要:SAP已将生成式AI集成到ABAP开发工具中,推出Joule for Developers功能。该功能直接嵌入Eclipse开发环境,提供代码解释、生成、测试构造和遗留代码迁移等辅助功能。Joule支持ABAP Cloud项目开发,能围绕当前开发对象提供上下文相关的建议,帮助开发者高效完成应用开发与迁移任务。启用该功能需升级ADT并获取相应许可,典型应用场景包括RAP应用构建和S/4HANA迁移中的代码重构。官方资源提供了多个实践案例,帮助开发者快速上手这一AI辅助开发功能。(149字)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 492

MyBatis 延迟加载,一级缓存,二级缓存设置

什么是延迟加载 resultMap中的association和collection标签具有延迟加载的功能。 延迟加载的意思是说,在关联查询时,利用延迟加载,先加载主信息。使用关联信息时再去加载关联信息。 设置延迟加载 需要在SqlMapConfig.xml文件中,在<settings>标签中设置下延迟加载。 lazyLoadingEnabled、aggressiveLazy

qq_35326052的博客 699

uniapp - 实现免费OCR文字识别方案,用户上传图片后进行扫描识别获取图片上的文字,uniApp纯前端做图片OCR识别——无需服务器进行OCR识别插件(不需要依赖任何SDK或第三方API服务)

uniapp实现orc识别免费的插件识别不花钱,无需第三方OCR文字识别API,uniApp拍照或者选择图片免费识别,纯前端不需要服务器,Uniapp提取图片上的文字,本地ocr识别技术,uni-app图片OCR识别文本,uniapp有没有免费的ocr识别组件,uniapp前端实现文字识别,身份证识别,营业执照识别 (兼容APP、H5、小程序 不需要任何SDK)跨端无SDK方案:Uniapp实现OCR文字,离线OCR识别,uniapp tesseract.js实现文字识别,uniapp文字识别无需依赖sdk

🏆 前端领域优质创作者 4250

Mybatis缓存详解

一级缓存 基础 默认情况下,mybatis会启用一级缓存。如果使用同一个SqlSession对象调用了相同的SELECT语 句,则直接会从缓存中返回结果,而不是再查询一次数据库。 注意:SqlSession对象调用commit或close方法后,这个SqlSession中的一级缓存就会被清空; 2.测试 测试代码: @Test public void selectTest() { SqlSession session = SqlSessionUtil.openSession(true); Te

weixin_44138291的博客 310

【异常】安装hermes-agent时提示GnuTLS recv error (-110): The TLS connection was non-properly terminated.

Git克隆仓库时出现TLS连接异常报错的解决方案摘要: 当执行git clone命令时遇到"GnuTLS recv error (-110)"报错,通常由网络不稳定、缓冲区不足或证书验证问题导致。主要解决方案包括:1)增大Git HTTP缓冲区(git config --global http.postBuffer 524288000);2)使用GitHub镜像站加速克隆;3)临时禁用SSL验证进行测试;4)检查并调整代理配置;5)改用SSH协议克隆。建议优先尝试增大缓冲区和镜像站方案,

奶爸的编程之路,也就一周冷个三天 1350

【SpringBoot 3.x 第56节】再见 Feign?原生 HTTP 接口强势上位,这才是微服务调用的正确姿势!

🏆本文收录于《滚雪球学SpringBoot 3》,专门攻坚指数提升,本年度国内最系统+最专业+最详细(永久更新)。    本专栏致力打造最硬核 SpringBoot3 从零基础到进阶系列学习内容,🚀均为全网独家首发,打造精品专栏,专栏持续更新中…欢迎大家订阅持续学习。 如果想快速定位学习,可以看这篇【SpringBoot3教程导航帖】,你想学习的都被收集在内,快速投入学习!!两不误。    若还想学习更多,可直接前往《滚雪球学SpringBoot(全版本合集)》,涵盖SpringBoot所有版本教学文章

**My Coding Family** 1017

[Mybatis] resultType、resultMap结果映射集详解、缓存和延迟加载

MyBatis的每一个查询映射的返回类型都是ResultMap,只是当我们提供的返回类型属性是resultType的时候,MyBatis对自动的给我们把对应的值赋给resultType所指定对象的属性,而当我们提供的返回类型是resultMap的时候,将数据库中列数据复制到对象的相应属性上,可以用于复制查询,一般两者不能同时用。 一、resultType resultType直接写pojo中的JavaBean的全限定类名,或者指定映射后使用别名,如下注册别名。 <typeAliases>

时光、疏离了记忆づ童话的博客 2750

【蒸汽幻想台服新版商业端】2025最新整理单机一键即玩镜像端+WIN系半手工端+PC客户端+网页注册+网页管理后台+教程【站长亲测】

MMORPG端游【蒸汽幻想台服新版商业端】2025最新整理单机一键即玩镜像端+WIN系半手工端+PC客户端+网页注册+网页管理后台+教程。

百创科技 531

MyBaits 二级缓存原理

默认关闭,一般不建议使用。为什么不建议使用我们要清楚。MyBatis的二级缓存是和命名空间绑定的,所以通常情况下每一个Mapper映射文件都拥有自己的二级缓存,不同Mapper的二级缓存互不影响。在常见的数据库操作中,多表联合查询非常常见,由于关系型数据库的设计, 使得很多时候需要关联多个表才能获得想要的数据。在关联多表查询时肯定会将该查询放到某个命名空间下的映射文件中,这样一个多表的查询就会缓存在该命名空间的二级缓存中。

程序猿进阶 1960

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

04ssm_Mybaits关联映射和缓存机制

04ssm_Mybaits关联映射和缓存机制 文章目录04ssm_Mybaits关联映射和缓存机制一、关联映射概述1.数据表的三种关联映射关系2.Java描述数据表的关联映射关系3.本单元实验环境二、一对一查询(重点掌握)1.需求描述2.任务分析3.知识准备:实现一对一映射关系的两种方式(1)元素(2)嵌套查询方式(3)嵌套结果方式(重点掌握)4.实验步骤第一步,创建POJO类(注意:在com.cshbxy.pojo包内创建)第二步,创建接口PersonMapper(注意:在com.cshbxy.mappe

青衣小屋 445

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

MyBatis 鉴别器、自动映射、缓存、参照缓存

鉴别器 <discriminator javaType="int" column="draft"> <case value="1" resultType="DraftPost"/> </discriminator> 有时一个单独的数据库查询也许返回很多不同 (但是希望有些关联) 数据类型的结果集。 鉴别器元素就是被设计来处理这个情况的, 还有包括类的继...

Hern(宋兆恒) 754

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Mybaits_ehcache实现缓存

文章目录Mybaits_ehcache实现缓存导包在映射文件中引入测试一下 Mybaits_ehcache实现缓存 ​ 从数据库查询出来的结果,保存到内存中,以kv键值对的方式。查询时,根据key,查找缓存中是否存在,如果没有去上级缓存,直到到数据库中查询,查询的结果也会保存到各级缓存中。 一级缓存:事务级别,保存本次事务内的查询结果,事务结束,一级缓存清空。 二级缓存:进程级别,保存进程内的查...

qq_32640013的博客 210

Mybaits mapper 和 XML映射详解

MyBatis 的真正强大在于它的映射语句,也是它的魔力所在。由于它的异常强大,映射器的 XML 文件就显得相对简单。如果拿它跟具有相同功能的 JDBC 代码进行对比,你会立即发现省掉了将近 95% 的代码。MyBatis 就是针对 SQL 构建的,并且比普通的方法做的更好。 SQL 映射文件有很少的几个顶级元素(按照它们应该被定义的顺序): cache – 给定命名空间的缓存配置。c

qq_36235922的博客 1943

mybatis中结果集是如何映射resultType的?

mybatis中结果集映射resultType指定的类型的原理

qq_44861126的博客 595

Mybaits-缓存设置

一级缓存: Mybatis 的一级缓存存在于 SqlSession 的声明周期中, 在同一个 SqlSession 中查询时, Mybatis 会把执行的方法和参数通过算法生成缓存的键值, 将键值和查询结果存入一个 Map 对象中. 如果同一个 SqlSession 中执行的方法和参数完全一致, 那么通过算法会生成相同的键值, 当 Map 缓存对象中已经存在该键值时, 则会返回缓存中的对象. ...

javadaysdaysup的博客 222

Mybaits的映射器配置详解

Mybaits的映射器配置基本元素: cache:设置缓存配置 cache-ref:从其他的命名空间引用缓存配置 resultMap:描述了如何从结果中加载对象 sql:可以定义sql语句的部分内容以便重用 insert:映射insert语句 update:映射update语句 delete:映射delete语句 select:映射select语句 使用详解 (1)Mapper

cjt20100的专栏 532

Mybaits一级缓存和二级缓存分别是什么,区别是什么

Mybaits一级缓存和二级缓存分别是什么,区别是什么

qq_45582730的博客 2180

Mybatis的动态SQL和结果映射

•。

FAQEW的博客 1284

MyBaits的缓存问题

MyBaits的缓存问题

m0_71166223的博客 366

Mybaits-动态SQL,自定义类型结果集ResultSet,Map传入多参数,SQL语句缓存机制

一、动态SQL Dynamic-SQL 动态SQL语句:条件需求不一样的时候,对应sql语句执行结果也不一样。 根据逻辑判断条件,选择执行不同的SQL语句,实现动态SQL语句 举例说明:在Web应用程序中,有可能有一些搜索界面,需要输入一个或多个选项,然后根据这些已选择的条件去执行检索操作。 xml配置文件中使用动态SQL语句:MyBatis通过使用,,,,元素提供了对构造动态SQL语...

yz_blanks的博客 817

Mybaits一级缓存和二级缓存分别是什么,区别是什么?

实现缓存接口,引入第三方缓存引入【Redis等第三方内存库作为mybatis的缓存】。

qq_52025132的博客 2566
上一篇: SpringMVC执行原理
下一篇: SSM框架整合配置文件
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值