mybatis获取新增记录的主键

最近项目中有个需求,需要在新增一条记录后返回该记录的主键,查了下资料,用mybatis可以做

我需要拿第一个方法执行返回的id作为变量传给下面,数据库中该id是记录主键,并且数据库用的是主键自增长,这是前提。

有两种方式:

第一种方式写法如下:

主要是<selectKey>标签,下面是正常的insert语句的写法,<selectKey>是有resultType属性的,因为insert语句没有这个属性,而且insert语句的正常返回值是新增记录的条数,并不是主键id,要注意。<selectKey>的keyProperty属性填写的就是新增记录的主键id对应的javabean的属性,新增完记录后,将会将新增记录的id赋值给keyProperty对应的属性,需要保证该属性有get/set方法,我这里的id就是CmsBanner类的一个属性,下面的record对象就是CmsBanner的实例。order=AFTER表示先执行插入语句再执行查询语句,LAST_INSERT_ID表示查询最后插入的记录的主键id,修改代码如下:

注意不要直接接受insert语句执行的结果,insert语句执行的结果返回的是新增记录数!!!

执行完后,mybatis会自动将新增记录的主键复制给record的id属性

第二种方式:

useGeneratedKeys="true" 表示给主键设置自增长
keyProperty="userId" 表示将自增长后的Id赋值给实体类中的userId字段。
parameterType="com.chenzhou.mybatis.User" 这个属性指向传递的参数实体类

这里提醒下,<insert></insert> 中没有resultType属性,不要乱加。

实体类中uerId 要有getter() and setter(); 方法

mybatis中的一些小常识:

1.mybatis的update语句返回的并不是受影响的行数!!返回的是匹配的行数,有可能出现返回值为1,但数据库中记录未发生变化的情况。

解决方案:在数据库连接url后缀追加userAffectRows=true

userAffectRows:表示是否用受影响的行数替代匹配查找到的行数来返回数据,也就是查找到了,但不一定真正修改了,在musql中默认设置为false,所以这里把这个字段设置为true,返回受影响的行数即可;

2.mybatis执行insert后的方法返回值并不是新增记录的主键!!!!在MyBatis中执行添加操作时只会返回当前添加的记录数。

猜你喜欢

转载自blog.csdn.net/leaves_story/article/details/89185913
今日推荐