关于网站建设管理工作的报告,网站制作与免费网站建设,用asp制作一个简单的网站,卖域名的网站哪些好文章目录 一、介绍二、语法三、常见示例3.1、字符串拼接3.2、动态条件处理(三元表达式)3.3、避免重复计算3.4、bind与分页查询3.5、foreach中使用bind 四、错误示例4.1、where后面跟着bind 五、总结5.1、注意事项 一、介绍
在 MyBatis 中#xff0c;bind 标签允许在 OGNL 表达… 文章目录 一、介绍二、语法三、常见示例3.1、字符串拼接3.2、动态条件处理(三元表达式)3.3、避免重复计算3.4、bind与分页查询3.5、foreach中使用bind 四、错误示例4.1、where后面跟着bind 五、总结5.1、注意事项 一、介绍
在 MyBatis 中bind 标签允许在 OGNL 表达式上下文中创建一个变量并将其绑定到当前上下文常用于动态 SQL 中简化复杂表达式或重复计算。
二、语法
bind name变量名 valueOGNL表达式/name变量名称后续可直接引用。valueOGNL 表达式可以是字符串拼接、计算等操作。
三、常见示例
3.1、字符串拼接
在模糊查询中避免直接在 SQL 中拼接 %提升可读性
select idsearchUsers resultTypeUserbind namepattern value% username %/SELECT * FROM users WHERE username LIKE #{pattern}
/select3.2、动态条件处理(三元表达式)
结合条件判断简化复杂逻辑
select idgetUsers resultTypeUserbind namefilterName valuename ! null ? name : %/SELECT * FROM usersWHERE name LIKE #{filterName}
/select3.3、避免重复计算
在多次使用同一表达式时通过 bind 复用
select idcalculate resultTypedoublebind nametotal valueprice * quantity/bind namediscounted valuetotal * (1 - discount)/SELECT #{discounted} AS final_price
/select3.4、bind与分页查询
bind经常与分页查询limit一起使用用来计算limit中的起始条数与分页数。
select idpageListUser resultTypecom.demo.entity.UserparameterTypejava.util.Listselect * from user where name #{name}if testpageNo ! null and pageSize ! nullbind namepageNo value(pageNo-1)*pageSize/limit #{pageNo},#{pageSize}/if
/selectpageNo页码、第几页pageSize: 每页显示条数
3.5、foreach中使用bind
在 MyBatis 的 foreach 循环中应避免使用 bind 来创建每个迭代的临时变量因为 bind 的作用域是当前上下文在循环中会被覆盖。替代方案是在 Java 代码中预处理数据或者直接在表达式中使用循环项和索引。
若实在需要在foreach中使用bind,可以参考我的另一篇博文《mybatis foreach里用bind、foreach中使用bind的坑、foreach中动态生成表名》
四、错误示例
4.1、where后面跟着bind 网上看到有些博文写过这样的示例bind跟在where条件后面但这是一种错误的写法。bind 变量仅在当前语句块如 select、update内有效。 select idgetUsersByNameAndAge resultTypeUserSELECT * FROM usersWHERE name #{name} AND age bind nameminAge value${minAge} /
/selectbind 必须放在 SQL 语句的最前面不能跟在 WHERE 条件后面。
五、总结
5.1、注意事项
bind 变量仅在当前语句块如 select、update内有效。OGNL 表达式支持 Java 语法如三元运算符、方法调用等。优先使用 bind 而非直接拼接 SQL以提高安全性和可维护性。
通过灵活使用 bind可以显著提升 MyBatis 动态 SQL 的可读性和简洁性。 创作不易欢迎打赏你的鼓励将是我创作的最大动力。