- 2025-01-08【数据库开发】Mybatis 拦截器实现单数据源内多数据库切换
物流的分拣业务在某些分拣场地只有一个数据源,因为数据量比较大,将所有数据存在一张表内查询速度慢,也为了做不同设备数据的分库管理,便在这个数据源内创建了多个不同库名但表完全相同的数据库,如下图所示:现在需要上线报表服务来查询所有数据库中的数据进行统计,那么现在的问题来了,该
- 2024-12-30由 Mybatis 源码畅谈软件设计(四):动态 SQL 执行流程
作者:京东保险王奕龙本节我们探究动态SQL的执行流程,由于在前一节我们已经对各个组件进行了详细介绍,所以本节不再赘述相关内容,在本节中主要强调静态SQL和动态SQL执行的不同之处。在这个过程中,SqlNode相关实现值得关注,它为动态SQL标签都定义了专用实现类,遵循单一职责的原
- 2024-12-29Mybatis 如何分页?
作者简介:大家好,我是码炫码哥,前中兴通讯、美团架构师,现任某互联网公司CTO,兼职码炫课堂主讲源码系列专题代表作:《jdk源码&多线程&高并发》,《深入tomcat源码解析》,《深入netty源码解析》,《深入dubbo源码解析》,《深入springboot源码解析》,《深入spring源码解析》,《深入redis源
- 2024-12-29Executor 执行器是如何工作的?
作者简介:大家好,我是码炫码哥,前中兴通讯、美团架构师,现任某互联网公司CTO,兼职码炫课堂主讲源码系列专题代表作:《jdk源码&多线程&高并发》,《深入tomcat源码解析》,《深入netty源码解析》,《深入dubbo源码解析》,《深入springboot源码解析》,《深入spring源码解析》,《深入redis源
- 2024-12-11Mybatis 拦截器实现单数据源内多数据库切换
作者:京东保险王奕龙物流的分拣业务在某些分拣场地只有一个数据源,因为数据量比较大,将所有数据存在一张表内查询速度慢,也为了做不同设备数据的分库管理,便在这个数据源内创建了多个不同库名但表完全相同的数据库,如下图所示:现在需要上线报表服务来查询所有数据库中的数据进行统计,
- 2024-08-21Spring Mybatis拦截器配合logback打印完整sql语句
在项目开发与维护过程中,常常需要对程序执行的sql语句,进行观察和分析。但是项目通常默认会使用org.apache.ibatis.logging.stdout.StdOutImpl日志配置,该配置是用System.out.println打印的日志,导致只能将执行语句打印到控制台,却没办法打印到日志文件中。如果放开logback日志等
- 2024-08-13用了MyBatis-PLUS的项目 如何优雅的打印SQL
说明在使用MyBatis-Plus作为ORM框架的时候,会发现默认的日志输出是下面这样的:在参数少并且SQL简单的情况下,这样的SQL我们能通过手动去替换占位符,来获取到真正执行的SQL。但是如果是比较复杂的SQL,或者查询参数比较多的话,一个个替换就比较费时费力了。我们可以通过实现com.baomid
- 2024-07-09Mybatis Plus 3.X版本的insert填充自增id的IdType.ID_WORKER策略源码分析
总结/朱季谦某天同事突然问我,你知道MybatisPlus的insert方法,插入数据后自增id是如何自增的吗?我愣了一下,脑海里只想到,当在POJO类的id设置一个自增策略后,例如@TableId(value="id",type=IdType.ID_WORKER)的注解策略时,就能实现在每次数据插入数据库时,实现id的自增,例如以下形式
- 2024-05-21Mybaits使用SQL拦截器实现字符串修剪
概述一般情况下,保存到数据库中的字符串类型的数据,我们一般都不希望它前后带着空格,类似于"哈哈哈"。在业务中,如果每一个保存到数据库中的SQL都去对字符串参数进行trim的操作,这是很繁琐的,且容易漏掉。解决方案使用Mybatis的拦截器,拦截每一个SQL,针对SQL中的字符串参数进行tr
- 2024-01-22在 SpringBoot 项目中使用 Mybatis 打印 SQL 日志
前言我们在项目中使用的持久层框架大部分都是mybatis,如果在日志中能打印sql的话,对于我们排查问题会更加方便。第一种方式:修改mybatis配置修改配置mybatis:configuration:log-impl:org.apache.ibatis.logging.slf4j.Slf4jImpllogging:level:com.imooc.p
- 2024-01-09Mybatis 拦截器实现单数据源内多数据库切换 | 京东物流技术团队
物流的分拣业务在某些分拣场地只有一个数据源,因为数据量比较大,将所有数据存在一张表内查询速度慢,也为了做不同设备数据的分库管理,便在这个数据源内创建了多个不同库名但表完全相同的数据库,如下图所示:现在需要上线报表服务来查询所有数据库中的数据进行统计,那么现在的问题来了,该如何
- 2023-04-19自定义Mybatis-plus插件(限制最大查询数量)
自定义Mybatis-plus插件(限制最大查询数量)需求背景 一次查询如果结果返回太多(1万或更多),往往会导致系统性能下降,有时更会内存不足,影响系统稳定性,故需要做限制。解决思路1.经分析最后决定,应限制一次查询返回的最大结果数量不应该超出1万,对于一次返回结果大于限制的时候应该
- 2023-03-08【Mybatis】【SQL执行过程】【四】Mybatis源码解析-Insert的执行过程
1 前言上节带大家简单回顾了下SqlSession以及内部的执行器的创建,那么这节我们就开始看我们的语句都是如何执行的。调试代码://xml<insertid="insertOne"paramete
- 2023-02-20若依框架---PageHelper分页(四)
我们通过下载并查看PageHelper-Spring-Boot-Starter源码,了解到PageHelper是通过实现MyBatis拦截器接口org.apache.ibatis.plugin.Interc
- 2023-02-06saas架构之druid解析表名
publicvoidpreHandle(BoundSqlboundSql,RequestEntityrequestEntity){System.out.println("要执行的SQL:"+boundSql.getSql());System.out
- 2023-01-15从 PageHelper 到 MyBatis Plugin
在很多业务场景下我们需要去拦截 SQL,达到不入侵原有代码业务处理一些东西,比如:历史记录、分页操作、数据权限过滤操作、SQL 执行时间性能监控等等,这里我们
- 2022-12-29MyBatis修改操作注入动态全局参数
有时候我们在更新字段的时候可能只更新一个状态,但是又需要记录当前的更新人和更新时间,比如:updateStatus(@Param("id")Stringid,@Param("status")Integerstatus);这
- 2022-12-09MyBatis详解(二)
前言本篇幅是继MyBatis详解(一)的下半部分。 MyBatis执行Sql的流程分析【1】基于前面已经将XML文件进行build解析了并且返回了SqlSessionFactory【1.1】那么分析S
- 2022-12-03使用Mybatis拦截器实现分页功能
最近在做项目的时候,想要脱离Mybatis-Plus带来的便利,于是用回Mybatis,现在先记录下用Mybatis的拦截器来统一处理分页的简单方法。一、定义下分页信息的包装类importlom
- 2022-11-29mybatis SelectKey标签执行原理
SelectKey标签在mybatis中可以配置成在主sql执行之前和执行之后两种时机进行执行。mybatis执行sql时一次会涉及到这些对象sqlSession-->Executor-->StatementHandler其
- 2022-11-24mybatis原理初探
Mybatis执行原理初探初始化加载配置文件Stringresource="mybatis.xml";//加载mybatis的配置文件(它也加载关联的映射文件)InputStreaminputStream=null;try
- 2022-11-07Springboot 自定义mybatis 拦截器,实现我们要的扩展
前言相信大家对拦截器并不陌生,对mybatis也不陌生。有用过pagehelper的,那么对mybatis拦截器也不陌生了,按照使用的规则触发sql拦截,帮我们自动添加分页参数。那么今天,我们的实
- 2022-11-05PageHelper源码分析
PageHelper源码分析分析版本:5.2.0项目地址:https://github.com/pagehelper/Mybatis-PageHelper可以看下作者写的关于拦截器的文章。分页的原理,就是根据Mybatis提供的