如何在Java MyBatis 插入数据库返回主键?

如何在Java MyBatis 插入数据库返回主键?
第一种方式:

MYSQL数据库中没有设置字段自增长

<!-- 添加角色 -->
<insert id="addSysRole" useGeneratedKeys="true" keyProperty="id" parameterType="com.yang.daily.model.Us.SystemRole">
  INSERT INTO system_role (ID,
                        role_code,
                        Role_Name,
                        Role_Status,
                        Create_By,
                        Create_At,
                        Operate_Ip)
  VALUES (#{id,jdbcType=VARCHAR},
          #{roleCode,jdbcType=VARCHAR},
          #{roleName,jdbcType=VARCHAR},
          #{roleStatus,jdbcType=INTEGER},
          #{createBy,jdbcType=VARCHAR},
          NOW(),
          #{operateIp,jdbcType=VARCHAR})                      
</insert>
  • useGeneratedKeys=“true” 表示给主键设置自增长
  • keyProperty=“id” 表示将自增长后的Id赋值给实体类中的userId字段
  • parameterType=“com.yang.daily.model.Us.SystemRole” 这个属性指向传递的参数实体类
  • 实体类要有getter() 和 setter() 方法
第二种方式:

MYSQL数据库中设置字段自增长

<!-- 添加角色 -->
<insert id="addSysRole" >
  <selectKey resultType="integer" order="AFTER" keyProperty="id">
    select last_insert_id()
  </selectKey>
  INSERT INTO system_role (ID,
                         role_code,
                         Role_Name,
                         Role_Status,
                         Create_By,
                         Create_At,
                         Operate_Ip)
  VALUES (#{id,jdbcType=VARCHAR},
          #{roleCode,jdbcType=VARCHAR},
          #{roleName,jdbcType=VARCHAR},
          #{roleStatus,jdbcType=INTEGER},
          #{createBy,jdbcType=VARCHAR},
          NOW(),
          #{operateIp,jdbcType=VARCHAR})
</insert>
  • order=“AFTER” 表示先执行插入语句,之后再执行查询语句,可被设置为 BEFORE 或 AFTER
  • 如果设置为 BEFORE,那么它会首先选择主键,设置 keyProperty 然后执行插入语句
  • 如果设置为 AFTER,那么先执行插入语句,然后是 selectKey 元素-这和如 Oracle 数据库相似,可以在插入语句中嵌入序列调用
  • keyProperty=“id” 表示将自增长后的id赋值给实体类中的id字段
  • SELECT LAST_INSERT_ID() 表示MySQL语法中查询出刚刚插入的记录自增长Id
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值