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>
发布了9 篇原创文章 · 获赞 0 · 访问量 61

猜你喜欢

转载自blog.csdn.net/qq_36382679/article/details/105603815