Mybatis 中Oracle主键自增设置

Oracle数据库中没有像MySQL那样的主键自增功能,但可以通过序列(Sequence)配合不同的方式来实现类似效果。一种方法是在MyBatis中使用<selectKey>标签,先获取序列的下一个值,然后插入数据。另一种方法是创建触发器,在插入新记录前,从序列中获取值并赋给表中的自增字段。这两种方式都能确保主键的唯一性和递增性。
摘要由CSDN通过智能技术生成

Oracle中不存在mysql那种主键自增的设计

1. 序列+selectKey标签

  1. Oracle新建序列
CREATE SEQUENCE [序列名称]             
INCREMENT BY 1 /**每次自增1, 也可写非0的任何整数*/
START WITH 1  /**以该值开始自增或自减*/
MAXVALUE 99999 /**最大值;设置NOMAXVALUE表示无最大*/ 
MINVALUE 1    /**最小值;设置NOMINVALUE表示无最大值*/  
CYCLE or NOCYCLE /**设置到最大值后是否循环*/  
CACHE 20  /**指定可以缓存 20 个值在内存里;如果设置不缓存序列,则写NOCACHE*/  
ORDER or NOORDER /**设置是否按照请求的顺序产生序列*/
  1. 在mybatis中使用<selectKey标签
<insert id="addLoginLog" parameterType="map" >
  		<selectKey  keyProperty="id" resultType="int" order="BEFORE">
  			select attachment_info_seq.nextval from dual
  		</selectKey>
  		insert into ..... values(#{id},....)
  </insert>

2. 序列+触发器

  1. Oracle新建序列
CREATE SEQUENCE [序列名称]             
INCREMENT BY 1 /**每次自增1, 也可写非0的任何整数*/
START WITH 1  /**以该值开始自增或自减*/
MAXVALUE 99999 /**最大值;设置NOMAXVALUE表示无最大*/ 
MINVALUE 1    /**最小值;设置NOMINVALUE表示无最大值*/  
CYCLE or NOCYCLE /**设置到最大值后是否循环*/  
CACHE 20  /**指定可以缓存 20 个值在内存里;如果设置不缓存序列,则写NOCACHE*/  
ORDER or NOORDER /**设置是否按照请求的顺序产生序列*/
  1. Oracle创建触发器
create or replace trigger [触发器名]    
before insert on [表名]  /*当表进行插入操作时触发此触发器*/    
 for each row     /*对每一行都检测是否触发*/    
begin   /*触发器开始*/    
select  [序列名称].nextval into :new.[表中要自增的字段名] from dual;     
end;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值