update用法
先来看一个简单的通过主键更新数据的 update 方法的例子。在 UserMapper 接口中添加以下方法。
/**
* 根据主键更新
* @param sysUser 用户
*/
void updateById(SysUser sysUser);
这里的参数 sysUser 就是要更新的数据,在接口对应的 UserMapper.xml 中添加如下代码。
<update id="updateById">
update sys_user
set user_name = #{userName},
user_password = #{userPassword},
user_email = #{userEmail},
user_info = #{userInfo},
head_img = #{headImg,jdbcType=BLOB},
create_time = #{createTime,jdbcType=TIMESTAMP}
where id = #{id}
</update>
这个方法的 SQL 很简单,下面写一个简单的测试来验证一下。在 UserMapperTest 中添加如下代码。
@Test
public void testUpdateById(){
SqlSession sqlSession = getSqlSession();
try {
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
// 从数据库查询1个user对象
SysUser user = userMapper.selectById(1L);
Assert.assertNotNull(user);
// 当前userName为admin
Assert.assertEquals("admin",user.getUserName());
// 修改用户名
user.setUserName("admin_test");
// 修改邮箱
user.setUserEmail("test@qq.com");
// 更新数据,特别注意,这里的返回值 result 是执行的SQL影响的行数
int result = userMapper.updateById(user);
// 只更新1条数据
Assert.assertEquals(1, result);
// 根据当前id查询修改后的数据
user = userMapper.selectById(1L);
// 修改后的名字是 admin_test
Assert.assertEquals("admin_test", user.getUserName());
}finally {
// 为了不影响其它测试,这里选择回滚
// 由于默认的 sqlSessionFactory.openSession() 是不自动提交的
// 因此不手动执行 commit 也不会提交到数据库
sqlSession.rollback();
// 不要忘记关闭sqlSession
sqlSession.close();
}
}
执行该测试,输出日志内容如下。
还可以通过修改 UPDATE 语句中的 WHERE 条件来更新一条或一批数据。基本的 update 用法就这么简单,更复杂的情况在后面的动态 SQL 章节中会进行讲解。