MyBatis delete

1. 前言

本小节,我们将一起学习 MyBatis delete。

在 MyBatis 中,delete 标签对应于 SQL 语句中的 delete 删除。

2. 定义

慕课解释:delete 标签用于映射 SQL 中的删除语句。

3. 实例

3.1 xml 实例

如下,是一个真实的 delete 标签实例。

<delete id="deleteUserById">
  DELETE FROM imooc_user WHERE id = #{id}
</delete>

每一个 delete 标签都必须有一个唯一的 id 属性,在 delete 标签内部则是一条 SQL 语句。

3.2 注解实例

上面的 delete 标签对应的注解实例如下:

@Delete("DELETE FROM imooc_user WHERE id = #{id}")
int deleteUserById(Integer id);

4. delete 属性

delete 标签支持一些属性来改变更新语句的行为。

其中常见且重要的属性如下表:

属性 描述
id 在命名空间中的唯一标识符
parameterType 语句的参数类型,默认可选,MyBatis 会自动推断
flushCache 设置为 true 后,只要语句被调用,都会导致本地缓存和二级缓存被清空,默认为 false
timeout 设置超时时间
statementType STATEMENT,PREPARED 或 CALLABLE 中的一个,默认为 PREPARED(预处理)

5. 实践

5.1 例1. 根据 id 删除用户

请使用 MyBatis 完成对 imooc_user 表中通过 id 删除用户的功能。

分析:

按照 MyBatis 的开发模式,先在对应 UserMapper.xml 文件中添加根据 id 删除用户的 delete 标签,然后在 UserMapper.java 中增加上对应的方法即可。

步骤:

首先,在 UserMapper.xml 中添加 delete 标签,并在标签中写入 SQL :

<delete id="deleteUserById">
  DELETE FROM imooc_user WHERE id = #{id}
</delete>

然后在 UserMapper.java 中添加上对应的接口方法,方法接受 id 一个参数。

package com.imooc.mybatis.mapper;

import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface UserMapper {
   int deleteUserById(Integer id);
}

结果:

通过如下代码,我们运行 deleteUserById 这个方法。

UserMapper userMapper = session.getMapper(UserMapper.class);
int rows = userMapper.deleteUserById(10);
System.out.println(rows);
// 一定要提交
session.commit();
session.close();

成功后,id 为 10 的用户已被删除。

5.2 例2. 根据用户名删除用户

请使用 MyBatis 完成对 imooc_user 表中通过用户名删除用户的功能。

分析:

同上。

步骤:

首先,在 UserMapper.xml 中添加 delete 标签,并在标签中写入 SQL :

<delete id="deleteUserByName">
  DELETE FROM imooc_user WHERE username = #{username}
</delete>

然后在 UserMapper.java 中添加上对应的接口方法,方法接受 username 一个参数。

package com.imooc.mybatis.mapper;

import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface UserMapper {
   int deleteUserByName(String username);
}

结果:

通过如下代码,我们运行 deleteUserByName 这个方法。

UserMapper userMapper = session.getMapper(UserMapper.class);
int rows = userMapper.deleteUserByName("tom");
System.out.println(rows);
session.commit();
session.close();

成功后,用户名为 tom 的用户已被删除。

6. 小结

  • delete 标签并无太多的知识点,主要的工作量在书写 SQL 上,你可以借此机会来复习一下 SQL。