在学习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;
}