【7】mybatis delete标签


一、delete标签

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

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

 delete 标签常用属性

 二、传递多个参数

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

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

2.1 使用 Map 传递参数

此操作与update标签中的使用map传递参数非常类似,读者可以自己操作下,以检验掌握与否

2.2 使用注解传递参数

我们还可以使用 MyBatis 提供的 @Param 注解给注解器传递参数

1》复制【mybatis尝鲜】这节中的项目代码mybatisDemoA2,生成项目mybatisDemoA6,打开net.biancheng.mapper包下的WebsiteMapper接口类,添加以下方法,注意原有代码不要动:

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

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

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

3》在net.biancheng.test包添加testPara类,代码如下:

package net.biancheng.test;

import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
import java.util.List;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import net.biancheng.mapper.WebsiteMapper;
import net.biancheng.po.Website;

public class testPara {

public static void main(String[] args) {
InputStream config;
try {
//读取配置文件
config = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory ssf = new SqlSessionFactoryBuilder()
.build(config);
//创建sqlsession对象
SqlSession ss = ssf.openSession();
//获取指定对象
WebsiteMapper websiteMapper = ss.getMapper(WebsiteMapper.class);
List<Website> websitelist = websiteMapper.selectAllWebsite();
System.out.println("删除之前,记录条数:"+websitelist.size());
//使用 @Param 注解传递参数
String name = "长空";
String url = "https://www.tw.net/";
int i = websiteMapper.deleteWebsiteByParam(name, url);
if(i>0){
System.out.println("通过 @Param注解传递参数,共删除了 " + i + " 条记录");
}
List<Website> websitelist2 = websiteMapper.selectAllWebsite();
System.out.println("删除之后,记录条数:"+websitelist2.size());
ss.commit();
ss.close();
} catch (IOException e) {
e.printStackTrace();
}

}

}

4》程序运行

程序执行之前,数据库记录如图:

 执行结果 :

 程序执行之前,数据库记录如图:

 执行结果说明,“长空”这条记录被删除成功。

2.3 使用 JavaBean 传递参数

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

方法过程与insert中使用javabean传递参数相同,思路是先在接口类中创建方法,然后在WebsiteMapper.xml文件中创建id为刚才方法名称的sql语句,最后在test类中测试执行,在此不详细写了。

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

  • 使用 Map 传递参数会导致业务可读性的丧失,继而导致后续扩展和维护的困难,所以在实际应用中我们应该果断废弃该方式。
  • 使用 @Param 注解传递参数会受到参数个数的影响。当 n≤5 时,它是最佳的传参方式,因为它更加直观;当 n>5 时,多个参数将给调用带来困难。
  • 当参数个数大于 5 个时,建议使用 JavaBean 方式。

本节代码mybatisDemoA6,下节继续。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM