动态SQL
在使用JDBC拼接SQL的时候,经常要确保不能完了必要的空格,对于的逗号,而mybatis的动态SQL则完美的解决了这些问题。本文只介绍利用mybatis的动态SQL解决常见的SQL拼接问题。
mybatis的动态sql包含一下内容:
- if
- choose,when,otherwise
- trim,where,set
- foreach
- bind
解决where后SQL条件判断问题
在上名的sql中,如果三个if条件全为空,则最后拼接的sql为:
select * from student where
如果第一个为判断为空,则最后拼接的sql为:
select * from student where and student_age = #{studentAge} and student_phone = #{studentPhone}
上面拼接的两个sql语法都存在问题,只需要利用一点小技巧就能解决这个问题。如下,利用
也可以利用trim来解决
利用或解决update中set逗号问题
update student
student_name = #{studentName},
student_age = #{studentAge},
student_name = student_phone = #{studentPhone},
where student_id = #{studentId}
从上面可以看出,set始终会多一个逗号。解决方案如下:
update student
student_name = #{studentName},
student_age = #{studentAge},
student_name = student_phone = #{studentPhone},
where student_id = #{studentId}
或者
update student
student_name = #{studentName},
student_age = #{studentAge},
student_name = student_phone = #{studentPhone},
where student_id = #{studentId}
利用foreach查询