【发布时间】:2017-11-15 01:57:03
【问题描述】:
使用注解@Options(useGeneratedKeys = true, keyProperty = "id") 获取生成的单次插入主键对我来说很好,但是当我使用注解@InsertProvider 进行批量插入时,我不知道如何要获得生成的主键,任何 cmets 都将不胜感激。提前谢谢
【问题讨论】:
标签: mybatis
使用注解@Options(useGeneratedKeys = true, keyProperty = "id") 获取生成的单次插入主键对我来说很好,但是当我使用注解@InsertProvider 进行批量插入时,我不知道如何要获得生成的主键,任何 cmets 都将不胜感激。提前谢谢
【问题讨论】:
标签: mybatis
现在Mybatis 3.3.1已经支持了。请看https://github.com/mybatis/mybatis-3/pull/547
【讨论】:
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Options;
import org.apache.ibatis.annotations.Param;
public interface TestMapper {
...
@Options(useGeneratedKeys = true, keyProperty = "id", keyColumn = "id")
@Insert({
"<script>",
"INSERT INTO test_table",
"(column_one, column_two)",
"VALUES" +
"<foreach item='item' collection='list' open='' separator=',' close=''>" +
"(" +
"#{item.columnOne,jdbcType=VARCHAR},",
"#{item.columnTwo,jdbcType=VARCHAR}" +
")" +
"</foreach>",
"</script>"})
void insertBatchTestTable(@Param("list") List<TestObject> testObjs);
}
ps.:
【讨论】:
mybatis我没用过注解,只有xml。但是,我同时使用了 useGeneratedKeys 和批量插入。
使用 Mybatis,您必须执行相同的查询(一个带有 useGeneratedKeys 的查询)并为集合中的每个对象重复调用插入。这会将生成的密钥映射到您的 pojo。每 N 条记录后刷新会话,并提交。
就是这样。我希望你没有使用 Oracle 作为你的数据库。因为,使用 Oracle,您必须在调用 insert 后刷新,这不符合批处理的目的。
【讨论】: