一、删除

  • 删除一个
  • 批量删除

(一)删除一个

  • 编写接口方法: Mapper接口 : void deleteById(int id);
  • 参数:id
  • 结果: void
  • 编写SQL语句: SQL映射文件
  • 执行方法,测试

1、编写接口方法: Mapper接口

/**
     * 根据id删除
     *
     */
    void deleteById(int id);

2、编写SQL语句: SQL映射文件

<!--删除一个-->
    <delete id="deleteById">
        delete from tb_brand where id = #{id};
    </delete>

3、 执行方法,测试

/**
     * 删除
     * 根据id,删除一个
     */
    @Test
    public void testDeleteById() throws IOException {
        //接受参数
        int id = 7;

        //1、加载核心配置文件,获取SqlSessionFactory对象
        String resource = "mybatis-config.xml"; //定义配置文件
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        //2、获取SqlSession对象,执行SQL语句
        SqlSession sqlSession = sqlSessionFactory.openSession(true);


        //3、执行sql
        //List<User> users = sqlSession.selectList("test.selectAll");

        //3.1 通过SqISession的getMapper方法获取Mapper接口的代理对象
        BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);

        //3.2 调用对应方法完成sql的执行
        brandMapper.deleteById(id);

        //4、释放资源
        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、 执行方法,测试

/**
     * 删除
     * 根据id,删除一个
     */
    @Test
    public void testDeleteByIds() throws IOException {
        //接受参数
        int[] ids = {3,5,6};

        //1、加载核心配置文件,获取SqlSessionFactory对象
        String resource = "mybatis-config.xml"; //定义配置文件
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        //2、获取SqlSession对象,执行SQL语句
        SqlSession sqlSession = sqlSessionFactory.openSession(true);


        //3、执行sql
        //List<User> users = sqlSession.selectList("test.selectAll");

        //3.1 通过SqISession的getMapper方法获取Mapper接口的代理对象
        BrandMapper brandMapper = sqlSession.getMapper(BrandMapper.class);

        //3.2 调用对应方法完成sql的执行
        brandMapper.deleteByIds(ids);

        //4、释放资源
        sqlSession.close();

    }