MyBatis之sql批量操作CRUD
先放流程分析:
bean类:
public class User {
private Long id;
private String username;
private String password;
private String nickname;
private Integer age;
//Getter,Setter方法和toString...
}
beanMapper接口:
public interface UserMapper {
void saveBatch(List<User> list);//批量新增
void deleteBatch(List<Long> ids);//批量删除
...
}
BeanMapper.xml映射文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.zhengqing.mybatis._02batchOption.UserMapper"> <!--全限定mapper名-->
<!-- 写sql:注意sql语句要和Dao层接口方法对应! -->
<insert id="saveBatch" parameterType="list">
INSERT into user(username,password,age) VALUES
<!-- collection="list":遍历的集合 index:索引 item:每次遍历得到的对象 open:以什么开始 close:以什么关闭 separator:分隔符 -->
<foreach collection="list" item="user" separator=",">
(#{user.username},#{user.password},#{user.age})
</foreach>
</insert>
<!-- void deleteBatch(List<Long> ids);-->
<delete id="deleteBatch" parameterType="list">
<!-- DELETE from user where id in(2,3,4,5) -->
<!-- collection="list":遍历的集合 index:索引 item:每次遍历得到的对象 open:以什么开始 close:以什么关闭 separator:分隔符 -->
DELETE from user where id in
<foreach collection="list" item="id" open="(" close=")" separator=",">
#{id}
</foreach>
</delete>
</mapper>
测试类:
public class UserMapperTest {
@Test
public void deleteBatch() {
SqlSession sqlSession=null;
try {
sqlSession= MybatisUtil.getSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
/* List<Long> list=new ArrayList<>();
list.add(1L);
list.add(2L);*/
userMapper.deleteBatch(Arrays.asList(57L,58L,59L,60L));
sqlSession.commit();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (sqlSession != null) {
sqlSession.close();
}
}
}
}
注意:mybatis-config.xml核心配置文件中引入映射文件
<!-- 批量操作 -->
<mapper resource="com/zhengqing/mybatis/_02batchOption/UserMapper.xml"/>