delete用法
delete 同 update 类似,下面也用一个简单的例子说明。在 UserMapper 中添加一个简单的例子,代码如下。
/**
* 根据主键删除
* @param userId 用户ID
*/
void deleteById(Long userId);
根据主键删除数据的时候,如果主键只有一个字段,那么就可以像这个方法一样使用一个参数 id,这个方法对应 UserMapper.xml 中的代码如下。
<delete id="deleteById">
delete from sys_user where id = #{id}
</delete>
注意接口中 int deleteById(Long id); 方法的参数类型为 Long id,如果将参数类型修改如下,也是正确的。
/**
* 根据主键删除
*/
int deleteById(SysUser sysUser);
接口这样修改后,对应的 XML 中的方法不需要做任何修改。
对于以上两个接口,在 UserMapperTest 中编写一个测试,代码如下。
@Test
public void testDeleteById(){
SqlSession sqlSession = getSqlSession();
try {
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
// 从数据库查询1个user对象,根据id=1查询
SysUser user1 = userMapper.selectById(1L);
// 现在还能查询出user对象
Assert.assertNotNull(user1);
// 调用方法删除
Assert.assertEquals(1, userMapper.deleteById(1L));
// 再次查询,这时应该没有值,为null
Assert.assertNull(userMapper.selectById(1L));
// 使用SysUser参数再进行一次测试,根据id=1001查询
SysUser user2 = userMapper.selectById(1001L);
// 现在还能查询出user对象
Assert.assertNotNull(user2);
// 调用方法删除,注意这里使用参数为 user2
Assert.assertEquals(1, userMapper.deleteById(user2));
// 再次查询,这时应该没有值,为null
Assert.assertNull(userMapper.selectById(1001L));
// 使用SysUser参数再进行一次测试
}finally {
// 为了不影响其它测试,这里选择回滚
// 由于默认的 sqlSessionFactory.openSession() 是不自动提交的
// 因此不手动执行 commit 也不会提交到数据库
sqlSession.rollback();
// 不要忘记关闭sqlSession
sqlSession.close();
}
}
这部分测试代码中的数据库操作较多,下面只列出了第一个 deleteById 方法输出的操作日志。
以上是一个简单的 delete 方法示例,在动态 SQL 章节中还会介绍一些更复杂的用法。