• MyBatis插入并获取自增主键


    MyBatis插入并获取自增主键

    在MyBatis中,经常会使用到自增主键,但是在一个方法体内插入后如何获取自增后的主键呢?

    我们知道insert和insertSelective两个方法都会有一个Integer类型返回值,它是不是我们要的自增主键呢?答案是:当然不是!

    MyBatis当然知道我们的这个需求,也提供了对应的解决方案,而且是两种。接下来我们一起看看吧

    方案1:在插入后查询最后一条数据的id

    在插入元素后我们查询一下最后一条数据的id,不就可以拿到这个对象的id了吗

      <insert id="insertSelective" parameterType="cn.rayfoo.dao.User">
        <selectKey keyProperty="id" order="AFTER" resultType="java.lang.Integer">
          SELECT LAST_INSERT_ID()
        </selectKey>
        insert into user
        <trim prefix="(" suffix=")" suffixOverrides=",">
          <if test="name != null">
            name,
          </if>
        </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
          <if test="name != null">
            #{name,jdbcType=VARCHAR},
          </if>
        </trim>
      </insert>
    

    方案2:在insert标签上加上如下属性

    • 设置useGeneratedKeys为true

    • 指定keyProperty为主键的字段名称

      <insert id="insertSelective" parameterType="cn.rayfoo.dao.User" useGeneratedKeys="true" keyProperty="id">
      </insert>
    

    注意:

    1. 通过这两种方式获取的主键,不是通过返回值的形式返回,而是直接赋值给insertSelective操作的那个bean对象。
    2. 如果标签中插入了多条数据,那么拿到的id将会是最后一条,也就是说这个方法不适用于批量插入的insert语句。
  • 相关阅读:
    编程命名规范化
    傻孩子菜单框架(转)
    《数据结构》示范程序树的长子-兄弟表示法
    keil中编译时出现*** ERROR L107: ADDRESS SPACE OVERFLOW
    单片机C语言下LCD多级菜单的一种实现方法
    指针函数与函数指针的区别
    LCD1602汉字、自定义字符取模
    FFmpeg纯净版解码 av_parser_parse2
    ffmpeg 内存读写相关
    AudioSpecificConfig
  • 原文地址:https://www.cnblogs.com/zhangruifeng/p/12715194.html
Copyright © 2020-2023  润新知