Mybatis(6)删除

1. 删除一个

  1. 编写mapper接口方法
    void delete(int ids);
  1. 编写sql映射配置文件
<!--    删除一个-->
    <delete id="delete">
        delete from  tb_brand
        where id=#{id}
    </delete>
  1. 编写测试用例
  @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>
  1. 第二种就是使用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>
posted @ 2022-03-30 09:17  长情c  阅读(169)  评论(0)    收藏  举报