MyBatis学习笔记(二)——批量添加以及自增主键
2016-08-10 16:13
363 查看
今天要修改一个方法
public int add(MemberInsertDto insertDto) {
Member member = newMemberInstance(dto);
//获得自增生成的会员id
long mid = member.getId();
insertDto.setMemberId(mid);
return memberDao.insertContractInfo(newContractInfoInstance(insertDto)) &
memberDao.insertOrgAttribute(newOrgAttributeInstance(insertDto));
}这个方法的作用是添加一条新的Member记录及与其相关的各表记录(contract_info && org_attribute),@param MemberInsertDto 是这三个表的包装类。 现在修改了需求,我需要对这些记录进行批量插入,而不仅仅只是插入一条。
原自增主键的获得方法是这样的:
<insert id="insertMember" parameterType="java.util.List" userGeneratedKeys="true" keyProperty="id">
INSERT INTO bs_member(name, age, payer, birthday, email, create_time)
VALUES (#{name}, #{age}, #{payer}, #{birthday}, #{email}, now())
</insert>首先添加批量插入功能
<foreach>中的属性:
item:迭代时当前指向的对象
collection:传入的参数类型
separator:每个foreach间的sql间隔
index:在list和数组中,index是元素的序号,在map中,index是元素的key
int add(List<MemberInsertDto> insertDtoList);
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.executor.ExecutorException: Error getting generated key or setting result to parameter object. Cause: org.apache.ibatis.binding.BindingException: Parameter 'id' not found. Available
parameters are [list]
即自增主键无法添加,修改成另一种自增主键方式就成功了,具体两种方法的区别是什么没有查到,希望能够得到解答
<insert id="insertMember" parameterType="java.util.List">
<selectKey resultType ="java.lang.Long" keyProperty= "id" order= "AFTER">
SELECT LAST_INSERT_ID()
</selectKey >
INSERT INTO bs_member(name, age, payer, birthday, email, create_time)
VALUES
<foreach collection="list" item="member" index="index" separator=",">
(#{member.name}, #{member.age}, #{member.payer}, #{member.birthday}, #{member.email}, now())
</foreach>
</insert>该方法能够成功添加数据,然而有个问题,因为我想要做的是多表联合的批量插入,需要的是插入之后自动返回主键给Member的id值,暂时在我这里是无法解决的,因为我发现在批量插入时自增长的id值是无法返回的。
难道在这样的需求下只能对数据进行一条一条的插入么,这效率确实是太低了。
public int add(MemberInsertDto insertDto) {
Member member = newMemberInstance(dto);
//获得自增生成的会员id
long mid = member.getId();
insertDto.setMemberId(mid);
return memberDao.insertContractInfo(newContractInfoInstance(insertDto)) &
memberDao.insertOrgAttribute(newOrgAttributeInstance(insertDto));
}这个方法的作用是添加一条新的Member记录及与其相关的各表记录(contract_info && org_attribute),@param MemberInsertDto 是这三个表的包装类。 现在修改了需求,我需要对这些记录进行批量插入,而不仅仅只是插入一条。
原自增主键的获得方法是这样的:
<insert id="insertMember" parameterType="java.util.List" userGeneratedKeys="true" keyProperty="id">
INSERT INTO bs_member(name, age, payer, birthday, email, create_time)
VALUES (#{name}, #{age}, #{payer}, #{birthday}, #{email}, now())
</insert>首先添加批量插入功能
<foreach>中的属性:
item:迭代时当前指向的对象
collection:传入的参数类型
separator:每个foreach间的sql间隔
index:在list和数组中,index是元素的序号,在map中,index是元素的key
int add(List<MemberInsertDto> insertDtoList);
<insert id="insertMember" parameterType="java.util.List"<span style="font-family: Arial, Helvetica, sans-serif;"> userGeneratedKeys="true" keyProperty="id"</span>> INSERT INTO bs_member(name, age, payer, birthday, email, create_time) VALUES <foreach collection="list" item="member" index="index" separator=","> (#{member.name}, #{member.age}, #{member.payer}, #{member.birthday}, #{member.email}, now()) </foreach> </insert>测试发现报错
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.executor.ExecutorException: Error getting generated key or setting result to parameter object. Cause: org.apache.ibatis.binding.BindingException: Parameter 'id' not found. Available
parameters are [list]
即自增主键无法添加,修改成另一种自增主键方式就成功了,具体两种方法的区别是什么没有查到,希望能够得到解答
<insert id="insertMember" parameterType="java.util.List">
<selectKey resultType ="java.lang.Long" keyProperty= "id" order= "AFTER">
SELECT LAST_INSERT_ID()
</selectKey >
INSERT INTO bs_member(name, age, payer, birthday, email, create_time)
VALUES
<foreach collection="list" item="member" index="index" separator=",">
(#{member.name}, #{member.age}, #{member.payer}, #{member.birthday}, #{member.email}, now())
</foreach>
</insert>该方法能够成功添加数据,然而有个问题,因为我想要做的是多表联合的批量插入,需要的是插入之后自动返回主键给Member的id值,暂时在我这里是无法解决的,因为我发现在批量插入时自增长的id值是无法返回的。
难道在这样的需求下只能对数据进行一条一条的插入么,这效率确实是太低了。
相关文章推荐
- mybatis学习笔记 一对一 和一对多 以及 如何通过框架直接返回主键id
- Mybatis学习笔记一:环境搭建以及简单使用
- No.1 iOS---UI学习第一天(笔记)(以及为什么模拟器上不显示我们添加的控件的解决办法)
- 学习笔记:Unity战斗卡牌游戏(二)-----滑动列表及克隆删除对象以及代码添加脚本
- JavaWeb学习笔记-mybatis-05-添加用户
- 430的VS2015单文档MFC学习笔记之创建以及添加按钮
- mybatis 增删改查、批量插入和删除以及自动生成uuid主键和分页
- MyBatis-Spring 学习笔记一 SqlSessionFactoryBean以及映射器类
- mybatis学习笔记-实现添加修改删除用户功能
- Hibernate 学习笔记-1-3(Hibernate的基本映射以及几种主键生成策略的测试)
- MyBatis学习笔记-04.MyBatis实现简单的增删改查以及事务的问题
- springMVC+Mybatis 学习笔记-【3】Mybatis【批量别名定义】和【类型处理器】
- mybatis 增删改查、批量插入和删除以及自动生成uuid主键和分页
- Git学习笔记(4)——添加远程仓库,克隆远程库,以及库的推送
- python学习笔记-批量添加OC文件前缀
- Android开发学习笔记:为动态添加的Spinner控件绑定数据源以及监听事件
- 【Mybatis学习】Mybatis简单增删改查以及批量操作
- springboot学习笔记-2 一些常用的配置以及整合mybatis
- MyBatis学习笔记(一)——配置文件中的别名以及mapper中的namespace
- Mybatis学习笔记四 查询数据与添加数据