3.1使用动态sql完成多条件查询
动态sql是mybatis的一个强大的特性,在使用JDBC操作数据时,如果查询条件特别多,将条件串联成sql字符串是一件痛苦的事情,通常的解决方法是写很多的if-else条件语句对字符串进行拼接,并确保不能忘了空格或在字段的最后省略逗号。Mybatis使用 一种强大的动态sql语句来改善这种情况。动态sql基于ognl的表达式,可使我们方便的在sql语句中实现某些逻辑,用于实现动态sql的元素如下。
If:利用if实现简单的条件选择
Choose:相当于java中的switch语句,通常与when和otherwise搭配。
Where:简化sql语句找那个where的条件判断
Set:解决动态更新语句
Trim:可以灵活地去除多余的关键字
Foreach:迭代一个集合,通常用于in条件
3.2.1使用if+set改造更新操作
回顾之前的演示示例-修改用户信息操作,在该示例中,采用的是封装User对象入参,根据用户id进行用户信息修改,当操作数据的时候,每个字段都进行了赋值更新。但是在实际项目中,用户在进行信息的更新操作时,并不一定所有的数据都会进行修改,对应用户没有修改的数据,数据库不需要进行相应的更新操作,即更新用户表数据,若某个参数传入值为null时,不需要set该字段,那么现在就先测试一下之前的修改用户信息示例,观察是否满足正常的业务需求。
通过日志中的sql语句和参数,我们发现未被设值的参数也进行了set操作,那么如何解决?就需要使用动态sql中的set元素来处理。
Set元素主要用于更新操作,它的主要功能个whe