使用注释@Options(useGeneratedKeys = true,keyProperty =" id")来获取单个插入的生成主键对我来说很好,但是当我使用注释@InsertProvider进行批量插入时,我不知道如何获得生成的主键,任何评论将不胜感激。 thx提前
答案 0 :(得分:1)
现在Mybatis 3.3.1支持它了。请参阅https://github.com/mybatis/mybatis-3/pull/547
答案 1 :(得分:1)
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。:
答案 2 :(得分:0)
我没有使用mybatis的注释,只有xml。但是,我已经同时使用了useGeneratedKeys和批量插入。
使用Mybatis,您必须执行相同的查询(一个使用useGeneratedKeys)并为集合中的每个对象重复调用插入。这会将生成的密钥映射到您的pojo。每N个记录后刷新会话,然后提交。
就是这样。我希望你没有使用Oracle作为你的数据库。因为,对于Oracle,您必须在调用insert之后进行刷新,这样才能实现批处理。