在我们开发过程中,在插入数据到数据库时,很多时候都需要把其主键返回,这里就说一下mybatis是怎么获取的。

其中mysql和oracle是不同的做法,因为mysql本身就提供字段自增的属性,而oracle则需要使用序列。

mysql

<insert id="insert" parameterType="cn.mybatis.mydemo.domain.User" useGeneratedKeys="true" keyProperty="id">
insert into users (id, user_name, password, 
  real_name, status, email, 
  created_at, updated_at)
values (#{id,jdbcType=INTEGER}, #{userName,jdbcType=VARCHAR}, #{password,jdbcType=VARCHAR}, 
  #{realName,jdbcType=VARCHAR}, #{status,jdbcType=BIT}, #{email,jdbcType=VARCHAR},
  #{createdAt,jdbcType=TIMESTAMP}, #{updatedAt,jdbcType=TIMESTAMP})
</insert>

配置中,keyProperty表示返回的id要保存到对象的那个属性中,这里的名字要和对象的字段名对应上。而useGeneratedKeys表示主键id为自增长模式。mysql的话只要加上这两个属性就可以了,加上后会自动把主键set到对象的属性上。

注意:useGeneratedKeys,这会令MyBatis 使用JDBC 的getGeneratedKeys方法来获取由数据库内部生成的主键,比如,像MySQL和SQLServer这样的关系数据库管理系统的自动递增字段。

oracle

<insert id="insert" parameterType="com.yitop.admin.domain.User">
   <selectKey resultType="INTEGER" order="BEFORE" keyProperty="id">  
       SELECT SEQ_USER.NEXTVAL as id from DUAL
   </selectKey> 
    insert into users (id, user_name, password, 
      real_name, status, email, 
      created_at, updated_at)
    values (#{id,jdbcType=INTEGER}, #{userName,jdbcType=VARCHAR}, #{password,jdbcType=VARCHAR}, 
      #{realName,jdbcType=VARCHAR}, #{status,jdbcType=BIT}, #{email,jdbcType=VARCHAR},
      #{createdAt,jdbcType=TIMESTAMP}, #{updatedAt,jdbcType=TIMESTAMP})
</insert>

因为oracle没有自增的说法,所以不能使用useGeneratedKeys了。而是使用selectKey把id获取并set到对象的属性中。

标签: none

(一)网站基金来源:

2019年本站VIP服务,收徒公告:>>>>>>


(二)入群须知:

凡是加入我群者,皆要严守群规,每周日是群规反思日。群规的要义有两点∶

(1)坚持系统化的学习方式,由量变到质变。仅仅解决工作中的问题,并不叫系统化的学习。

(2)坚持以价值为导向的学习方式,扔掉低价值知识[配置、调参、安装],聚焦高价值知识[结构、算法、优化],推动量变到质变的进程。

添加新评论