Mybatis源码
文章平均质量分 86
深入理解Mybatis
苍鹰蛟龙
这个作者很懒,什么都没留下…
展开
-
5.13 mybatis之plugins使用
MyBatis插件的核心功能在于拦截和修改MyBatis框架在执行过程中的行为。通过拦截这些方法调用,MyBatis插件可以实现诸如SQL重写、日志记录、性能监控、事务管理增强等多种功能。mybatis的插件如何使用,我们通过插件实现统计SQL的耗时功能。实现耗时拦截器后还需要在mybatis配置文件中配置拦截器。只需执行完上述2步后,就可以正确打印出SQL的耗时了。首先实现Mybatis的Interceptor接口。原创 2024-05-08 23:12:33 · 400 阅读 · 0 评论 -
5.12 mybatis之typeAliases别名详解
在mapper中为SQL定义POJO返回类型时,要指定POJO的全限定名,如果SQL众多,要为每个SQL书写返回类型的全限定名,比较繁琐,此时可以用typeAliases为返回类型命名一个简单的别名就可以。指定了别名以后就不再区分大小写。typeAliases指定别名,可总结如下几种方式。原创 2024-05-07 00:03:17 · 370 阅读 · 0 评论 -
5.11 mybatis之returnInstanceForEmptyRow作用
mybatis的settings配置中有个属性returnInstanceForEmptyRow,该属性新增于mybatis的3.4.2版本,低于此版本不可用。该属性的作用官方解释为:当返回行的所有列都是空时,MyBatis默认返回 null。当开启这个设置时,MyBatis会返回一个空实例。请注意,它也适用于嵌套的结果集(如集合或关联)。该属性默认配置为false。如何理解上面这句话?原创 2024-04-18 00:10:39 · 1093 阅读 · 0 评论 -
5.10 mybatis之useActualParamName作用
useActualParamName官方解释:允许使用方法签名中的名称作为语句参数名称。为了使用该特性,你的项目必须采用 Java 8编译,并且加上 -parameters 选项。(新增于3.4.1)。useActualParamName有2个值,true和false,如不配置默认为true。如何理解这句话呢?原创 2024-04-16 23:20:20 · 539 阅读 · 0 评论 -
5.9 mybatis之callSettersOnNulls作用
在mybatis的settings配置参数中有个callSettersOnNulls参数,官方解释为:指定当结果集中值为 null 的时候是否调用映射对象的 setter(map 对象时为 put)方法,这在依赖于 Map.keySet() 或 null 值进行初始化时比较有用。注意基本类型(int、boolean 等)是不能设置成 null 的。什么意思呢?我们先看下面一段解释,不理解没关系,等看完下面的代码示例后再回来看一定会理解。原创 2024-04-14 23:05:11 · 1930 阅读 · 0 评论 -
5.1 mybatis配置文件之properties配置
在章节中分析了mybatis解析properties的源码,通过源码可以发现properties支持3种用法。原创 2024-04-11 16:46:21 · 863 阅读 · 0 评论 -
5.2 mybatis之autoMappingBehavior作用
众所周知mybatis中标签< resultMap >是用来处理数据库库字段与java对象属性映射的。通常java对象属性(驼峰格式)与数据库表字段(下划线形式)是一 一对应的情况下,是不用定义< resultMap >标签的,是因为数据库表字段会自动映射到java对象的对应属性上的,比如数据库表一个字段为USER_NAME,java对象对应的属性为userName,默认情况下会自动映射的。数据库表字段为什么会和java对象属性自动映射的?什么情况下会自动映射?什么情况下不会自动映射?原创 2024-04-11 16:45:31 · 1457 阅读 · 0 评论 -
5.3 mybatis之autoMappingUnknownColumnBehavior作用
autoMappingUnknownColumnBehavior是< settings >配置下的属性,该属性是指定发现自动映射目标未知列(或未知属性类型)的行为。就是说当数据库中的字段找不到映射java对象的属性或者与java对象对应属性的类型不匹配时会产生什么样的行为。autoMappingUnknownColumnBehavior属性可以指定当映射失败时会产生三种行为,默认情况配置的是NONE下面分别看下三种情况。原创 2024-04-11 16:44:55 · 1241 阅读 · 0 评论 -
5.6 mybatis之RowBounds分页用法
但是底层SQL查询的时候还是从第1条开始查,然后从查询结果中过滤掉第1条数据,所以SQL性能也比较慢,因为查询查询量比较大。但是由于它是在 sql 查询出所有结果的基础上截取数据的,所以在数据量大的sql中并不适用,它更适合在返回数据结果较少的查询中使用。由于 java 允许的最大整数为 2147483647,所以 limit 能使用的最大整数也是 2147483647,一次性取出大量数据可能引起内存溢出,所以在大数据查询场合慎重使用。对应的mapper文件如下所示。假设数据库表如下所示。原创 2024-04-09 00:00:54 · 725 阅读 · 0 评论 -
5.4 mybatis之lazyLoadingEnabled、aggressiveLazyLoading和lazyLoadTriggerMethods延迟加载配置
mybatis配置文件中*< settinds >* 配置下的lazyLoadingEnabled表示延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。 特定关联关系中可通过设置 fetchType 属性来覆盖该项的开关状态(此句话具体什么意思,我们稍后再讲)。上面是官方文档中介绍,什么意思呢,当lazyLoadingEnabled=true时,开启了全局延迟加载的开关,当SQL关联查询时,对应的关联对象会被延迟加载,只有当用的时候才会真正的加载。lazyLoadingEnabled有两个取值,原创 2024-04-09 23:02:21 · 1773 阅读 · 1 评论 -
5.7 mybatis之ResultHandler流式处理数据
Mybatis 中的 ResultHandler 相当于数据结果集的处理器,它是一个回调函数(Callback),用来处理每一行数据的结果,这个回调函数可以在查询结果处理到一定量时触发,对结果集数据进行定制化处理。ResultHandler 的使用可以大幅提升数据处理的效率,当我们需要处理大量的数据时,一般会使用 ResultHandler 来进行结果的处理,避免一次查询就全部返回结果,浪费内存资源或造成 OOM。我们要查询persion_id大于多少的数据,对应的mapper文件如下所示。原创 2024-04-10 00:18:53 · 714 阅读 · 0 评论 -
5.8 mybatis之EnumTypeHandler详细使用
在 Java 中,枚举类型是一种特殊的类,当我们在数据库和 Java 对象之间进行映射时,通常需要将数据库中的某个字段(如字符串或数字)映射到 Java 枚举类型上,或者更新插入数据库时,需要把java的枚举类型映射到数据库字段上,这就需要一种机制来在两者之间建立映射关系。EnumTypeHandler 就是这样一个机制,它能够帮助我们完成这一任务。原创 2024-04-11 00:19:41 · 891 阅读 · 0 评论 -
5.5 mybatis之useGeneratedKeys作用
官方解释 useGeneratedKeys 允许 JDBC 支持自动生成主键,需要数据库驱动支持。如果设置为 true,将强制使用自动生成主键。尽管一些数据库驱动不支持此特性,但仍可正常工作(如 Derby)。其实就是useGeneratedKeys参数控制用数据库自增的主键作为数据库插入的主键,并且在应用中可以获取自增的主键。useGeneratedKeys有2个取值:true和false。取值true时表示开启支持自动生成主键;原创 2024-04-11 16:42:56 · 1589 阅读 · 0 评论 -
4.二级缓存解析
二级缓存也称作是应用级缓存,与一级缓存不同的,是它的作用范围是整个应用,而且可以跨线程使用。所以二级缓存有更高的命中率,适合缓存一些修改较少的数据。在流程上是先访问二级缓存,在访问一级缓存。原创 2023-01-16 19:06:56 · 3971 阅读 · 1 评论 -
3. 一级缓存解析
在上一篇基础上,我们继续看下一级缓存相关内容本节内容主要分析一级缓存,首先看一下一级缓存命中的条件有哪些。原创 2022-11-27 23:51:27 · 2605 阅读 · 0 评论 -
2. Executor与SqlSession解析
基本功能:改、查,没有增删的原因是,所有的增删操作都可以归结到改;缓存维护:这里的缓存主要是为一级缓存服务,功能包括创建缓存Key、清理缓存、判断缓存是否存在;事物管理:提交、回滚、关闭、批处理刷新。下面看下执行器的上下继承关系共包括3中Executor执行器,分别为SimpleExecutor、ReuseExecutor、BatchExecutor,其中BaseExecutor是封装了获取链接、维护事物、以及一级缓存相关的通用操作,三种执行器都是继承BaseExecutor而来。原创 2022-11-14 19:10:46 · 2771 阅读 · 0 评论 -
1. Springboot集成Mybatis
在深入理解mybatis源码之前,首先搭建mybatis的测试环境用于跟踪代码测试用。下面介绍两种springboot集成mybatis运行环境的案例。一种是通过springboot包装mybatis的构建过程,一种是自行构建Mybatis的执行环境。以查询user表为例,数据如下。原创 2022-11-02 23:12:02 · 2770 阅读 · 0 评论