1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > Mybaits批量插入且返回主键ID

Mybaits批量插入且返回主键ID

时间:2020-06-22 17:27:25

相关推荐

Mybaits批量插入且返回主键ID

Mybaits批量插入

MyBatis从3.3.1版本开始支持批量添加记录并返回各记录主键字段值。只需配置useGeneratedKeys,keyProperty。

useGeneratedKeys

设置useGeneratedKeys参数值为true,在执行添加记录之后可以获取到数据库自动生成的主键ID。keyProperty

指定主键名

使用说明

Mapper.xml

<!-- 新增并且返回自增长ID user.getId() --><insert id="batchInsert" useGeneratedKeys="true" keyProperty="id">insert into user (name,age,create_time)values<foreach collection="list" item="item" separator=",">(#{item.name, jdbcType=VARCHAR},#{item.age, jdbcType=INTEGER},sysdate())</foreach></insert>

Mapper

@Mapperpublic interface UserMapper {Integer batchInsert(List<User> list);}

Junit测试类

@SpringBootTest@Slf4jclass UserMapperTest {@AutowiredUserMapper userMapper;@Testvoid batchInsert() {User userA = User.builder().name("双十一").age(2).build();User userB = User.builder().name("双十二").age(1).id(1).build();List<User> params = Lists.newArrayList(userA, userB);// rows 添加操作返回记录数int rows = userMapper.batchInsert(params);log.info(" rows = {}, params = {} ", rows, params);//user.getId() 获取生成主键IDUser u = params.get(0);log.info("id = {}, name = {} ", u.getId(), u.getName());}}

执行结果

rows = 2, params = [User(id=7, name=双十一, age=5, createTime=null), User(id=8, name=双十二, age=6, createTime=null)]

id = 7, name = 双十一

MyBatis源码参考

PreparedStatementHandler

@Overridepublic int update(Statement statement) throws SQLException {PreparedStatement ps = (PreparedStatement) statement;//执行SQLps.execute();//返回记录数int rows = ps.getUpdateCount();Object parameterObject = boundSql.getParameterObject();KeyGenerator keyGenerator = mappedStatement.getKeyGenerator();//处理主键idkeyGenerator.processAfter(executor, mappedStatement, ps, parameterObject);return rows;}

参考文档

深入浅出mybatis之返回主键ID

github: my-spring-boot

分支: data-mybaits

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。