Mybatis动态SQL批量删除之数据库不更新问题

    在学习mybatis的过程中,用动态SQL语句foreach标签来实现批量删除时,相关代码如下:

 <delete id="deleteMoreByArray">
        delete from t_emp where eid in
             <!-- separator 分隔符 -->
             <foreach collection="eids" item="eid" separator="," open="(" close=")">
                #{eid}
            </foreach>
    </delete>

接口中的方法:

 // 通过数组实现批量删除
    int deleteMoreByArray(@Param("eids") Integer[] eids);

测试方法:

 @Test
    public void testDeleteMoreByArray(){
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        DynamicSQLMapper mapper = sqlSession.getMapper(DynamicSQLMapper.class);
        int result=  mapper.deleteMoreByArray(new Integer[]{13});
        System.out.println(result);
    }

运行时没有错误,但是打开数据库时会发现数据库中的数据没有刷新,可能是因为事务未提交导致无法刷新,所以只需手动提交事务即可,在测试方法中添加如下代码:

sqlSession.commit();

完整的测试代码如下:

 @Test
    public void testDeleteMoreByArray(){
        SqlSession sqlSession = SqlSessionUtils.getSqlSession();
        DynamicSQLMapper mapper = sqlSession.getMapper(DynamicSQLMapper.class);
        int result=  mapper.deleteMoreByArray(new Integer[]{13});
        sqlSession.commit();
        System.out.println(result);
    }

或者在SqlSessionUtils中设置自动开启事务

 // 自动提交事务
       sqlSession = sqlSessionFactory.openSession(true);

完整代码如下所示:

 public static SqlSession getSqlSession(){
        SqlSession sqlSession=null;
        try {
            InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
            SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
            SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
            // 自动提交事务
            sqlSession = sqlSessionFactory.openSession(true);

        } catch (IOException e) {
            e.printStackTrace();
        }
        return sqlSession;
    }

猜你喜欢

转载自blog.csdn.net/m0_57721846/article/details/132942803