1. 程式人生 > 程式設計 >Springboot+MybatisPlus+Oracle實現主鍵自增的示例程式碼

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,#{col2,jdbcType=VARCHAR},#{col3,#{col4,#{col5,jdbcType=DATE},#{col6,jdbcType=INTEGER})
</insert>

注:<selectKey>標籤中加入order='BEFORE'即可在插入完成後返回主鍵。

到此這篇關於Springboot+MybatisPlus+Oracle實現主鍵自增的文章就介紹到這了,更多相關Springboot+MybatisPlus+Oracle實現主鍵自增內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!