Springboot+MybatisPlus+Oracle实现主键自增的示例代码

上周周一,本来刚过完周末,高高兴兴,老大突然安排了个活,要在一天内把项目的MySQL数据库换成Oracle数据库,我们都知道这是不可能完成的任务,但是,秉承着“没有困难的工作,只有不努力的打工人”的精神,我们马上投入了工作,第一步当然是先配置数据库、oracle建表,这个解决调试了一上午,然后下午卡到oracle主键了,所有人网上找方法,一直到第二天凌晨3点半都还没解决,网上方法很多,试了好多都不管用,终于第二天才找到了满足的方法。

废话不多说,下面贴出。

application.yml配置

# Mybatis的相关配置
mybatis-plus:
 mapper-locations: classpath*:com/XX/XX/XX/dao/mapping/*.xml
 typeAliasesPackage: com.XX.XX.XX.model
 global-config:
  #主键类型 0:"数据库ID自增", 1:"用户输入ID",2:"全局唯一ID (数字类型唯一ID)", 3:"全局唯一ID UUID";
  id-type: 1
  #序列接口实现类配置
  key-generator: com.baomidou.mybatisplus.incrementer.OracleKeyGenerator

model实体类配置(仅展示id)

import java.io.Serializable;
import javax.persistence.*;
import lombok.Data;

@Data
@Table(name = "POJO")
public class SysLogeInfo implements Serializable {
  @Id
  @Column(name = "ID")
  @SequenceGenerator(name = "sequenceGenerator",sequenceName = "POJO_SEQ")
  @GeneratedValue(generator = "sequenceGenerator",strategy = GenerationType.SEQUENCE)
  private Integer id;
}

其中:

@SequenceGenerator的name与@GeneratedValue的generator相对应

sequenceName即你在oracle数据库中为此表创建的自增序列名(貌似框架无法自动生成,需要自己手动创建)

这样,主键ID插入null值的问题基本解决了,但是我们的Mapper继承了tk.mybatis.mapper.common.Mapper,插入是直接调tk.Mapper的insertSelective(T var1)方法,有时候我们需要插入后的主键id,这种方法没办法得到,所以只能手写insert方法,如下。

<insert id="add" keyColumn="ID" keyProperty="id" parameterType="com.XX.XX.XX.model.POJO" useGeneratedKeys="true">
    <selectKey resultType="int" order="BEFORE" keyProperty="id">
      SELECT POJO_SEQ.nextval id FROM DUAL
    </selectKey>
    INSERT INTO POJO
    ( ID,COL1,COL2,COL3,COL4,COL5,COL6)
    VALUES
    (#{id,jdbcType=INTEGER},
    #{col1,jdbcType=INTEGER},
    #{col2,jdbcType=VARCHAR},
    #{col3,jdbcType=INTEGER},
    #{col4,jdbcType=INTEGER},
    #{col5,jdbcType=DATE},
    #{col6,jdbcType=INTEGER})
</insert>

注:<selectKey>标签中加入order='BEFORE'即可在插入完成后返回主键。

到此这篇关于Springboot+MybatisPlus+Oracle实现主键自增的文章就介绍到这了,更多相关Springboot+MybatisPlus+Oracle实现主键自增内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Mybatis-plus实现主键自增和自动注入时间的示例代码

    mybatis-plus依赖导入 <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.3.2</version> </dependency> 建议使用3.3.0后的版本. 导入mybatis-plus就不用导入mybatis了,冲突! 连接数据库 sp

  • SpringBoot整合MyBatisPlus配置动态数据源的方法

    MybatisPlus特性 •无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑 •损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作 •强大的 CRUD 操作:内置通用 Mapper.通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求 •支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错 •支持多种数据库:支持 MySQL.MariaDB.Ora

  • springboot集成mybatisplus实例详解

    集成mybatisplus后,简单的CRUD就不用写了,如果没有特别的sql,就可以不用mapper的xml文件的. 目录 pom.xml文件 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-insta

  • SpringBoot整合MybatisPlus的简单教程实现(简单整合)

    最近在研究springboot,顺便就会看看数据库连接这一块的知识 ,所以当我发现有通用Mapper和MybatisPlus这两款网络上比较火的简化mybatis开发的优秀软件之后.就都想试一下,看看哪一款比较适合自己. 先创建一个springboot的项目,可以参考我之前的文章Spring Boot 的简单教程(一) Spring Boot 项目的创建. 创建好springboot之后就需要整合mybatis和mybatis-plus了. 打开pom.xml文件,将最新的mybatis相关的包

  • SpringBoot Mybatis Plus公共字段自动填充功能

    一.应用场景 平时在建对象表的时候都会有最后修改时间,最后修改人这两个字段,对于这些大部分表都有的字段,每次在新增和修改的时候都要考虑到这几个字段有没有传进去,很麻烦.mybatisPlus有一个很好的解决方案.也就是公共字段自动填充的功能.一般满足下面条件的字段就可以使用此功能: 这个字段是大部分表都会有的. 这个字段的值是固定的,或则字段值是可以在后台动态获取的. 常用的就是last_update_time,last_update_name这两个字段. 二.配置MybatisPlus 导包:

  • Springboot+MybatisPlus+Oracle实现主键自增的示例代码

    上周周一,本来刚过完周末,高高兴兴,老大突然安排了个活,要在一天内把项目的MySQL数据库换成Oracle数据库,我们都知道这是不可能完成的任务,但是,秉承着"没有困难的工作,只有不努力的打工人"的精神,我们马上投入了工作,第一步当然是先配置数据库.oracle建表,这个解决调试了一上午,然后下午卡到oracle主键了,所有人网上找方法,一直到第二天凌晨3点半都还没解决,网上方法很多,试了好多都不管用,终于第二天才找到了满足的方法. 废话不多说,下面贴出. application.ym

  • Oracle 创建主键自增表示例代码

    前言 本篇文章给大家主要介绍的是在oracle中如果创建自增长表的方法,这里要用到序列.下面话不多说,我们来看示例代码. 示例代码 create table tb_student ( id NUMBER(10) not null, createtime DATE not null, constraint PK_tb_student primary key (id) ); comment on table "tb_student" is '学生表'; comment on column

  • springboot+mybatis-plus基于拦截器实现分表的示例代码

    目录 前言 一.设计思路 二.实现思路 三.代码实现 接口描述 核心组成部分 1.本地线程工具类 2.注解部分 3.拦截器实现 四.测试 后记 前言 最近在工作遇到数据量比较多的情况,单表压力比较大,crud的操作都受到影响,因为某些原因,项目上没有引入sharding-jdbc这款优秀的分表分库组件,所以打算简单写一个基于mybatis拦截器的分表实现 一.设计思路 在现有的业务场景下,主要实现的目标就是表名的替换,需要解决的问题有 如何从执行的方法中,获取对应的sql并解析获取当前执行的表名

  • Oracle 触发器实现主键自增效果

    触发器的作用 触发器的作用类似拦截器.把一些针对数据库的DML操作(insert/update/delete/select)进行拦截,符合业务要求的进行操作,不符合要求的操作可以通过抛出异常来阻止 说白了就是数据确认(after)与安全性检查(before),此外触发器不针对select操作 1.首先创建表testUser         Oracle设置为不区分大小的,所以table名,言简意赅即可. CREATE TABLE testUser ( id NUMBER ( 11 ) prima

  • 浅谈MyBatis-Plus学习之Oracle的主键Sequence设置的方法

    一.Oracle的主键Sequence设置简介 在Oracle数据库中不支持主键自增策略,它是通过Sequence序列来进行完成的,因此需要在MP中进行相关配置 二.相关配置如下 2.1.pom.xml 添加相关依赖 注意:由于oracle的授权问题,没办法从maven仓库中下载,因此可以手动从oracle官网中下载,并本地打包到仓库中 <!-- Oracle驱动: 因为Oracle授权的问题,不能从Maven的仓库中下载到Oracle驱动 --> <dependency> <

  • Oracle表字段的增删改、表的重命名及主键的增删改

    一.表字段的增删改: 添加字段的语法:alter table tablename add (column datatype [default value][null/not null],-.); 修改字段的语法:alter table tablename modify (column datatype [default value][null/not null],-.); 删除字段的语法:alter table tablename drop (column); 注:添加.修改.删除多列的话,用逗

  • Navicat Premium中Oracle创建主键自增的方法

    1.选中表进入设计,选择触发器, 触发器名称,混合不选,每行,触发前,插入时,启用 2.下面展示触发器代码. // An highlighted block BEGIN SELECT SEQ_EXAM_KNOWLEDGE_BASE.nextval INTO :NEW.ID FROM DUAL; END; 3.两个引用写一下 到此这篇关于Navicat Premium中Oracle创建主键自增的方法的文章就介绍到这了,更多相关Navicat Premium主键自增内容请搜索我们以前的文章或继续浏览

  • springboot+mybatis-plus+oracle实现逻辑删除

    最近在做一个前后端分离的小项目,需要删除用户表的用户,但是用户再别的表做了外键,所以只能做成逻辑删除,一通百度查资料后得以实现: 1.用户实体类 package com.sie.demo.entity; import com.alibaba.fastjson.annotation.JSONField; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.

  • Navicat设置Oracle数据库主键自增的方法步骤

    目录 一. 创建如下表 二.创建序列 三.创建触发器 总结 一. 创建如下表 Oracle数据库不同于Mysql.Sql Server数据库,Oracle数据库主键自增不能在建表时直接设置,而是需要通过序列和触发器进行设置! 二.创建序列 create sequence SEQ_DEVICEDATAINFO start with 1 increment by 1 maxvalue 99999999 nocycle cache 10; 上述语句中: create sequence SEQ_DEVI

随机推荐