mybatis insert 返回主键 的before 和after的区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mybatis insert 返回主键 的before 和after的区别相关的知识,希望对你有一定的参考价值。

如果设置为 BEFORE,那么它会首先选择主键,设置 keyProperty 然后执行插入语句。如果设置为 AFTER,那么先执行插入语句,然后是 selectKey 元素-这和如 Oracle 数据库相似,可以在插入语句中嵌入序列调用。 参考技术A 期望结果:插入用户并获得插入后的主键ID
下面是配置信息:想要insert 后 返回ID

1、mybatis userMapper.xml

2、打印影响行,和返回主键ID

3、

结果却很出乎意料, ID是null, 影响行:是负值

换了各种方式测试, 比如
(1)order="BEFORE" selectKey= select last_insert_id(), 结果 id=0, r=-2147482646
(2)order="BEFORE" selectKey= select 23 ,结果id=23 , r=-2147482646
(3) order = "AFTER" selectkey = select 23 , 结果id=null r=同上本回答被提问者采纳

mybatis insert 之后,返回主键为null,我的配置如下

<insert id="addProject" parameterType="Project" flushCache="true">

insert into project(project_name,project_number,Project_start_date,Project_end_date,project_act_start_date,Project_act_end_date,Project_status,Project_description,Project_note)
values(#projectName,#projectNumber,#projectStrDate,#projectEndDate,#projectActStrDate,#projectActEndDate,#projectStatus,#projectDes,#projectNote)
<selectKey keyProperty="projectId" resultType="java.lang.Integer" order="AFTER" >
SELECT LAST_INSERT_ID()
</selectKey>
</insert>

执行玩insert之后 在dao层里调用project.getProjectId() 结果是null 请问怎么回事?

配置了一个光驱,符号为g 参数/d:drive1为光驱身份号,须与config.sys中的符号一致,可有多个/d:mscd000/d:mscd001 以acdsee.exe主键为例:右边有2个字符串,默认对应的是这个程序的绝对路径,而path对应的是这个程序所处的目录。 参考技术A selectKey配置节中语句改成:
SELECT LAST_INSERT_ID() AS projectId
就行了,希望能帮到你
参考技术B 连接断开了?

在这个框架内,可能是不同的连接完成不同的工作的。

以上是关于mybatis insert 返回主键 的before 和after的区别的主要内容,如果未能解决你的问题,请参考以下文章

mybatis insert 返回主键 的before 和after的区别

mybatis insert 之后,返回主键为null,我的配置如下

Mybatis Insert 返回主键ID

mybatis 实现 insert 语句返回 主键

mybatis insert 如何返回主键

mybatis的insert返回主键