开发者社区 问答 正文

Mybatis执行批量插入,能返回数据库主键列表吗?

Mybatis执行批量插入,能返回数据库主键列表吗?

展开
收起
wangwell 2021-11-01 14:59:50 1715 分享 版权
阿里云 AI 助理回答

在MyBatis中执行批量插入操作时,直接获取返回的数据库主键列表的功能并不直接内置。但您可以通过以下方式实现这一需求:

  1. 配置映射文件:首先确保您的Mapper XML文件中的插入语句配置了useGeneratedKeys="true"以及设置了keyProperty来指定实体类中用于接收生成主键值的属性。对于单条插入这很直接,例如:

    <insert id="insertUser" parameterType="User" useGeneratedKeys="true" keyProperty="userId">
     INSERT INTO users(userName, height, score) VALUES (#{userName}, #{height}, #{score})
    </insert>
    

    但对于批量插入,MyBatis原生并不直接支持批量插入后立即获取所有生成的主键。

  2. 逐条插入并收集主键:如果需要批量插入的同时获取所有主键,一种可行的方法是改用循环单条插入,每次插入后通过SqlSessioninsert方法(当配置了useGeneratedKeys="true")可以获取到单个插入后生成的主键,并收集这些主键到一个列表中。

  3. 自定义存储过程或SQL:另一种更高效的方式是利用数据库的特性,比如在MySQL中可以通过编写存储过程来实现批量插入并返回所有生成的主键,然后在MyBatis中调用这个存储过程。这样可以在数据库层面一次性完成批量操作并返回所需信息,但这种方式依赖于具体数据库的支持和额外的数据库编程工作。

  4. 后查询:如果数据库不支持通过批量插入直接返回主键列表,还可以采取先批量插入数据,然后执行一个查询来获取最后插入的那些记录的主键。这种方法的缺点是需要额外的查询开销,并且在高并发场景下可能因时间差导致数据不准确。

综上所述,虽然MyBatis本身对批量插入直接返回主键列表的支持有限,但通过上述变通方案,您可以根据实际需求和数据库特性选择合适的方法来实现这一功能。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答