MyBatis的批量添加
先附上本次的代码:
mapper层
//批量增加:增加两个人
public void inserts(List<User> userList);
mapper.xml
<insert id="inserts" parameterType="java.util.List">
INSERT INTO
`user`(`username`,`birthday`,`sex`,`address`)
VALUES
<foreach collection="list" item="user" separator=",">
(#{user.username} ,#{user.birthday} ,#{user.sex} ,#{user.address})
</foreach>
</insert>
Test测试类
public class UserTest {
//面向接口编程,创建私有成员变量工厂类
private SqlSessionFactory sqlSessionFactory;
@Before
public void upSet() {
try {
//先解析SqlMapConfig.xml文件
InputStream stream = Resources.getResourceAsStream("SqlMapConfig.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(stream);
} catch (IOException e) {
e.printStackTrace();
}
}
@Test
public void insertBatch() {
SqlSession sqlSession = sqlSessionFactory.openSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
UserVo userVo = new UserVo();
List<User> list = new ArrayList<>();
list.add(new User("张三", new Date(), "男", "山东"));
list.add(new User("李四", new Date(), "女", "河北"));
list.add(new User("王五", new Date(), "男", "北京"));
userVo.setElements(list);
//userMapper.insert(userVo);
userMapper.inserts(list);
}
}
总结
- 批量添加有两种方式:一种是批量循环values,另一种则是循环sql语句
但这些的前提都是要配置一个变量,在数据库连接池的url后面
allowMultiQueries=true
总体是这样:
jdbc.url=jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8&serverTimezone=GMT%2B8&allowMultiQueries=true
- 第一种:mapper.xml的分隔符要用,最终形成的sql语句是这样
INSERT INTO `user`(`username`,`birthday`,`sex`,`address`) VALUES (? ,? ,? ,?) , (? ,? ,? ,?) , (? ,? ,? ,?)
- 第二种:分隔sql语句的分隔符要用;为了能让传入的sql语句被数据库识别,
重点
如果不在url后面进行配置,则无法运行