mybatis中使用selectKey,返回结果一直是1

摘要:
selectKey在Mybatis中使用,返回的结果总是1。结合此问题,请注意selectKey标记和问题的原因。首先,说出要求。将记录插入数据库。表ID自增加。插入后,将返回插入记录的ID。下面是插入的sql12插入竞争对手(竞争_

mybatis中使用selectKey,返回结果一直是1,结合这个问题,笔记一下selectKey标签以及问题的原因

先说需求,向数据库插入一条记录,表的id是自增的,插入以后返回插入记录的id

下面是xml文件中的插入的sql

1 <insert id="insertCompete" parameterType="CompetesWithBLOBs">
2      insert into competes(compete_title,compete_about,compete_integral,issue_date)
3      values(#{competeTitle},#{competeAbout},#{competeIntegral},#{issueDate})
4         
5     <selectKey keyColumn="compete_id" keyProperty="competeId" order="AFTER"
6      resultType="int">
7       select last_insert_id()
8     </selectKey>
9 </insert>

上面插入的内容就不说了,直接说<selectKey>

keyColumn:插入数据以后,要返回的内容在数据表中对应的字段名称(这里返回的是插入记录的id(对应数据表中的名称为compete_id))

keyProperty:指定返回的id映射到bean中的哪个属性(这里是competeId),这个bean对应的类的名称就是上面insert标签中的属性parameterType的值,

order=”AFTER”:表示这个selectKey语句的执行是在insert语句之后

resultType:selectKey语句返回值的类型,我这里是int类型

下面说一下为什么执行这个sql后,一直返回1,而不是我们期望的id,先看一下调用代码

1 Integer result = competesMapperCustom.insertCompete(compete);
2 Integer competeId = compete.getCompeteId();

我插入数据时插入的是一个bean,这个bean的类型就是上面我们提到的parameterType的值,插入前它的id是空,

当我们执行插入后,返回插入的结果result,插入成功result=1,插入失败result=0,这就是为什么结果一直为1了,因为返回的结果根本不是我们需要的id,返回的id其实已经映射到了我们插入的bean中,我们只要通过它的get方法就可以得到了:compete.getCompeteId();

嘴笨,有点啰嗦了!

免责声明:文章转载自《mybatis中使用selectKey,返回结果一直是1》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇GoLang基础数据类型---&amp;gt;字符串处理大全App接口如何保证安全下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

LocalDatetime 与 mybatis、json的坑

总所周知,localdatetime是jdk8 推出的关于日期计算非常方便地一个类,一旦开始用上就欲罢不能。但是在使用的时候,坑还是蛮多的。 一、mybatis与LocalDatetime 如果直接将实体里面所有的Date类型换成LocalDatetime之后,运行程序是会报异常的。此时,可以加入以下依赖: <dependency> <...

Mybatis中接口和对应的mapper文件位置配置深入剖析

首先要说明的问题是,Mybatis中接口和对应的mapper文件不一定要放在同一个包下,放在一起的目的是为了Mybatis进行自动扫描,并且要注意此时java接口的名称和mapper文件的名称要相同,否则会报异常,由于此时Mybatis会自动解析对应的接口和相应的配置文件,所以就不需要配置mapper文件的位置了。 1. 接口和文件在同一个包中 1.1...

【Mybatis】【9】ResultMap支持继承

前言:ResultMap是让XML中SQL语句的返回值可以映射到实体类 正文: 1,实体类 Basic(名字随便取的) public classBasic { privateString id; publicString getId() { returnid; } public voidsetId(Str...

MyBatis与Spring MVC结合时,使用DAO注入出现:Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required

错误源自使用了这个例子:http://www.yihaomen.com/article/java/336.htm,如果运行时会出现如下错误: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: Property 'sqlSessi...

SpringMVC2

1       SpringMVC架构 1.1     Spring web mvc介绍 Spring web mvc和Struts2都属于表现层的框架,它是Spring框架的一部分,我们可以从Spring的整体结构中看得出来: 1.2     Web MVC mvc设计模式在b/s系统下应用: 1、  用户发起request请求至控制器(Contro...

MyBatis模糊查询和多条件查询

一、ISmbmsUserDao层 //根据姓名模糊查询 public List<Smbms> getUser(); //多条件查询 public List<Smbms> getLikeUser(@Param("userName") String userName , @Param("userCode"...