MyBatis delete标签

MyBatis delete 标签用于定义 delete 语句,执行删除操作。当 MyBatis 执行完一条更新语句后,会返回一个整数,表示受影响的数据库记录的行数。

下面我们通过一个示例演示 delete 标签的用法。

1. 在 WebsiteMapper.xml 中使用 delete 标签添加一条 delete 语句,代码如下。

  1. <delete id="deleteWebsite" parameterType="string">
  2. delete from website where name = #{name}
  3. </delete>

2.  在 WebsiteMapper 接口中增加一个 deleteWebsite() 方法,代码如下。

  1. int deleteWebsite(String name);

参数为 String 类型的字符串;返回值为 int 类型,表示执行 sql 语句后,被删除记录的行数。

3. 测试代码如下。

  1. //删除 name 为编程帮3 的记录
  2. String name = "编程帮3";
  3. int i = websiteMapper.deleteWebsite(name);
  4. System.out.println("共删除了 " + i + " 条记录");

4. 执行测试代码,控制台输出如下。

共删除了 3 条记录

delete 标签常用属性

delete 标签常用属性如下表。

属性名称描述备注
id它和 Mapper 的命名空间组合起来使用,是唯一标识符,供 MyBatis 调用 如果命名空间+ id 不唯一,那么 MyBatis 抛出异常
parameterType传入 SQL 语句的参数类型的全限定名或别名,它是一个可选属性。支持基本数据类型和 JavaBean、Map 等复杂数据类型
flushCache该属性用于设置执行该操作后,是否会清空二级缓存和本地缓存,默认值为 true。-
timeout该属性用于设置 SQL 执行的超时时间,如果超时,就抛异常。-
statementType执行 SQL 时使用的 statement 类型, 默认为 PREPARED,可选值:STATEMENT,PREPARED 和 CALLABLE。 -

注意:delete 标签中没有 resultType 属性,只有查询操作才需要对返回结果类型进行相应的指定。

传递多个参数

在上面的示例中,我们在 delete 语句中只使用了一个 String 类型的参数,而在实际的开发过程中,我们的 delete 语句往往需要使用多个参数对记录进行筛选,Mybatis 为我们提供以下 3 种方式,来实现给映射器传递多个参数:

  • 使用 Map 传递参数
  • 使用注解传递参数
  • 使用 JavaBean 传递参数

使用 Map 传递参数

我们可以将参数封装到一个 Map 对象中,然后传递给 MyBatis 的映射器,示例如下。

1. 在 WebsiteMapper 接口中,定义一个 deleteWebsiteByMap() 方法,并使用 Map 传递参数,代码如下。

  1. int deleteWebsiteByMap(Map<String, Object> params);

2.在 WebsiteMapper.xml 中使用 delete 标签定义一个 delete 语句,并接收通过 Map 传递的参数,配置如下。

  1. <!--通过 Map 传递参数,执行删除操作-->
  2. <delete id="deleteWebsiteByMap" parameterType="map">
  3. delete
  4. from website
  5. where name = #{name}
  6. and url = #{url}
  7. </delete>

3. 测试代码如下。

  1. //使用 Map 向 delete 标签传递参数
  2. Map<String, Object> params = new HashMap<>();
  3. params.put("name", "编程帮");
  4. params.put("url", "www.biancheng.net");
  5. int i = websiteMapper.deleteWebsiteByMap(params);
  6. System.out.println("通过 Map 传递参数,共删除了 " + i + " 条记录");

4. 执行测试代码,控制台输出如下。

通过 Map 传递参数,共删除了 1 条记录

使用注解传递参数

我们还可以使用 MyBatis 提供的 @Param 注解给注解器传递参数,示例如下。

1. 在 WebsiteMapper 接口中,定义一个 deleteWebsiteByParam() 方法,并使用 @Param 注解传递参数,方法如下

  1. int deleteWebsiteByParam(@Param("name") String name, @Param("url") String url);

2. 在 WebsiteMapper.xml 中使用 delete 标签定义一个 delete 语句,并接收通过 @Param 注解传递的参数,配置如下。

  1. <!--通过 @Param 注解传递参数,执行删除操作-->
  2. <delete id="deleteWebsiteByParam">
  3. delete
  4. from website
  5. where name = #{name}
  6. and url = #{url}
  7. </delete>

3. 测试代码如下。

  1. //使用 @Param 注解传递参数
  2. String name = "编程帮2";
  3. String url = "www.biancheng.net";
  4. int i = websiteMapper.deleteWebsiteByParam(name, url);
  5. System.out.println("通过 @Param 注解传递参数,共删除了 " + i + " 条记录");

4. 执行测试代码,控制台输出如下。

通过 @Param 注解传递参数,共删除了 1 条记录

使用 JavaBean 传递参数

在参数过多的情况下,我们还可以将参数通过 setter 方法封装到 JavaBean(实体类)对象中传递给映射器。

1. 在 WebsiteMapper 接口中,定义一个 deleteWebsiteByJavaBean() 方法,并使用 JavaBean 传递参数,方法如下。

  1. int deleteWebsiteByJavaBean(Website website);

2. 在 WebsiteMapper.xml 中使用 delete 标签定义一个 delete 语句,并接收通过 JavaBean 传递的参数,配置如下。

  1. <!--通过 JavaBean 传递参数,执行删除操作-->
  2. <delete id="deleteWebsiteByJavaBean" parameterType="net.biancheng.www.po.Website">
  3. delete
  4. from website
  5. where name = #{name}
  6. and url = #{url}
  7. </delete>

3. 测试代码如下。

  1. //使用 JavaBean 传递参数到更新语句中
  2. Website website = new Website();
  3. website.setName("C语言中文网");
  4. website.setUrl("https://www.biancheng.net/");
  5. int i = websiteMapper.deleteWebsiteByJavaBean(website);
  6. System.out.println("通过 JavaBean 传递参数,共删除了 " + i + " 条记录");

4. 执行测试代码,控制台输出如下。

通过 JavaBean 传递参数,共删除了 3 条记录

区别

以上 3 种方式的区别如下:

  • 使用 Map 传递参数会导致业务可读性的丧失,继而导致后续扩展和维护的困难,所以在实际应用中我们应该果断废弃该方式。
  • 使用 @Param 注解传递参数会受到参数个数的影响。当 n≤5 时,它是最佳的传参方式,因为它更加直观;当 n>5 时,多个参数将给调用带来困难。
  • 当参数个数大于 5 个时,建议使用 JavaBean 方式。
腾讯云推出云产品限时特惠抢购活动:2C2G云服务器7.9元/月起
本文链接:https://www.jhelp.net/p/jr2LDuqO0fzjGxGB (转载请保留)。
关注下面的标签,发现更多相似文章