Mybatis 里面3种 主键(自动递增)回填 的写法

1.SELECT LAST_INSERT_ID()

< insert>元素用于映射插入语句,MyBatis执行完一条插入语句后,将返回一个整数表示其影响的行数。它的属性与< select>元素的属性大部分相同,在本节讲解它的几个特有属性。具体如下:

属性名作用
keyProperty将插入或更新操作时的返回值赋值给PO类的某个属性,通常会设置为主键对应的属性。如果是联合主键,可以在多个值之间用逗号隔开。 大白话解释:表示要查询的这列数据, 在JavaBean类中叫什么属性, 注意: 必须和JavaBean的属性名一致.
keyColumn该属性用于设置第几列是主键,当主键列不是表中的第一列时需要设置。如果是联合主键时,可以在多个值之间用逗号隔开。大白话解释:表示要查询的这列数据, 在数据表中叫什么列名, 注意: 必须和数据表的列名一致.
order执行时间, 在insert添加数据之后执行, 还是在insert添加数据之前执行. 值有两个: after, before.这里我们传入after, 表示添加数据之后, 我们再来获取这个数据的id.
resultType返回值的数据类型.
useGeneratedKeys该属性将使MyBatis使用JDBC的getGeneratedKeys()方法获取由数据库内部生产的主键,如MySQL、SQL Server等自动递增的字段,其默认值为false。
<insert id="insertUser" parameterType="com.itheima.domain.User">
      <selectKey keyColumn="id" keyProperty="id" order="AFTER" resultType="java.lang.Integer">
        SELECT LAST_INSERT_ID();
    </selectKey>
      <!-- #{}中写的内容, 必须和User类的属性名一致. -->
      insert into user values(null,#{username}, #{birthday}, #{sex}, #{address});
</insert>

2.useGeneratedKeys

​ MySQL、SQL Server等数据库的表格可以采用自动递增的字段作为主键。

<insert id="insertUser" parameterType="com.itheima.domain.User" keyProperty="id" useGeneratedKeys="true">
      <!-- #{}中写的内容, 必须和User类的属性名一致. -->
      insert into user values(null,#{username}, #{birthday}, #{sex}, #{address});
</insert> 

3.自定义主键

​ 如果实际工程中使用的数据库不支持主键自动递增(如Oracle),或者取消了主键自动递增的规则时,可以使用MyBatis的< selectKey>元素来自定义生成主键。

<insert id="insertUser" parameterType="com.itheima.domain.User">
	<selectKey keyProperty="id" resultType="Integer" order="BEFORE">
	   select if(max(uid) is null, 1 , max(uid)+1) as newUid from user
	</selectKey>
      <!-- #{}中写的内容, 必须和User类的属性名一致. -->
      insert into user values(null,#{username}, #{birthday}, #{sex}, #{address});
</insert>
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值