适用场景
在开发过程中,我们经常会遇到修改信息,但一条记录我们每次需要修改的字段不一样(比如,某一次只想要修改员工的姓名,下一次只想修改员工的邮箱,这时候我们不需要一次性修改员工的所有信息),可以使用set与if结合动态更新记录。
- 创建接口EmployeeDynamicSQLMapper.java,在接口中定义条件查询方法。
public interface EmployeeDynamicSQLMapper {
public void updateEmp(Employee employee);
}
方法一:使用set—if来实现
- 创建EmployeeDynamicSQLMapper接口对应的sql映射文件EmployeeDynamicSQLMapper.xml。并通过if和set完成动态更新。
<update id="updateEmp">
update tbl_employee
<set>
<if test="lastName!=null">
last_name=#{lastName},
</if>
<if test="email!=null">
email=#{email}
</if>
</set>
where id=#{id}
</update>
- 测试
@Test
public void test1() throws IOException {
SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
SqlSession openSession = sqlSessionFactory.openSession();
try{
EmployeeDynamicSQLMapper mapper = openSession.getMapper(EmployeeDynamicSQLMapper.class);
Employee employee = new Employee(1, "zhang", "236534568@qq.com", null);
mapper.updateEmp(employee);
}finally{
openSession.close();
}
}
- 运行结果
方法二:使用trim
实现动态更新
- 创建EmployeeDynamicSQLMapper接口对应的sql映射文件EmployeeDynamicSQLMapper.xml。并通过if和set完成动态更新。
<trim prefix="set" prefixOverrides=",">
<if test="lastName!=null">
last_name=#{lastName},
</if>
<if test="email!=null">
email=#{email}
</if>
</trim>
测试运行结果同方法一。