96SEO 2026-02-19 10:05 17
学会编写MyBatis中动态SQL学会MyBatis的条件查询操作学会MyBatis的更新操作学会MyBatis的复杂查询操作

片段的技术。
它允许你根据不同的情况来构建查询条件避免写大量重复的
相当于Java中的switch…case…default语句用于多条件判断
根据不同的条件组合进行查询比如根据姓名、性别、年龄等多个条件进行筛选。
根据不同的条件来动态排序查询结果。
在更新操作中根据传入的参数来选择性地更新某些字段。
在插入操作中根据不同的参数情况来选择性地插入某些字段。
标签定义了一个查询语句并指定了它的唯一标识符id、输入参数类型parameterType和结果类型resultType。
到查询语句中。
这个条件相当于一个恒为真的条件因此不会影响查询结果。
在学习了上面的几个动态SQL的常用元素现在我们来尝试一下编写一下我们自己项目的动态SQL。
1.编写一个使用if的动态SQl查询语句若有账号名称Account则按账号名称Account查询若有网站名WebsiteName则用WebsiteName查询若俩个都有则俩个都匹配的才查询。
③若是俩个条件都满足呢Account和WebsiteName都不为空
④若是俩个条件都不满足呢Account和WebsiteName都为空
可以看到Mybatis是会根据我们输入的查询条件进行拼接生成动态的SQL。
2.那么我们继续尝试编写choose的动态sql语句情景时若有账号名Account则优先使用账号名进行查询。
若无账户名有网站名WebsiteName那么就按网站名搜索。
若账号名网站名都无那么就采用默认查询passwordms表中的所有信息。
在使用if元素时只要test属性中的表达式为true就会执行元素中的条件语句但是在实际应用中有时只需要从多个选项中选择一个去执行。
这时候使用choose就是非常合适的如果使用if则是不合适的。
那么去编写我们的测试类根据不同的输入情况查看是否满足我们的需求
②Account不为空WebsiteName不为空的情况结果和上面的一样
可以看到Mybatis是会根据我们输入的查询条件进行拼接生成动态的SQL。
3.那么我们继续尝试编写where、trim的动态sql语句情景时在sql中where
Account#{Account}前面、后面添加上前后缀生成新的语句
我们写的prefixOverrides“AND”会自动将()里面的多余的前缀AND去除即生成
passwordms因为if里面的条件每一个成立所以where也不会添加进去但是会自动删除语句中多余的AND或OR
可以看到Mybatis是会根据我们输入的查询条件进行拼接生成动态的SQL并且正确无误。
4.那么我们继续尝试编写set、trim的动态sql语句情景时如果想要更新某一个对象就需要发送所有的字段给持久化对象然而在实际应用中大多数情况下都是更新某一个或几个字段。
如果更新的每一条数据都要将其所有的属性都更新一遍那么执行效率是非常差的。
为了解决更新数据的效率问题MyBatis提供了set元素。
除了可以用trim元素来进行更新操作外也使用set元素来进行更新操作
在映射文件中使用set元素和if元素组合进行update语句动态SQL组装时如果set元素内包含的内容都为空则会出现SQL语法错误。
因此在使用set元素进行字段信息更新时要确保传入的更新字段不能都为空。
trim元素suffixOverrides属性指定去除的trim元素所包含内容的后缀为逗号
可以看到嗷正常数据更新了但是呢其实是有问题的不管数据是不是更原来的一样都会对数据库进行一次更新的操作。
Objects.equals(oldData.getAccount(),
Objects.equals(oldData.getWebsiteName(),
newData.getWebsiteName());}那么保持参数条件不变的情况下继续进行测试
③若是无参数那么就会报错所以一定要确保更新的参数必须要有不能全为空。
属性说明item表示集合中每一个元素进行迭代时的别名。
该属性为必选。
index在List和数组中index是元素的序号在Map中index是元素的key。
该属性可选。
open表示foreach语句代码的开始符号一般和close“)”合用。
常用在in条件语句中。
该属性可选。
separator表示元素之间的分隔符例如在条件语句中separator“,”会自动在元素中间用“,”隔开避免手动输入逗号导致SQL错误错误示例如in(1,2,)。
该属性可选。
close表示foreach语句代码的关闭符号一般和open(合用。
常用在in条件语句中。
该属性可选。
collection用于指定遍历参数的类型。
注意该属性必须指定不同情况下该属性的值是不一样的。
在遍历参数时collection属性的值是必须指定的。
不同情况下该属性的取值也是不一样的主要有以下三种情况List类型、数值类型、Map类型。
若入参为单参数且参数类型是一个Listcollection属性值为list。
若入参为单参数且参数类型是一个数组collection属性值为array。
若传入参数为多参数就需要把参数封装为一个Map进行处理collection属性值为Map。
若传入参数为多参数就需要把参数封装为一个Map进行处理collection属性值为Map。
5.那么我们继续尝试编写foreach的动态sql语句情景时要从数据表passwordms中查询出id为1、2、3的账号信息就可以利用数组作为参数存储id的属性值1、2、3并通过foreach元素迭代数组完成账号信息的批量查询操作。
close)#{id}/foreach/select在我们的代码中findByIds
MyBatisUtil.createSqlSession();ListInteger
这是第三天对SSM框架的学习深入学习了MyBatis的动态SQL它允许我们根据不同的条件在
可以帮助你编写更加灵活、可复用和动态的数据库查询语句适用于各种复杂的业务场景。
想要跟着学习的可以去我的资源里面找对应的文件下载我的md文件也会发上去项目文件会上传可以自己跟着学习一下。
注本文内容基于个人学习理解如有错误或疏漏欢迎指正。
感谢阅读如果觉得有帮助请点赞和分享。
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback