MyBatis delete标签
下面我们通过一个示例演示 delete 标签的用法。
1. 在 WebsiteMapper.xml 中使用 delete 标签添加一条 delete 语句,代码如下。
<delete id="deleteWebsite" parameterType="string">
delete from website where name = #{name}
</delete>
2. 在 WebsiteMapper 接口中增加一个 deleteWebsite() 方法,代码如下。
int deleteWebsite(String name);
参数为 String 类型的字符串;返回值为 int 类型,表示执行 sql 语句后,被删除记录的行数。
3. 测试代码如下。
//删除 name 为编程帮3 的记录
String name = "编程帮3";
int i = websiteMapper.deleteWebsite(name);
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 传递参数,代码如下。
int deleteWebsiteByMap(Map<String, Object> params);
2.在 WebsiteMapper.xml 中使用 delete 标签定义一个 delete 语句,并接收通过 Map 传递的参数,配置如下。
<!--通过 Map 传递参数,执行删除操作-->
<delete id="deleteWebsiteByMap" parameterType="map">
delete
from website
where name = #{name}
and url = #{url}
</delete>
3. 测试代码如下。
//使用 Map 向 delete 标签传递参数
Map<String, Object> params = new HashMap<>();
params.put("name", "编程帮");
params.put("url", "www.biancheng网站站点" rel="nofollow" />
通过 Map 传递参数,共删除了 1 条记录
使用注解传递参数
我们还可以使用 MyBatis 提供的 @Param 注解给注解器传递参数,示例如下。1. 在 WebsiteMapper 接口中,定义一个 deleteWebsiteByParam() 方法,并使用 @Param 注解传递参数,方法如下
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. 测试代码如下。
//使用 @Param 注解传递参数
String name = "编程帮2";
String url = "www.biancheng网站站点" rel="nofollow" />
通过 @Param 注解传递参数,共删除了 1 条记录
使用 JavaBean 传递参数
在参数过多的情况下,我们还可以将参数通过 setter 方法封装到 JavaBean(实体类)对象中传递给映射器。1. 在 WebsiteMapper 接口中,定义一个 deleteWebsiteByJavaBean() 方法,并使用 JavaBean 传递参数,方法如下。
int deleteWebsiteByJavaBean(Website website);
2. 在 WebsiteMapper.xml 中使用 delete 标签定义一个 delete 语句,并接收通过 JavaBean 传递的参数,配置如下。
<!--通过 JavaBean 传递参数,执行删除操作-->
<delete id="deleteWebsiteByJavaBean" parameterType="net.biancheng.www.po.Website">
delete
from website
where name = #{name}
and url = #{url}
</delete>
3. 测试代码如下。
//使用 JavaBean 传递参数到更新语句中
Website website = new Website();
website.setName("C语言中文网");
website.setUrl("https://www.biancheng网站站点" rel="nofollow" />
通过 JavaBean 传递参数,共删除了 3 条记录
区别
以上 3 种方式的区别如下:
使用 Map 传递参数会导致业务可读性的丧失,继而导致后续扩展和维护的困难,所以在实际应用中我们应该果断废弃该方式。
使用 @Param 注解传递参数会受到参数个数的影响。当 n≤5 时,它是的传参方式,因为它更加直观;当 n>5 时,多个参数将给调用带来困难。
当参数个数大于 5 个时,建议使用 JavaBean 方式。
- 随机文章
- 台湾的马尔代夫(台湾也有马尔代夫!)
- 中国 马尔代夫 港口(中国公司参与马尔代夫港口建设)
- 马尔代夫位置详解(马尔代夫位于哪里?马尔代夫位置解析 → 马尔代夫地理位置简述)
- 足球 中国 马尔代夫(中国足球队赢得与马尔代夫的比赛)
- 东湖马尔代夫旅游(东湖马尔代夫度假,细腻海岛待您来。)
- 夜晚马尔代夫机场(夜晚在马尔代夫机场的经历引起了关注)
- 假期潜水马尔代夫(浮潜、阳光和沙滩:我的马尔代夫假期)
- 北京 马尔代夫 团(北京游客前往马尔代夫度假团,享受海岛风情)
- 国际轻奢马尔代夫(马尔代夫:全球最奢华岛国的心动体验)
- 直播 中国 马尔代夫战役(中国成功展开马尔代夫派遣行动)
- 蜜月 马尔代夫(“马尔代夫浪漫蜜月”)
- 介绍马尔代夫节日(马尔代夫庆祝年度佳节——雷达洛芒节)
- 汇率 马尔代夫(马尔代夫货币汇率最新情况)
- 海藻精油马尔代夫(马尔代夫海藻提取物:珍贵的精油来源)
- 清晨马尔代夫的画(清晨的马尔代夫:一个美不胜收的画。)
- 球迷马尔代夫接机(马尔代夫球迷热情接机,欢迎球队到来)
- 芜湖马尔代夫门票(芜湖马尔代夫门票价格及购买方式介绍)
- 西沙对比马尔代夫(西沙与马尔代夫:哪个度假胜地更好?)
- 眉山马尔代夫哪里(眉山乌双岛度假村:仿佛置身马尔代夫)
- 蜜月马尔代夫图片(浪漫蜜月之旅:马尔代夫美景尽收眼底)
- 阜平的小马尔代夫(中国北方的天堂岛——阜平小马尔代夫)
- 观海之心马尔代夫(观海心情:马尔代夫岛国风光尽收眼底)
- 西安直飞马尔代夫(西安往返马尔代夫,快乐之旅开始啦!)
- 类似 马尔代夫(重温最美马尔代夫,度过难忘假期!)
- 马尔代夫亭子照片(美丽马尔代夫的传统亭子让人流连忘返)
- 马尔代夫代理骗子(马尔代夫代理诈骗再曝光,多人受害。)
- 马尔代夫中国重庆(中国重庆:马尔代夫度假胜地人气不减)
- 马尔代夫全部景区(马尔代夫所有景点汇总,尽览瑰丽风光)
- 马尔代夫升级房型(马尔代夫度假村房型升级:更多元选择)
- 杭州 马尔代夫(杭州旅游新亮点:豪华马尔代夫度假村惊艳登场)
