MyBatis 写入数据时带出id(包含oracle和Mysql自增)

一、需求说明(本文着重讲述oracle自增主键的实现和插入获取)

插入数据希望能带出id

二、Mysql 自增主键 (自增功能MySQL自带,非自增自己外部设置主键没必要获取,数据库中构件可参考oracle)

<insert id="insertSelective" parameterType="com.netxxx.eoss.dto.AssessDirectReportTaskDto" useGeneratedKeys="true" keyProperty="assessDirectTaskId">
	。。。
</insert>
  • useGeneratedKeys=“true” 自增主键需要写true,默认false
  • keyProperty=“assessDirectTaskId” assessDirectTaskId是对象的id,不是数据库字段

三、oracle 实现自增和带出id

1、自增实现(外部可使用雪花算法等)

  • 创建序列

Oracle 序列(sequence)用于序号生成,每次取的时候它会自动按照步长值增加,sequence与表没有直接关系。

create sequence SEQ_ADTI_ID
    minvalue 0
    maxvalue 99999999999999999
/
  • 插入数据
-- 示例
insert into xxxTableName (t_id,t_name) values (SEQ_ADTI_ID.NEXTVAL,'张三') 

2、 返回id

<insert id="insertSelective" parameterType="com.netxxx.eoss.dto.AssessDirectReportTaskDto" useGeneratedKeys="false" keyProperty="assessDirectTaskId">
    <selectKey resultType="java.math.BigDecimal"  keyProperty="assessDirectTaskId" order="BEFORE" >
      select SEQ_ADTI_ID.NEXTVAL as assessDirectTaskId from dual
    </selectKey>
    insert into ASSESS_DIRECT_REPORT_TASK
    <trim prefix="(" suffix=")" suffixOverrides=",">
        ASSESS_DIRECT_TASK_ID,
      <if test="reportYear != null">
        REPORT_YEAR,
      </if>
    </trim>
    <trim prefix="values (" suffix=")" suffixOverrides=",">
      #{assessDirectTaskId},
     <if test="reportYear != null">
        #{reportYear,jdbcType=DECIMAL},
      </if>
    </trim>
  </insert>
  • useGeneratedKeys=“false” 设置为false,这个是针对自增主键的
  • resultType=“java.math.BigDecimal” 返回主键的类型,对应对象中的属性
  • order=“BEFORE” 写入之前查,这个尽量大写
  • dual Oracle提供的最小的工作表,只有一行一列,具有某些特殊功用。

四、知识补充

  • sequence
create sequence seq_test2
   minvalue 1  
   maxvalue 21  
   start with 1  
   increment by 1  
   cache 20  
   cycle   
   order;

minValue: 指定序列最小值。 maxValue: 指定序列最大值。 increment by: 指定序列增长步长,可以为正(升序)、负整数(降序),但不能为0。 start with:指定序列起始数,默认为序列最小值。 noMaxValue:无最大值(实际为10^27或-1),默认。 noMinValue:无最小值(实际为1或-10^26),默认。 cycle:指定序列达到最大值或最小值后继续从头开始生成。 noCycle:不循环生成,默认。 cache:指定数据库内存中预分配的序列值个数,以便快速获取,最小cache值为2。如果系统关闭或者其它情况将会导致序列不连续,也可以设置为nocache。 noCache:不指定缓存数,默认缓存20。 order:指定order条件保证序列按请求顺序生成。 noOrder:不保证序列按请求顺序生成。

参考 传送门

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值