- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
第
MyBatis实现动态SQL更新的代码示例
目录简介拦截器介绍实现拦截器注册拦截器代码示例yml配置Dao层代码mapper文件拦截器核心代码代码测试拦截器应用场景总结本文示例代码全部在SpringBoot3.0、MybatisPlus3.5.3.1版本下运行。
简介
MyBatis是一个流行的Java持久层框架,它提供了灵活的SQL映射和执行功能。有时候我们可能需要在运行时动态地修改SQL语句,例如添加一些条件、排序、分页等。MyBatis提供了一个强大的机制来实现这个需求,那就是拦截器(Interceptor)。
拦截器介绍
拦截器是一种基于AOP(面向切面编程)的技术,它可以在目标对象的方法执行前后插入自定义的逻辑。MyBatis定义了四种类型的拦截器,分别是:
Executor:拦截执行器的方法,例如update、query、commit、rollback等。可以用来实现缓存、事务、分页等功能。ParameterHandler:拦截参数处理器的方法,例如setParameters等。可以用来转换或加密参数等功能。ResultSetHandler:拦截结果集处理器的方法,例如handleResultSets、handleOutputParameters等。可以用来转换或过滤结果集等功能。StatementHandler:拦截语句处理器的方法,例如prepare、parameterize、batch、update、query等。可以用来修改SQL语句、添加参数、记录日志等功能。
实现拦截器
定义一个实现org.apache.ibatis.plugin.Interceptor接口的拦截器类,并重写其中的intercept、plugin和setProperties方法。添加@Intercepts注解,写上需要拦截的对象和方法,以及方法参数,例如@Intercepts({@Signature(type=StatementHandler.class,method=prepare,args={Connection.class,Integer.class})}),表示在SQL执行之前进行拦截处理。
注册拦截器
SpringBoot项目中集成了MybatisPlus后要让拦截器生效很简单,MybatisPlus的自动配置类会读取项目中所有注册到Spring容器的拦截器并进行自动注册。如下图,
所以我们只需要定义一个DynamicSqlInterceptor拦截器并加上@Component注解就行,代码如下,
@Component
@Slf4j
@Intercepts({
@Signature(type=StatementHandler.class,method=prepare,args={Connection.class,Integer.class})
publicclassDynamicSqlInterceptorimplementsInterceptor{
}
代码示例
yml配置
指定xml文件中需要替换的占位符标识:@dynamicSql以及待替换日期条件。
#动态sql配置
dynamicSql:
placeholder:@dynamicSql
date:2025-07-1020:10:30
Dao层代码
在需要进行SQL占位符替换的方法上加@DynamicSql注解。
publicinterfaceDynamicSqlMapper{
@DynamicSql
Longcount();
}
mapper文件
将日期条件改成占位符wherecreate_time@dynamicSql。
mappernamespace=ltd.newbee.mall.core.dao.DynamicSqlMapper
selectid=countresultType=java.lang.Long
selectcount(1)frommember
wherecreate_time@dynamicSql
/select
/mapper
拦截器核心代码
@Component
@Slf4j
@Intercepts({
@Signature(type=StatementHandler.class,
meth
您可能关注的文档
最近下载
- 电线电缆原材料采购控制程序.doc VIP
- GB50736-2012 民用建筑供暖通风与空气调节设计规范.pdf VIP
- 立体结构逻辑图( 112页).pptx VIP
- 小学“后进生”的成因及转化策略探讨 .pdf VIP
- SJT 11329-2006 数字电视接收设备接口规范 第3部分:复合视频信号接口.pdf VIP
- GB50086-2015 岩土锚杆与喷射混凝土支护工程技术规范.docx
- 劳务派遣招投标书.doc VIP
- 与听力学有关的国家标准听力计检定与声场校准讲解课件.ppt VIP
- 乳品品鉴师(三级)技能鉴定备考试题库(附答案).docx VIP
- 2025义务教育化学课程标准考试题库及答案.docx VIP
文档评论(0)