MyBatis插入数据返回主键

在MyBatis中,通过设置xml的insert语句useGeneratedKeys为true,可以获取自增主键值。当对应MySQL表的id自增且实体类有get、set方法时,插入数据后,虽然Service层的insert方法返回影响行数,但实体类的userId字段会被填充为主键ID。此方法不适用于Oracle数据库。

Service层:

public int addUser(UserDomian user){
    int i = userMapper.insert(user);
}

xml:

<insert id="insert" parameterType="....UserDomain">
    insert into t_user(user_name,password)
    values
    (#{userName},#{password})
</insert>

这样userMapper的insert方法成功插入之后返回值为影响行数,也就是1。而且插入之后userDomain实体类的userId为null。
我们都知道在MyBatis中,xml的insert语句中将useGeneratedKeys指定为true,那么返回之后就会得到新增的主键值,具体写法如下:

<insert id="insert" parameterType="....UserDomain" useGeneratedKeys="true" keyProperty="userId">
    insert into t_user(user_name,password)values(#{userName},#{password})
</insert>

前提条件是对应的mysql表中id必须是自增的,并且对应的UserDomain实体类中有get、set方法,而且只适用于与mySql数据库,Oracle数据库不支持。

但是这样设置之后,在service层打断点,插入成功之后UserDomain确实和之前不一样,他的userId不再是null了,而是具体的主键id值,但是usetMapper的insert方法的返回值依然是1,也就是插入的影响行数。

也就是说,这样设置,mapper接口返回值依然是成功插入的记录数,但不同的是主键值已经赋值到领域模型实体的id中了

MyBatis是一款基于Java的持久层框架,它的设计理念是将数据库操作与具体的SQL语句解耦,通过XML或注解的方式来配置SQL语句,并提供了强大的映射功能,能够将查询结果映射为Java对象。 在MyBatis中,插入数据返回主键有多种方式,其中比较常用的方式是使用数据库的自主键。下面是在MyBatis插入数据返回主键的源码解析: 1. 配置SQL语句:在XML文件或注解中配置插入SQL语句,并设置useGeneratedKeys属性为true,以启用主键返回功能。 2. 执行插入操作:通过MyBatis的SqlSession对象调用插入方法,传入SQL语句的参数。 3. SQL语句解析:MyBatis会根据配置的SQL语句解析生成相应的PreparedStatement对象。 4. 执行插入操作并返回主键MyBatis会通过PreparedStatement的executeUpdate方法执行插入操作,并获得影响的行数。如果配置了自动生成主键的功能,则会通过PreparedStatement的getGeneratedKeys方法获取到插入数据生成的主键。 5. 主键映射:如果返回主键是自动生成的,则MyBatis会根据配置的主键返回类型自动进行映射,将插入数据生成的主键值设置到对应的Java对象中。 6. 返回结果:最后,MyBatis会将插入操作的结果包装成对应的Java对象,并返回给调用方。 总结来说,MyBatis插入数据返回主键的过程是通过配置SQL语句和设置相关属性,然后执行插入操作并获取主键值,最后将主键值映射到Java对象中,返回给调用方。这样就可以方便地使用自动生成的主键值进行后续操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值