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中执行添加操作时只会返回当前添加的记录数。

  • 8
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatis中,当我们向数据库插入一条记录时,可以通过以下步骤来获取返回的: 1. 首先,需要在Mapper.xml文件中设置生成策略。可以使用数据库自动生成的方式,如MySQL的自增长,或者使用插入语句返回的方式。 2. 在Mapper.xml文件中,使用`<insert>`标签定义插入语句,并设置对应的生成策略。例如,可以在`<insert>`标签内添加`useGeneratedKeys="true"`来开启使用数据库自动生成的功能,或者添加`keyColumn`和`keyProperty`属性来指定返回的列名和实体类中表示的属性名。 3. 在Java代码中,调用MyBatis的`insert`方法来执行插入操作。可以使用`org.apache.ibatis.session.SqlSession`接口提供的`insert`方法,传入对应的Mapper方法和插入的实体对象。 4. 在插入完毕后,可以通过实体对象中的属性来获取返回的值。如果`keyProperty`属性正确设置,MyBatis会自动将返回的值设置到实体对象的对应属性中。 例如,在Mapper.xml中可以有如下定义: ```xml <insert id="insertUser" useGeneratedKeys="true" keyProperty="id"> INSERT INTO user (username, password) VALUES (#{username}, #{password}) </insert> ``` 在Java代码中可以这样使用: ```java User user = new User(); user.setUsername("test"); user.setPassword("123456"); sqlSession.insert("UserMapper.insertUser", user); System.out.println("新增值为:" + user.getId()); ``` 以上是一种常见的获取返回的方法,具体可根据实际情况来选择合适的方式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值