Mybatis(6)删除
1. 删除一个
- 编写mapper接口方法
void delete(int ids);
- 编写sql映射配置文件
<!-- 删除一个-->
<delete id="delete">
delete from tb_brand
where id=#{id}
</delete>
- 编写测试用例
@Test
public void testDelete() throws IOException {
//接收参数
int id=6;
//1.获取sqlSessionFactory对象
String resources ="mybatis-config.xml";
InputStream resourceAsStream = Resources.getResourceAsStream(resources);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
//2.获取SqlSession对象
// SqlSession sqlSession = sqlSessionFactory.openSession();
SqlSession sqlSession = sqlSessionFactory.openSession(true);
//3.获取mapper接口的处理对象
BrandMapper mapper = sqlSession.getMapper(BrandMapper.class);
//4.执行方法
// List<Brand> brands = mapper.selectByCondition(status, companyName, brandName);
mapper.delete(id);
// sqlSession.commit();
//5.释放资源
sqlSession.close();
}
2.删除多个
删除多个的话我们可以用where in(?,?,?)里面用占位符代替。
但是呢需要注意的是,这个数组里面的长度是不确定的,所以我们不知道里面有几个?
这里就可以使用mybatis提供的foreach标签了,就可以解决这个问题。
这里的collection是要遍历的对象,但是呢你在这里不能直接写传过来的参数。
<!--
mybatis会将数组参数,封装为一个map集合。
* 1.默认:array=数组
* 2.使用@Param注解改变map集合的默认key的名称
-->
所以第一种方法就是把要遍历的数组,collection里面写上map的key的名称,这里的separator是分隔符的意思,因为循环每次遍历id并没有分隔符。
<!-- 删除多个-->
<delete id="deleteByIds">
delete from tb_brand
where id in
<foreach collection="array" item="id" separator=",">
#{id}
</foreach>
</delete>
- 第二种就是使用Param注解改变map集合的默认key的名称。
void deleteByIds(@Param("ids") int[] ids);
这里还有两个属性说一下,open属性是在for循环开始的时候拼一个什么,close就是在结束的时候拼一个什么。
<!-- 删除多个-->
<delete id="deleteByIds">
delete from tb_brand
where id in
<foreach collection="ids" item="id" separator="," open="(" close=")">
#{id}
</foreach>
</delete>