记录一个MyBatis中使用suffixOverrides处理动态sql语句失效的bug
2021/9/24 2:40:40
本文主要是介绍记录一个MyBatis中使用suffixOverrides处理动态sql语句失效的bug,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
<select id="getEmpByConditionTrim" resultType="com.study.mybatis.bean.Employee"> select * from myBatis.tbl_employee # prefix前缀:trim标签体中是整个字符串拼串后的结果,prefix给整个字符串增加一个前缀 # prefixOverrides:去掉整个字符串前面多余的字符 # suffix即为后缀的模式 <trim prefix="where" suffixOverrides="and"> <if test="id != null"> id = #{id} and </if> <if test="lastName != null and lastName != ''"> last_name like #{lastName} and </if> <if test="email != null"> email = #{email} and </if> # ognl会自动进行字符串与数字的转换判断 <if test="gender == 0 or gender == 1"> gender = #{gender} </if> </trim> </select>
一开始xml文件的sql代码是这样写的,目的是使用suffixOverrides解决如果不传gender属性造成sql语句末尾多出一个"and"从而查询失败的问题。但是在Test方法中一直报错。经过测试之后,原因是“ognl会自动进行字符串与数字的转换判断”这句注释干扰了suffixOverrides工作。当不传gender参数时,其无法识别email后面多出来的and,因为and后面还有这样一串注释。解决方法就是这里不能写注释:
<select id="getEmpByConditionTrim" resultType="com.study.mybatis.bean.Employee"> select * from myBatis.tbl_employee # prefix前缀:trim标签体中是整个字符串拼串后的结果,prefix给整个字符串增加一个前缀 # prefixOverrides:去掉整个字符串前面多余的字符 # suffix即为后缀的模式 <trim prefix="where" suffixOverrides="and"> <if test="id != null"> id = #{id} and </if> <if test="lastName != null and lastName != ''"> last_name like #{lastName} and </if> <if test="email != null"> email = #{email} and </if> <if test="gender == 0 or gender == 1"> gender = #{gender} </if> </trim> </select>
这篇关于记录一个MyBatis中使用suffixOverrides处理动态sql语句失效的bug的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-30java最新版本是什么,有什么特性?-icode9专业技术文章分享
- 2024-11-30[开源]27.8K star!这款 Postman 替代工具太火了!
- 2024-11-30Gzip 压缩入门教程:轻松掌握文件压缩技巧
- 2024-11-29开源工具的魅力:让文档管理更“聪明”
- 2024-11-29Release-it开发入门教程
- 2024-11-29Rollup 插件入门教程:轻松掌握模块打包
- 2024-11-29从零到一,产品经理如何玩转项目管理和团队协作
- 2024-11-29如何通过精益生产管理工具帮助项目团队实现精准进度控制?
- 2024-11-29低代码应用开发课程:新手入门与基础教程
- 2024-11-29入门指南:全栈低代码开发课程