Mybatis怎么怎么获取刚insert后生成的ID(探索selectKey)

原创 2018年04月17日 19:24:43

    有时候我们业务逻辑比较复杂时,插入一条数据,并立刻需要获取插入时数据库自动生的ID,用这个ID再去执行别的逻辑。

    那么在Mybatis中,就需要掌握selectKey的用法。

    selectKey中可以随意生成想要的主键格式并返回

    对于Oracle,需要将order设为“BEFORE”,否则会报空值。因为要先生成主键,再插入到表中

    首先用pojo作为参数传入,其中属性TID为主键,将values中主键位置写好#{TID},然后在selectKey中生成主键并起别名为TID,注意keyProperty也要为TID。pojo中要有对应的setter,getter。

<insert id="test">
    INSERT into T_ORDER_TRAIN
    (TID) VALUES (#{TID})
    <selectKey resultType="String" order="BEFORE" keyProperty="TID">
        select
        ((select to_char(sysdate,'yyyyMMdd') from dual)||'-'||#{jianpin,jdbcType=VARCHAR}||'-'||seq_TID.nextval) as TID
        from dual
    </selectKey>
</insert>

    以上我的主键是由日期+参数+序列组合成的。这样的话传入的pojoTID属性为空,返回却有了TID值。

public String publishTrainActivity(PublishTrainOrder train) {

    orderMapper.test(train);
    System.out.println("id====="+train.getTID());

    return "nimei";
}

    我们再来尝试传入map参数

public String publishTrainActivity() {

    Map<String,String> p=new HashMap<String,String>();
    p.put("TID","");
    orderMapper.test(p);
    System.out.println("id====="+p.get("TID"));
    return "nimei";
}
<insert id="test">
    INSERT into T_ORDER_TRAIN
    (TID) VALUES (#{TID})
    <selectKey resultType="String" order="BEFORE" keyProperty="TID">
        select
        seq_TID.nextval as tid    //大小写无所谓
        from dual
    </selectKey>
</insert>

结果发现返回的p中TID有值了。

再试试传入参数为String类型

public String publishTrainActivity() {

    String TID="";
    orderMapper.test(TID);
    System.out.println("id====="+TID);
    return "nimei";
}

结果报错了,因为无法将TIDset进一个String里面。

总结,用selectKey最好使用实体类或者map作为参数传入,实体类中要有ID的属性和对应的setter,getter方法,map中要有ID的键。


    对于Mysql,需要将order设为“AFTER”

<insert id="insertUser">
    insert into user (name,password)
    values (#{id},#{name},#{password})
    <selectKey resultType="string" keyProperty="id" order="AFTER">
        SELECT LAST_INSERT_ID() AS ID  //这地方大小写无所谓
    </selectKey>
</insert>
    

spring mybatis insert selectkey 获取不到主键值

又是一个让同学们纠结一阵的问题,当然包括我。其实这个问题很好解决,没有技术含量,网上一大把。但,在某种特殊情况下,我的小伙伴们会惊呆了。 最终还是被我,找出破绽,解决。 先上个配置示例,跟网上其他人贴...
  • zhanngle
  • zhanngle
  • 2014-03-06 16:17:32
  • 20238

mybatis学习之路----insert主键返回 selectKey使用

点滴记载,点滴进步,愿自己更上一层楼。
  • xu1916659422
  • xu1916659422
  • 2017-09-10 14:00:38
  • 3688

mybatis获取insert之后数据库自动生成的id

需求:使用MyBatis往MySQL数据库中插入一条记录后,需要返回该条记录的自增主键值。 方法:在mapper中指定keyProperty属性,示例如下:...
  • sd4015700
  • sd4015700
  • 2014-07-08 08:46:28
  • 3721

mybatis入门使用3:selectKey返回最近插入的id

在使用mybatis insert时,使用id自增有时需要返回最新插入的id; SELECT LAST_INSERT_ID() AS ID insert into t_employee (...
  • lanlianhua_luffy
  • lanlianhua_luffy
  • 2017-06-13 23:35:21
  • 3451

使用mybatis, 如何获取刚插入数据的id

做项目时,使用mysql, springMvc框架,遇到需要刚插入数据库中的数据的ID的问题。 解决方案,只需要在映射文件中,加入以下属性: useGeneratedKeys="true" key...
  • foyui001
  • foyui001
  • 2015-08-04 11:48:41
  • 467

Mybatis自动生成key值(selectKey和useGeneratedKeys)

insert和update操作中会常常用到自动生成主键的问题。 selectKey和useGeneratedKeys属性 官方解释: |————————–|:——————————————————-...
  • u013512014
  • u013512014
  • 2016-12-12 20:37:01
  • 18247

Mybatis——<selectKey>生成主键/获取插入数据主键

对于不支持自动生成类型的数据库或可能不支持自动生成主键 JDBC 驱动来说,MyBatis 有另外一种方法来生成主键 获取插入数据的主键值 这里有一个简单(甚至很傻)的示例,它可以生成一个随机 ID(...
  • Fly_monster
  • Fly_monster
  • 2015-08-24 17:32:03
  • 1466

spring+mybatis selectKey获取不到最后一个插入的ID

时间:2016/08/05 背景: spring+mybatis INSERT INTO    。。。。。。。。。。。。。   SELECT LAST_INSERT_ID() AS ID 事...
  • u011073057
  • u011073057
  • 2016-08-05 15:46:55
  • 2879

SSM项目中使用mybatis insert返回数据ID的方法

xml配置文件中insert方法中增加配置 useGeneratedKeys="true" keyProperty="id"           insert into xxxxxxxx...
  • qq_40397694
  • qq_40397694
  • 2017-10-10 15:20:01
  • 423

Mybatis - SelectKey

SelectKey在Mybatis中是为了解决Insert数据时不支持主键自动生成的问题,他可以很随意的设置生成主键的方式。属性 -描述:① keyProperty : selectKey 语句...
  • J080624
  • J080624
  • 2017-02-14 10:03:41
  • 4002
收藏助手
不良信息举报
您举报文章:Mybatis怎么怎么获取刚insert后生成的ID(探索selectKey)
举报原因:
原因补充:

(最多只允许输入30个字)