10.2 MyBatis动态SQL 10.2.4 set标签
10.2 MyBatis动态SQL 10.2.4 set标签
关于动态更新语句还可以使用set
标签。set
标签可以用于动态包含需要更新的列,而舍去其他的。
XML映射文件
1 | <!-- 根据员工Id查询员工信息 --> |
注意在if子语句中添加逗号
注意,update
语句的set
子句中,如果要更新多个列,则需要用逗号隔开多个列.所以要在第二个if
语句及其后续的if语句中中添加逗号作为分隔符.
set标签的作用
set
标签会动态前置set
关键字,同时也会消除无关的逗号,因为使用了条件语句之后很可能就会在生成的赋值语句的后面留下这些逗号。
接口方法
1 | Employee selectEmployeeById(Integer id); |
需要注意的是,updateEmployeeUseSet
方法传递的参数不是之前使用的HashMap
,而是一个Employee
对象,因为通常在进行更新操作时都是先查询出一个实体对象再进行更新操作。
测试类
1 | public class SetTest { |
运行结果
运行测试类,控制台输出如下:
DEBUG [main] ==> Preparing: select * from tb_employee where id=?; DEBUG [main] ==> Parameters: 1(Integer) DEBUG [main] <== Total: 1 查询到的员工信息:Employee [id=1, loginname=xiaoming, password=xiaoming, name=小明, sex=男, age=19, phone=123456789123, sal=9800.0, state=active] DEBUG [main] ==> Preparing: update tb_employee SET loginname=? ,password=? ,name=? ,sex=? ,age=? ,phone=? ,sal=? ,state=? where id=? DEBUG [main] ==> Parameters: xiaoming(String), xiaoming(String), 新名字(String), 男(String), 19(Integer), 123456789123(String), 123.0(Double), active(String), 1(Integer) DEBUG [main] <== Updates: 1 DEBUG [main] ==> Preparing: select * from tb_employee where id=?; DEBUG [main] ==> Parameters: 1(Integer) DEBUG [main] <== Total: 1 更新后的员工信息:Employee [id=1, loginname=xiaoming, password=xiaoming, name=新名字, sex=男, age=19, phone=123456789123, sal=123.0, state=active]
可以看到,测试类中,
- 首先执行了一条查询语句,查询
id
为1
的员工, - 之后执行了一条
update
语句,根据传入的Employee
对象更新员工信息。 - 然后再查询该员工信息.可以看到已经更新成功了.