MyBatis+Oracle实现主键自增长的几种常用方式

一、使用selectKey标签

<insert id="addLoginLog" parameterType="map" >
          <selectKey  keyProperty="id" resultType="int" order="BEFORE">
              select nvl(max(id),0)+1 from ap_loginlog
          </selectKey>
          insert into ap_loginlog(ID,MEMBER_ID) values(#{id},#{memberId})
  </insert>

keyProperty是指vo类中的主键属性名称,resultType是指vo类中的主键属性类型,order有两个属性,一个是AFTER是指限制性插入语句,一个是BEFORE是指先执行selectKey标签内的语句:select nvl(max(主键名),0)+1 from 表名
二、使用序列

首先创建序列

CREATE SEQUENCE loginlog_squence
INCREMENT BY 1
NOMAXVALUE
NOCYCLE
CACHE 10;  

然后再sql语句中插入

<insert id="addLoginLog" parameterType="map" >      insert into ap_loginlog(ID,MEMBER_ID) values(loginlog_squence.nextval,#{memberId})</insert>

三、使用序列加触发器

create or replace trigger loginlog_trigger
  before insert on ap_loginlog
  for each row
begin
  select loginlog_sequence.nextval into :new.id from dual;
end loginlog_trigger;  

然后再sql语句中插入

<insert id="addLoginLog" parameterType="map" >
      insert into ap_loginlog(MEMBER_ID) values(#{memberId})
  </insert>

四、自定义一张表,每次从表中获取主键,然后将那个数字+1,这样就可以保证主键的唯一性了。

转自https://www.cnblogs.com/uzxin/p/11930347.html

原文地址:https://www.cnblogs.com/Y-S-X/p/12234364.html

时间: 2024-10-16 00:31:57

MyBatis+Oracle实现主键自增长的几种常用方式的相关文章

mybatis配置oracle的主键自增长

引用自:https://hacpai.com/article/1405392025960 mysql.sqlserver等数据库本身带有主键自增长像auto_increment的功能可以直接使用 useGeneratedKeys=”true”来实现,比如下面的配置 <insert id=”add” useGeneratedKeys=”true” keyProperty=”id” parameterType=”Auth”> insert into s_user_auth (id,user_id,

Oracle实现主键自增长

MySql中在字段定义后面使用 AUTO_INCREMENT 属性实现自增长,Oracle如何实现主键自增长? 建表: create table users(   userId number(10) not null,   username varchar2(30) not null,   birthday date default null,   sex char(1) default 1 check (sex in (0, 1)),   address varchar2(200) not n

Oracle实现主键自增的几种方式

数据库作为一个系统的核心,数据库设计的1NF就是一个表结构必须有唯一约束也就是主键,Oracle数据库本身没有自增机制,不像MySQL直接使用关键字AUTO_INCREMENT自动加一,所以需要我们去自己来实现,下面有几种实现的方式 一.序列化+触发器 第一步在表结构完整的情况下创建一个序列 CREATE SEQUENCE SEQ_NAME INCREMENT BY 1 MINVALUE 1 MAXVALUE 9999999999999999 START WITH 1 CACHE 20 第二部创

oracle,mybatis主键自增长

<insert id="insert" parameterType="resource"> <selectKey resultType="long" order="BEFORE" keyProperty="id"> SELECT sys_resource_id_SEQ.NEXTVAL AS id FROM DUAL </selectKey> INSERT INTO <

表主键自增长Mybatis插入数据报错

在使用MyBatis进行开发的过程中,当你遇到向某张数据库表中插入一条记录时,出现数据插入不正确,如果自己确定是因为主键的原因,类似如下错误提示: 而你的本意是主键自动增长,那么,可参考如下方法尝试解决: 第一步:在配置中设置主键为自增长(数据库我使用的是MySql) 如果你是使用MyBatis自动生成的插入语句,除了设置上面给出的useGeneratedKeys="true"之外,还需要将如下图所示红色部分去掉,这是查询主键最大值的一段代码. 如果还未解决,这时你应该检查一下你的数据

Mysql,SqlServer,Oracle主键自动增长的设置

1.把主键定义为自动增长标识符类型 MySql 在mysql中,如果把表的主键设为auto_increment类型,数据库就会自动为主键赋值.例如:   customers(id  auto_increment    , name (  customers(name)  id  customers; 以上sql语句先创建了customers表,然后插入两条记录,在插入时仅仅设定了name字段的值.最后查询表中id字段,查询结果为: 由此可见,一旦把id设为auto_increment类型,mys

Mybatis操作数据库实现主键自增长

(一)oracle中没有主键自增长,所有可以通过创建序列或使用触发器实现 1.先创建表 CREATE TABLE USER1 ( ID NUMBER(10), NAME VARCHAR2(20), SEX VARCHAR2(5), ADDRESS VARCHAR2(30), BIRTHDAY DATE ) 2.创建序列: CREATE SEQUENCE user1_sequence INCREMENT BY 1 NOMAXVALUE NOCYCLE CACHE 10; 3.在配置文件中配制 <i

oracle创建表并添加主键,设置主键自增长

oracle序列详解和创建自增主键 Oracle序列主键 序列: 是oacle提供的用于产生一系列唯一数字的数据库对象. l 自动提供唯一的数值 l 共享对象 l 主要用于提供主键值 l 将序列值装入内存可以提高访问效率 1.首先创建序列,Oracle序列的语法格式为: CREATE SEQUENCE 序列名 [INCREMENT BY n] [START WITH n] [{MAXVALUE/ MINVALUEn|NOMAXVALUE}] [{CYCLE|NOCYCLE}] [{CACHE n

oracle实现主键自增

由于ORACLE设置主键是不会自动增加的,所以必须用 序列 和 触发器 来完成主键的递增 1.建立数据表 create table Test_Increase(           userid number(10) primary key,  /*建立主键*/           username varchar2(20)           ); 2.创建自动增长序列 CREATE SEQUENCE TestIncrease_Sequence INCREMENT BY 1 -- 每次加几个