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

一、Oracle的主键Sequence设置简介

在Oracle数据库中不支持主键自增策略,它是通过Sequence序列来进行完成的,因此需要在MP中进行相关配置

二、相关配置如下

2.1、pom.xml 添加相关依赖

注意:由于oracle的授权问题,没办法从maven仓库中下载,因此可以手动从oracle官网中下载,并本地打包到仓库中

<!-- Oracle驱动: 因为Oracle授权的问题,不能从Maven的仓库中下载到Oracle驱动 -->
        <dependency>
            <groupId>com.oracle</groupId>
            <artifactId>ojdbc14</artifactId>
            <version>10.2.0.4.0</version>
        </dependency>

2.2、db.properties 添加相关的连接配置信息

orcl.driver=oracle.jdbc.OracleDriver
orcl.url=jdbc:oracle:thin:@localhost:1521:mp
orcl.username=username
orcl.password=1234

2.3、applicationContext.xml 添加dataSource设置

<!-- Oracle -->
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="${orcl.driver}"></property>
        <property name="jdbcUrl" value="${orcl.url}"></property>
        <property name="user" value="${orcl.username}"></property>
        <property name="password" value="${orcl.password}"></property>
    </bean>

2.4、在Oracle中创建表数据及序列

create table tbl_user(
 id number(10),
 name varchar2(32),
 delete_flag number(10)
)
-- 创建序列
create sequence seq_user start with 1;

2.5、实体相关配置

注意两点:

@KeySequence(value="seq_user",clazz=Integer.class) //value为数据库中生成的序列名,class指主键属性类型

@TableId(type=IdType.INPUT)  //注意主键类型要指定为Input

@KeySequence(value="seq_user",clazz=String.class) //value为数据库中生成的序列名,class指主键属性类型
public class User {
     @TableId(type=IdType.INPUT)  //注意主键类型要指定为Input
     private String id;
     @TableField(fill=FieldFill.INSERT_UPDATE) //当插入和更新都会进行字段的填充
     private String name;
     @TableLogic  //标志是一个逻辑标识符号
     private Integer deleteFlag;
}

2.6、applicationContext.xml配置

 <!-- mybatis-plus全局配置策略 ,这样避免重复在每一个实体中使用注解进行配置-->
    <bean id="globalConfiguration" class="com.baomidou.mybatisplus.entity.GlobalConfiguration">
        <property name="dbColumnUnderline" value="true"></property>  <!-- 2.3版本后默认配置数据库下划线-->
        <!-- 指定数据库ID生成策略   0:数据库自增-->
        <property name="idType" value="0"></property>
        <!-- 指定数据库表前缀 -->
        <property name="tablePrefix" value="tbl_"></property>
        <!-- 注入Sequence -->
        <property name="keyGenerator" ref="oracleKeyGenerator"></property>
    </bean>

    <!-- 配置Oracle主键Sequence -->
    <bean id="oracleKeyGenerator" class="com.baomidou.mybatisplus.incrementer.OracleKeyGenerator"></bean>

本质:

其实在Oracle数据库中进行新增数据首先在数据库中先执行

select seq_user.nextval from dual;这样获取下一个主键的序列,然后再执行插入操作

另外:

实际开发中可能会有很多个实体类,所以在每个实体类上都加上@KeySequence,显得很繁琐

假如需要多个实体公用同一个序列

可以将@keySequence 定义在父类中, 可实现多个子类对应的多个表公用一个 Sequence

原文地址:https://www.cnblogs.com/jayhou/p/9825874.html

时间: 2024-08-24 16:44:09

浅谈MyBatis-Plus学习之Oracle的主键Sequence设置的相关文章

浅谈Hibernate中映射集合属性以及主键和外键

首先说明一下什么叫主键以及外键. 主键和外键是对于数据库来说的,数据库的表才有主键外键的说法. 主键:主键是指标识某个表中唯一且非空的一条记录行的列,这个列中的值不允许有重复的值,用于确定一个表中的一条记录,实际上主键就是告诉别人:这个数据列是唯一的. 外键:引用另外一个表中的主键,在当前表中不一定为唯一的,但是在被引用表中一般唯一.对于关系型数据库来说(比如MySQL)外键是联系数据表之间的唯一方式,主要目的是控制存储在外键表中的数据. 建立外键的前提:本表的列必须与外键类型相同(外键必须是外

浅谈设计模式的学习(下)

时间过得真快啊,不知不觉又要周末了,借这个周末时间.把<浅谈设计模式的学习(下)>补上吧. 在<浅谈设计模式的学习(中)>中,说到了保持抽象的思维.接下来说一下第四点,做一个分享,也记录一下自己的学习历程. 4.学习设计模式,就不要把它看的太认真    设计模式是一个编程思想,它不是具体的代码套路.举个例子说明一下: 由于家传,接触到了一些中国的传统武术.当我与那些不懂传统武术的人交流的时候,他们总是认为中国的传统武术都是些套路.花架子,只是用来好看.在他们认为,两人打架,别人出拳

浅谈设计模式的学习(中)

在<浅谈设计模式的学习(上)>中我说到了设计模式的基石-----抽象思维.为什么需要抽象思维呢?因为越抽象就越不容易出错,就像有些领导人说话:坚持改革开放.但怎么算坚持改革开放呢,没有具体的标准,因事而异,所以就不容易违背这个坚持改革开放的原则了. 3.学习设计模式,要保持抽象的思维     什么是抽象思维呢?真的不好说,抽象的东西往往难以说明白,听了也难以搞明白,还是通过具体的例子来说吧 有这么一个学生请假的场景,如果请假时间一天以内则有班长批准就可以了,三天以内则需要老师批准,超过三天就得

浅谈设计模式的学习(上)

作为一个开发人员,能写出一个漂亮可扩展的代码,绝对是一件令人愉快的事情.那设计模式就是一门必修课! 本文就自己学习设计模式的一点经历做一个记录. 本人在读大学时,为了学习设计模式就买了一本<java与模式>的数据,书籍有一千多页很重.而且价格不菲.没办法,花那么多钱买的不看岂不浪费.于是每天早上读一章,坚持几个月我终于读完了.这几个月真是煎熬啊,几个月下来,回忆一下似乎自己真得也没收获到什么,很悍然啊.难道是书籍不好吗还是我读的不认真?其实在我现在看来都不是.而为什么读完了却什么也没收获到呢?

【数学教学论文】浅谈小学生数学学习兴趣的培养

浅谈小学生数学学习兴趣的培养 作者:刘亚儒 摘要:古代教育家朱熹曾说:"教人未见其兴趣,必不乐学."由此可见,兴趣的培养在教学过程中至关重要,有利于提高数学课堂的教学效率和学生的学习质量.因此,本文对如何培养学生数学学习兴趣进行了进一步探讨. 关键词:小学生:数学:兴趣培养 一.兴趣在小学生数学学习中的重要性 孔子说过:"知之者不如好之者,好之者不如乐之者."所谓"乐",其实就是我们所说的"喜欢",即兴趣.学习兴趣是学生学习的

浅谈MyBatis 标签

MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis .2013年11月迁移到Github. 以上是MyBatis的一个概括:一下列出MyBatis常用标签 <insert> 负责MyBatis添加操作,默认返回影响行数 <delete> 负责MyBatis删除操作,默认返回影响行数 <update> 负责MyBatis修改操作,默

Mybatis在insert操作时返回主键

今天在写项目的时候,遇到一个需求,就是在像数据库插入数据的时候,要保留插入数据的主键,以便后续进行级联时,可以将该主键作为另张表的外键. 但是在正常情况下我们使用插入语句返回的是int型,含义是影响该表数据的条数.但是这时候我们想要的得到的却是主键,这时候就可以对mybatis文件进行配置 如图: 属性详解: parameterType ,入参的全限定类名或类型别名 useGeneratedKeys ,取值范围true|false(默认值), 设置是否使用JDBC的getGenereatedKe

Oracle通过主键id删除记录很慢

问题描述: Oracle通过主键id删除2000条记录很慢,需要花费十二分钟. 解决过程: 1.首先查看SQL的执行计划,执行计划正常,cost只有4,用到了主键索引. 2.查看等待事件, select * from v$session_wait where sid = 507 显示的event是db file sequential read,也没有异常. 3.查看统计信息是否正常 select * from user_tables where table_name = ''; 经检测,统计信息

Oracle之主键(Primary Key)用法详解

Oracle/PLSQL: 主键(Primary Key)用法 1 目标 通过示例讲解如何创建.删除.禁用和开启主键. 2 前言之-什么是主键 在Oracle中,主键指能唯一标识一条记录的单个数据表列或联合的数据表列(联合主键|复合主键).主键用到的数据表列数据不能包含空值.而且,一张表只能包含一个主键. 说明:在Oracle数据库中,联合主键的列不能超过32个.主键可以在创建表时定义或者通过ALTER TABLE语法定义. 3 创建主键之 - 在创建表时定义主键 单列主键示例: CREATE