MVN--05
2026/4/6 10:37:48 网站建设 项目流程
一、核心概念动态 SQL 定义动态 SQL 指SQL 语句会根据用户输入 / 外部条件的变化而动态拼接解决 “条件可选查询” 的场景是 MyBatis 最核心的能力之一。二、动态 SQL 核心标签详解1.if标签多条件并行判断逻辑 “与”核心作用判断参数是否有值符合条件则拼接对应 SQL 片段所有满足条件的片段都会生效类似 Java 中多个独立if判断。核心语法test必填编写逻辑表达式如status ! null、companyName ! null and companyName ! 。存在问题直接在where后拼接if时若第一个条件不生效后续条件的and会导致 SQL 语法错误如where and company_name like?。2 种解决方案对应图片中内容表格方案代码示例适用场景恒等式兜底where 11 if.../if /where早期写法需手动维护条件前缀where标签替代where if.../if /where推荐自动处理where关键字及多余and/or无需手动兜底完整示例xmlselect idselectByCondition resultMapbrandResultMap select * from tb_brand where !-- 状态条件非空则拼接 -- if teststatus ! null status #{status} /if !-- 公司名条件非空且非空字符串则拼接 -- if testcompanyName ! null and companyName ! and company_name like #{companyName} /if !-- 品牌名条件非空且非空字符串则拼接 -- if testbrandName ! null and brandName ! and brand_name like #{brandName} /if /where /select2.choose标签多条件单选逻辑 “或”核心作用只选择第一个满足条件的 SQL 片段类似 Java 的switch-case语句所有条件都不满足时执行otherwise默认分支。子标签对应关系表格子标签类比 Java作用chooseswitch包裹整个选择逻辑whencase按顺序判断条件第一个满足的分支生效后后续分支不再执行otherwisedefault所有when都不满足时执行该分支兜底用完整示例xmlselect idselectByConditionSingle resultMapbrandResultMap select * from tb_brand where choose !-- 优先按状态查询 -- when teststatus ! null status #{status} /when !-- 状态无值则按公司名查询 -- when testcompanyName ! null and companyName ! company_name like #{companyName} /when !-- 前两者无值则按品牌名查询 -- when testbrandName ! null and brandName ! brand_name like #{brandName} /when !-- 所有条件都无值则不限制11 恒成立 -- otherwise 1 1 /otherwise /choose /select三、参数相关核心规则补充图片内容1. 参数占位符#{}vs${}必背表格特性#{}推荐${}本质预编译 SQL替换为?字符串拼接直接拼入 SQLSQL 注入完全防止存在严重注入风险使用场景99% 的参数传递条件值、插入值动态表名、列名、排序字段需严格校验入参示例where id #{id}→where id ?where id ${id}→where id 12. 多参数传递的 3 种方式表格方式核心要求适用场景散装参数Param 注解接口方法用Param(SQL 占位符名)标注占位符名与#{}完全一致方法参数少1-3 个无对应实体类实体类封装参数SQL 中的#{}名称与实体类属性名完全一致多个参数对应实体类属性适合复杂条件Map 集合参数SQL 中的#{}名称与 Map 集合的 key 完全一致参数不固定动态扩展散装参数示例接口 XMLjava运行// Mapper 接口 ListBrand selectByCondition(Param(status) Integer status, Param(companyName) String companyName, Param(brandName) String brandName);

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询