Mybatis批量插入对象怎么拿到对象id

Mybatis批量插入对象怎么拿到对象id,第1张

对于支持自动生成主键的数据库(如SQL

Server),可以采用以下方式

<insert

id="xxx"

parameterType="yyy"

useGeneratedKeys="true"

keyProperty="id">

....

</insert>

对于不支持自动生成主键(如Oracle),可以采用以下方式:

<insert

id="xxx"

parameterType="yyy">

<selectKey

keyProperty="id"

resultType="long"

order="BEFORE">

select

my_seq.nextval

from

dual

</selectKey>

....

</insert>

1、对于支持生成自增主键的数据库:useGenerateKeys和keyProperty。

2、不支持生成自增主键的数据库:<selectKey>。

但是怎对批量插入数据返回自增主键的解决方式网上看到的还是比较少,至少百度的结果比较少。

Mybatis官网资料提供如下:

First, if your database supports auto-generated key fields (e.g. MySQL and SQL Server), then you can simply set useGeneratedKeys="true" and set the keyProperty to the target property and you're done. For example, if the Authortable above had used an auto-generated column type for the id, the statement would be modified as follows:

<insert id="insertAuthor" useGeneratedKeys="true"

keyProperty="id">

insert into Author (username,password,email,bio)

values (#{username},#{password},#{email},#{bio})

</insert>

If your database also supports multi-row insert, you can pass a list or an array of Authors and retrieve the auto-generated keys.

<insert id="insertAuthor" useGeneratedKeys="true"

keyProperty="id">

insert into Author (username, password, email, bio) values

<foreach item="item" collection="list" separator=",">

(#{item.username}, #{item.password}, #{item.email}, #{item.bio})

</foreach>

</insert>

从官网资料可以看出Mybatis是支持批量插入时返回自增主键的。(百度上说不支持的,多打脸 开玩笑的)

但是在本地测试的时候使用上述方式确实不能返回自增id,而且还报错(不认识keyProperty中指定的Id属性),然后在网上找相关资料。终于在Stackoverflow上面找到了一些信息。

解决办法:

1、升级Mybatis版本到3.3.1。

2、在Dao中不能使用@param注解。

3、Mapper.xml中使用list变量接受Dao中的集合。

参考地址:

http://stackoverflow.com/questions/18566342/mybatis-use-generated-keys-for-batch-insert

http://stackoverflow.com/questions/28453475/mybatis-getting-id-from-inserted-array-of-object-returns-error

https://github.com/mybatis/mybatis-3/pull/324

http://stackoverflow.com/questions/28453475/mybatis-getting-id-from-inserted-array-of-object-returns-error#

https://github.com/abel533/mybatis-3/blob/master/src/main/java/org/apache/ibatis/executor/keygen/Jdbc3KeyGenerator.java


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11766287.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-18
下一篇2023-05-18

发表评论

登录后才能评论

评论列表(0条)

    保存