一、删除
(一)删除一个
- 编写接口方法: Mapper接口 : void deleteById(int id);
- 参数:id
- 结果: void
- 编写SQL语句: SQL映射文件
- 执行方法,测试
1、编写接口方法: Mapper接口
void deleteById(int id);
2、编写SQL语句: SQL映射文件
<!--删除一个-->
<delete id="deleteById">
delete from tb_brand where id = #{id};
</delete>
3、 执行方法,测试
@Test
public void testDeleteById() throws IOException {
int id = 7;
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession(true);
BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);
brandMapper.deleteById(id);
sqlSession.close();
}
(二)批量删除
- 编写接口方法: Mapper接口
- 参数:id数组
- 结果: void
- 编写SQL语句: SQL映射文件
- 执行方法,测试
1、编写接口方法: Mapper接口 把需要删除的记录的id放到一个数组中,遍历数据库中的表进行删除。
void deleteByIds(int[] ids);
2、编写SQL语句: SQL映射文件 因为id放到了一个数组中,在编写SQL删除语句的时候可以写成:delete from tb_brand where id in (?,?,?),用占位符表示传入的数值,用in表示id在这些数值里面。
但是,要删除的个数是不确定的,也就是数组的长度是不确定的,就无法用几个占位符表示有几个。
所以我们应该先知道数组的长度是多少。 提供了foreach标签来完成数组的遍历
foreach标签
where id in (
<foreach collection="array" item="id" separator=",">
#{id}
</foreach>
);
collection:要遍历哪个数组。 需要注意的是: mybatis会将数组参数封装成一个Map集合 collection后面默认写array 也可以使用@Param注解改变map集合的默认key的名称
void deleteByIds(@Param("ids") int[] ids);
<foreach collection="ids" item="id" separator="," open="(" close=")">
#{id}
</foreach>
item:遍历出来的每一个元素 #{id}为占位符,遍历几次就有几个“?”
separator:如果遍历了三次,就有三个占位符,它们之前是没有分开的,SQL语法报错,所以添加separator分隔符,用逗号分开。
在上述SQL语句中,in后面的括号可以进行优化,把括号去掉,在foreach标签里用open="(" 和 close=")",表示遍历开始加一个左括号,遍历结束加一个右括号。
where id in
<foreach collection="array" item="id" separator="," open="(" close=")">
#{id}
</foreach>
3、 执行方法,测试
@Test
public void testDeleteByIds() throws IOException {
int[] ids = {3,5,6};
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession(true);
BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);
brandMapper.deleteByIds(ids);
sqlSession.close();
}
|