MyBatis如何使用delete标签删除数据呢?
MyBatis标签的功能
MyBatis中delete标签的功能:用于定义delete 语句,其功能为执行删除操作。
当 MyBatis运行delete标签后,会返回一个整数,此整数代表删除操作所影响的行数
1. 在 UserInfoMapper.xml 中使用 delete 标签添加一条 delete 语句,代码如下。
<delete id="deleteWebsite" parameterType="string"> delete from website where name = #{name} </delete>
2. 在 UserInfoMapper 接口中增加一个 deleteUserInfo() 方法,代码如下。
int deleteUserInfo(String name); 参数为 String 类型的字符串 返回值为 int 类型,返回运行sql语句后,被删除记录的行数。
3. 测试代码
//删除 name 为"java265" 的记录 String name = "java265"; int i = userInfoMapper.deleteUserInfo(name); System.out.println("共删除了 " + i + " 条记录");
4. 运行测试代码,控制台输出以下信息---
共删除了 3 条记录
delete 标签常用属性
属性名称 | 描述 | 备注 |
---|---|---|
id | 它和 Mapper 的命名空间组合起来使用,是唯一标识符,供 MyBatis 调用 | 如果命名空间+ id 不唯一,那么 MyBatis 抛出异常 |
parameterType | 传入 SQL 语句的参数类型的全限定名或别名,它是一个可选属性。 | 支持基本数据类型和 JavaBean、Map 等复杂数据类型 |
flushCache | 该属性用于设置执行该操作后,是否会清空二级缓存和本地缓存,默认值为 true。 | - |
timeout | 该属性用于设置 SQL 执行的超时时间,如果超时,就抛异常。 | - |
statementType | 执行 SQL 时使用的 statement 类型, 默认为 PREPARED,可选值:STATEMENT,PREPARED 和 CALLABLE。 | - |
delete标签注意事项: 1.delete标签没有resultType 属性 2.delete标签也可传递多个参数信息
传递多个参数
同其它标签一样,Mybatis 为delete标签为映射器传递多个参数提供以下方法:
- 使用 Map 传递参数
- 使用注解传递参数
- 使用 JavaBean 传递参数
使用 Map 传递参数
将参数封装到一个 Map 对象中然后传递给 MyBatis 的映射器
1. 在 UserInfoMapper 接口中,定义一个 deleteUserInfoByMap() 方法,并使用 Map 传递参数
int deleteUserInfoByMap(Map<String, Object> params);
2.在 UserInfoMapper.xml 中使用 delete 标签定义一个 delete 语句,并接收通过 Map 传递的参数,xml文件如下所示
<!--通过 Map 传递参数,执行删除操作--> <delete id="deleteUserInfoByMap" parameterType="map"> delete from userInfo where name = #{name} and notes= #{notes} lt;/delete>
3. 测试代码如下。
//使用 Map 向 delete 标签传递参数 Map<String, Object> params = new HashMap<>(); params.put("name", "Java爱好者"); params.put("url", "www.java265.com"); int i = userInfoMapper.deleteUserInfoByMap(params); System.out.println("通过 Map 传递参数,共删除了 " + i + " 条记录");
4. 运行测试代码
通过 Map 传递参数,共删除了 1 条记录
使用注解传递参数
MyBatis框架提供的 @Param 注解为注解器传递参数,如下例所示:1. 在 UserInfoMapper 接口中,定义一个 deleteUserInfoByParam() 方法,并使用 @Param 注解传递参数,方法如下
int deleteUserInfoByParam(@Param("name") String name, @Param("notes") String notes);
2. 在 UserInfoMapper.xml 中使用 delete 标签定义一个 delete 语句,并接收通过 @Param 注解传递的参数,配置如下。
<!--通过 @Param 注解传递参数,执行删除操作--> <delete id="deleteUserInfoByParam" delete from userInfo where name = #{name} and notes= #{notes} lt;/delete>
3. 测试代码
//使用 @Param 注解传递参数 String name = "java265"; String url = "www.java265.com"; int i = userInfoMapper.deleteUserInfoByParam(name, url); System.out.println("通过 @Param 注解传递参数,共删除了 " + i + " 条记录");
4. 执行测试代码
通过 @Param 注解传递参数,共删除了 1 条记录
使用 JavaBean 传递参数
当参数过多时,笔者建议使用JavaBean实体类的方式将参数信息传递给映射器1. 在 UserInfoMapper 接口中,定义一个 deleteUserInfoByJavaBean() 方法,并使用 JavaBean 传递参数,方法如下。
int deleteUserInfoByJavaBean(UserInfo userInfo);
2. 在 UserInfoMapper.xml 中使用 delete 标签定义一个 delete 语句,并接收通过 JavaBean 传递的参数,配置如下。
<!--通过 JavaBean 传递参数,执行删除操作--> <delete id="deleteUserInfoByJavaBean" parameterType="com.java265.www.po.UserInfo"> delete from userInfo where name = #{name} and notes= #{notes} </delete>
3. 测试代码如下。
//使用 JavaBean 传递参数到更新语句中 UserInfo userInfo = new userInfo(); userInfo.setName("Java爱好者"); userInfo.setNotes("https://www.java265.com/"); int i = userInfoMapper.deleteUserInfoByJavaBean(website); System.out.println("通过 JavaBean 传递参数,共删除了 " + i + " 条记录");
4. 执行测试代码
通过 JavaBean 传递参数,共删除了 3 条记录
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。