mybatis获取自增主键——insert主键返回

目录

一、使用JDBC获取自增的主键

1、sql语句内容

2、属性注意点 

 3、mybatis-config.xml的内容

二、使用SelectKey返回主键的值

1、sql语句如下

2、对应属性解释


一、使用JDBC获取自增的主键

1、sql语句内容

 
   insert into weekly_report
      values (
      null,
      #{previousId,jdbcType=BIGINT},
      #{teamId,jdbcType=INTEGER},
      #{status,jdbcType=TINYINT},
      #{count,jdbcType=TINYINT},
      #{whichWeek,jdbcType=CHAR},
      #{createAt,jdbcType=TIMESTAMP},
      #{submitAt,jdbcType=TIMESTAMP}, 
      )
  

2、属性注意点 

useGeneratedKeys :默认值为 false 如果设置为 true, MyBatis 使用 JDBgetGeneratedKeys 方法来取出由数据库内部生成的主键;

keyProperty: MyBatis 通过 getGeneratedKeys 获取键值后将要赋值的属性(此处一定要注意,该处的变量是用来接受自增的id的)

然后在业务逻辑中,调用insert(model)方法后,就可以从model中获取到自增的id。

 3、mybatis-config.xml的内容

insert语句去获取自增的id,与mybatis-config.xml里的配置是无关的。

虽然我们一般都会在mybatis-config.xml里面配置下面这句:

 
        
       

此处设置的value是否为true不影响自增id的获取。(原因还待研究)

二、使用SelectKey返回主键的值

使用JDBC返回主键的方法只适用于支持主键自增的数据库。有些数据库(如 Oracle )不提供主键自增的功能,而是使用序列得到 个值,然后将这个值赋给 id ,再将数据插入数据库对于这种情况,可以采用另外 种方式:使用< selectKey>标签来获取主键的值,这种方式不仅适用于不提供主键自增功能的数据库,也适用于提供主键自增功能的数据库;

1、sql语句如下

 
   insert into weekly_report
      values (
      null,
      #{previousId,jdbcType=BIGINT},
      #{receiverUserKey,jdbcType=VARCHAR},
      #{defaultReceiver,jdbcType=VARCHAR}
      )
      
          SELECT LAST_INSERT_ID ()
      
  

2、对应属性解释

  1. selectKey  会将 SELECT LAST_INSERT_ID()的结果放入到传入的model的主键里面 
  2. keyProperty 对应的model中的主键的属性名
  3. order :AFTER 表示 SELECT LAST_INSERT_ID() 在insert执行之后执行,多用与自增主键; BEFORE 表示 SELECT LAST_INSERT_ID() 在insert执行之前执行,这样的话就拿不到主键了,这种适合那种主键不是自增的类型  
  4. resultType 主键的数据类型   

你可能感兴趣的:(MySQL)