Mybatis
文章平均质量分 95
Mybatis持久化框架的相关技术文章
每天都要进步一点点
工作日常技术学习、积累、总结
展开
-
MyBatis源码阅读(十二) --- Spring加载MyBatis过程
目录一、概述二、Spring加载MyBatis过程三、Mapper接口的获取四、总结一、概述通过前面几篇文章的学习,相信小伙伴对Mybatis的认识更加深刻了,对整体的流程应该算是比较清晰了。但是我们在项目中很少单独使用Mybatis,一般都是集成到Spring中,由Spring来帮我们完成以前很多繁琐的步骤,比如管理SqlSessionFactory、创建SqlSession,并且不需要手动调用getMapper方法去获取mapper接口,直接使用autoWired自动注入进来就好原创 2021-04-17 09:16:59 · 916 阅读 · 0 评论 -
MyBatis源码阅读(十一) --- MyBatis事务管理机制
目录一、概述二、Mybatis事务管理机制三、总结一、概述事务的概念,大家都不会陌生。在我们写增删改的时候,我们肯定都需要加上事务,来保证数据的一致性。MyBatis作为Java语言的数据库框架,对数据库的事务管理是其非常重要的一个方面。在Mybatis中,同样提供了事务的功能,所以我们有必要了解一下MyBatis的事务管理的实现机制。二、Mybatis事务管理机制Mybatis也提供了事务的机制,MyBatis将事务抽象成了Transaction接口。Transaction接口原创 2021-04-17 09:05:34 · 405 阅读 · 0 评论 -
MyBatis源码阅读(十) --- 一级缓存、二级缓存工作原理
目录一、概述二、一级缓存的使用三、一级缓存的关闭四、一级缓存的工作原理五、二级缓存的使用六、二级缓存的工作原理七、总结一、概述缓存,相信大家应该不陌生,在工作中,我们也接触过一些缓存中间件,比如Redis等。缓存的作用就是为了提供查询的效率,减少访问数据库的次数,从而提供性能。同样的,Mybatis里面也提供了缓存功能,包括一级缓存和二级缓存。本篇文章我们将总结Mybatis的一级缓存、二级缓存怎么用的以及分析它们的作用域、实现原理等。MyBatis中的缓存相关类都在原创 2021-04-15 11:33:31 · 482 阅读 · 0 评论 -
MyBatis源码阅读(九) --- 插件原理
一、概述插件功能也是Mybatis框架中的一个核心功能,Mybatis提供了自定义插件功能来帮我们扩展个性化业务需求。本篇文章我们将总结Mybatis的插件机制以及如何自定义一个插件。我们在做查询操作的时候,如果数据量很大,不可能一次性返回所有数据,一般会采用分页查询的方式,那么在Mybatis的分页是如何做的呢?其实,要实现分页,就可以使用到Mybatis的插件功能,我们可以拦截到Mybatis将要执行的SQL语句,然后动态修改其中的参数,比如加入limit限制条数等。MyBatis的插件是通过动原创 2021-04-14 21:08:54 · 363 阅读 · 0 评论 -
MyBatis源码阅读(八) --- Executor执行器
目录一、概述二、Executor执行器的创建过程三、SimpleExecutor四、ReuseExecutor五、BatchExecutor六、CachingExecutor七、总结一、概述Executor 是一个接口,包含更新,查询,事务等一系列方法。在前面分析SqlSession创建过程的时候,我们知道每个SqlSession对象都会有一个Executor对象,SqlSession的操作都会交由Executor执行器执行。我们先看看Executor类的继承图:原创 2021-04-14 20:54:10 · 692 阅读 · 0 评论 -
MyBatis源码阅读(七) --- 查询结果集封装流程
一、概述前面一篇文章我们分析了mapper方法具体的执行流程,跟踪代码到了resultSetHandler.handleResultSets()处理结果集这里,这也是Mybatis处理数据的最后一个步骤了。试想一下,如果让我们自己组装结果,我们该如何实现呢,可以大概想一下。如果是我们自己实现的话,有几个关键的步骤:1、准备一个List集合存放结果集; 2、肯定要拿到我们在Mapper.xml中配置的resultType属性,拿到之后,通过反射,我们应该可以拿到对应的Class类; 3、拿原创 2021-04-13 13:49:43 · 727 阅读 · 0 评论 -
MyBatis源码阅读(六) ---mapper方法具体执行流程分析
目录一、概述二、mapper方法具体执行流程三、mapper方法执行流程图四、总结一、概述前面我们介绍了mapper接口是如何获取的,那么接下来就是具体的调用Mapper方法执行SQL:User user = userMapper.getById(1L);话不多说,直接来看下具体的执行流程。二、mapper方法具体执行流程熟悉JDK动态代理的小伙伴应该都知道,代理类需要实现InvocationHandler接口,并重写里面的invoke方法。public cl原创 2021-04-12 17:33:13 · 1184 阅读 · 0 评论 -
MyBatis源码阅读(五) ---Mapper接口的获取过程
目录一、简介二、Mapper接口的获取过程三、Mapper接口的获取流程图四、总结一、简介前面一篇文章我们总结了SqlSession的创建过程,既然会话已经创建成功,那么下一步自然就是去获取到Mapper接口执行具体的SQL,当然也可以直接使用SqlSession执行具体的SQL。本篇文章主要分析一下Mapper接口的获取过程。二、Mapper接口的获取过程//获取Mapper接口UserMapper userMapper = sqlSession.getMapper(U原创 2021-04-11 15:18:45 · 828 阅读 · 0 评论 -
MyBatis源码阅读(四) --- SqlSession的创建过程
目录一、概述二、SqlSession的创建过程三、 SqlSession的创建过程流程图四、总结一、概述前面一篇文章我们详细分析了SqlSessionFactory的创建过程,既然SqlSessionFactory有了,那么我们就可以通过sqlSessionFactory.openSession()来开启一个会话了,进而实现对数据库的操作,那么sqlSessionFactory.openSession()到底干了哪些事情呢?本篇文章就来详细看下。SqlSession是Mybati原创 2021-04-10 20:03:15 · 1179 阅读 · 0 评论 -
MyBatis源码阅读(三) --- 配置信息的解析以及SqlSessionFactory构建过程
目录一、简介二、配置信息解析过程三、Mapper接口解析过程四、Mapper接口与MapperProxyFactory的绑定过程五、SqlSessionFactory创建流程图六、总结一、简介前面一篇文章我们对Mybatis整体的执行流程做了一个详细的总结:https://blog.csdn.net/Weixiaohuai/article/details/115529683本篇文章我们将分析一下配置信息是如何解析的以及SqlSessionFactory创建过程。二、配原创 2021-04-10 19:56:10 · 742 阅读 · 0 评论 -
MyBatis源码阅读(二) --- 执行流程分析
目录一、概述二、Mybatis核心类三、MyBatis执行流程四、执行流程图五、总结一、概述前面一篇文章我们已经搭建好了Mybatis的源码调试环境,那么今天我们先来看看MyBatis整体的执行流程是怎样的,先对整体有个了解,后面我们再针对各个细节进行分析。在分析执行流程之前,我们先对Mybatis中几个核心类做个简单的介绍。二、Mybatis核心类Mybatis核心类主要有下面几个:SqlSessionFactory每个基于 MyBatis 的应用都是以一个 Sq原创 2021-04-08 20:04:27 · 758 阅读 · 7 评论 -
MyBatis源码阅读(一) --- 源码阅读环境搭建
目录一、简介二、源码环境搭建一、简介使用Mybatis有一段时间了,但是一直没有专门去阅读MyBatis框架的源码,Mybatis是一个非常值得我们去阅读的框架,源码里面运用了很多常见的设计模式,如构建者模式、代理模式、模板方法模式等等,都值得我们去学习和借鉴。下面我们就以搭建一个源码阅读环境开始,一起来看看Mybatis的源码。MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集原创 2021-04-08 17:52:19 · 648 阅读 · 0 评论 -
Mybatis ResultMap传递参数给子Collection对应查询的ResultMap中
一、问题描述最近在做项目时,需要使用Mybatis的ResultMap高级映射查询“校区 - 楼栋 - 楼层”树结构的数据,前端提供很多过滤条件都是子查询楼层的一些字段属性,并不是所有的参数都是最外层查询的过滤条件,但是ResultMap本身不支持将参数从外层的查询一直传递到子查询。举个简单的例子,mapper接口传递了一些参数到mapper.xml中,如果不额外处理,这些参数只能在最外面...原创 2019-11-12 15:57:40 · 7621 阅读 · 5 评论 -
Mybatis foreach逗号分隔字符串遍历方式
一、前言最近在项目中,做高级搜索时,由于搜索条件过多,而且每个选项的值都很多,这些条件都需要拼接到sql语句IN查询中,所以我前端直接传递逗号分隔的多个值,直接使用Mybatis的foreach切割功能,直接查询,感觉挺方便的。二、使用方式【a】前端传递查询条件:使用逗号分隔参数值。【b】后端Mapper接口使用Map接收接收:public List<FjcwxxT...原创 2019-11-12 14:40:37 · 11680 阅读 · 2 评论 -
Mybatis复杂参数传参取参方式总结
一、简介使用Mybatis最大的特性就是sql需要自己写,而写sql难免需要传递多个参数。相信大家在使用Mybatis的时候都遇到过 "Parameter 'array' not found. Available parameters are [xsids, param1]" 类似这样的错误,本文将总结一下Mybatis复杂参数传参取参的方式。二、不使用@Param注解【a】传递Lis...原创 2019-05-27 21:44:30 · 3899 阅读 · 0 评论 -
Mybatis批量保存Clob类型时ORA-01461: can bind a LONG value only for insert into a LONG column报错解决方法
一、简介最近在项目中,遇到一个比较奇怪的问题,就是当我使用Mybatis批量保存Clob长文本的时候,报错can bind a LONG value only for insert into a LONG column,大概意思就是 "仅能绑定要插入LONG列的LONG值" ,更奇怪的是,这个错误是在部署到测试环境中才遇到,在开发环境中根本没出现这个问题,正常保存,两个环境连的都是同一个内网的...原创 2019-04-29 20:52:00 · 3917 阅读 · 1 评论 -
Mybatis工作中常用动态SQL总结
一、简介上篇文章,我们介绍了Mybatis常用的关系映射,本文将在上篇文章项目的基础上,总计一下Mybatis中动态SQL的常用用法,项目结构可以从这里https://gitee.com/weixiaohuai/springboot-mybatis.git下载。相信大家没用Mybatis之前,都碰到过各种条件判断拼接SQL、需要去掉多余的逗号等痛苦,Mybatis中的动态SQL能很好的解决上面...原创 2019-04-12 21:44:11 · 378 阅读 · 0 评论 -
Mybatis工作中常见关系映射总结
一、简介在工作中,如果持久层框架使用mybatis的话,基本上都会涉及到关联关系映射处理,本文将对Mybatis中的一对多、一对一、递归查询树结构数据等做一个比较系统的总结,加深自己对Mybatis高级映射的理解。下面我们通过几个示例详细说明用法。二、准备工作在进行创建项目之前,我们首先要准备几张表,tbl_class(班级表)、tbl_teacher(教师表)、tbl_stud...原创 2019-04-04 21:58:44 · 1386 阅读 · 0 评论 -
MyBatis-Plus updateById方法更新不了空字符串/null解决方法
一、简介因为最近在忙项目,好久都没有更新博客,最近在项目中刚好遇到一个问题,就是在使用MyBatis-Plus updateById(xxx)的时候,居然更新不了字符串或者null,本文分享两种解决方案,具体大家可以根据自己的需求选择一种方法解决。二、原理在实际项目中,难免更新的时候,有可能会把已有的值更新成空字符串或者null,但是当你使用updateById()方法的时候,会发现根...原创 2019-03-01 09:52:59 · 67891 阅读 · 21 评论