轻量级前端框架助力开发者提升项目效率与性能
1543
2022-12-06
Mybatis插入时返回自增主键方式(selectKey和useGeneratedKeys)
目录Mybatis插入时返回自增主键Mybatis批量插入返回自增主键解决办法
Mybatis插入时返回自增主键
通过selectKey在插入操作前或者操作后获取key值,做为字段插入或返回字段。(此段代码获取的序列值id作为字段值插入到实体类中返回)
SELECT id FROM myTable
INSERT INTO myTable VALUES(#{id}, #{name})
useGeneratedKeys
如果数据库支持自增长主键字段(比如mysql、sql server)设置useGeneratedKeys=”true”和keyProperty="Id",id 是表的主键名,这样就可以插入主键id值
oracle则不支持自增长id,设置useGeneratedKey=”false”,如果设置true则会有报错信息。通过nextval函数,如SEQ_table.Nextval生成id
insert into cover(title,path,update_time)
values(#{title},#{path},#{update_time})
int addCover(Map
Mybatis批量插入返回自增主键
我们都知道Mybatis在插入单条数据的时候有两种方式返回自增主键:
1、对于支持生成自增主键的数据库:useGenerateKeys和keyProperty。
2、不支持生成自增主键的数据库:
但是怎对批量插入数据返回自增主键的解决方式网上看到的还是比较少,至少百度的结果比较少。
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:
keyProperty="id"> insert into Author (username,password,email,bio) values (#{username},#{password},#{email},#{bio})
keyProperty="id">
insert into Author (username,password,email,bio)
values (#{username},#{password},#{email},#{bio})
If your database also supports multi-row insert, you can pass a list or an arrayyndkRRogIA of Authors and retrieve the auto-generated keys.
keyProperty="id"> insert into Author (username, password, email, bio) values (#{item.username}, #{item.password}, #{item.email}, #{item.bio})
keyProperty="id">
insert into Author (username, password, email, bio) values
(#{item.username}, #{item.password}, #{item.email}, #{item.bio})
从官网资料可以看出Mybatis是支持批量插入时返回自增主键的。(百度上说不支持的,多打脸 开玩笑的)
但是在本地测试的时候使用上述方式确实不能返回自增id,而且还报错(不认识keyProperty中指定的Id属性),然后在网上找相关资料。终于在Stackoverflow上面找到了一些信息。
解决办法
1、升级Mybatis版本到3.3.1。
2、在Dao中不能使用@param注解。
3、Mapper.xyndkRRogIAml中使用list变量接受Dao中的集合。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~