浅谈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

到此这篇关于浅谈MyBatis-Plus学习之Oracle的主键Sequence设置的方法的文章就介绍到这了,更多相关Mybatis-Plus Oracle 主键Sequence内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(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

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

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

  • 浅谈mybatis中的#和$的区别 以及防止sql注入的方法

    mybatis中的#和$的区别 1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号.如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by "111", 如果传入的值是id,则解析成的sql为order by "id". 2. $将传入的数据直接显示生成在sql中.如:order by $user_id$,如果传入的值是111,那么解析成sql时的值为order by user_id,  如果传入的

  • 浅谈MyBatis循环Map(高级用法)

    今天遇到一个比较特殊的业务,需要对传入的Map数据在映射文件中进行遍历,在之前的学习中,我们也知道MyBatis有默认对集合的操作list和array,但是没有默认的map,所有不能直接写collection="map",如果这么处理,它会当成是根据map.get("map")获取传递value只,==大部分情况下是一个map中是不会有"map"这个key的,于是就是报错==.如果你想用map标识来获取参数map,就需要保证传入的Map参数有@P

  • 浅谈myBatis中的插件机制

    插件的配置与使用 在mybatis-config.xml配置文件中配置plugin结点,比如配置一个自定义的日志插件LogInterceptor和一个开源的分页插件PageInterceptor: <plugins> <plugin interceptor="com.crx.plugindemo.LogInterceptor"></plugin> <plugin interceptor="com.github.pagehelper.P

  • 浅谈Mybatis+mysql 存储Date类型的坑

    场景: 把一个时间字符串转成Date,存进Mysql.时间天数会比实际时间少1天,也可能是小时少了13-14小时 Mysql的时区是CST(使用语句:show VARIABLES LIKE '%time_zone%'; 查) 先放总结: 修改方法: 1. 修改数据库时区 2. 在jdbc.url里加后缀 &serverTimezone=GMT%2B8 3. 代码里设置时区,给SimpleDateFormat.setTimeZone(...) 例外:new Date() 可以直接存为正确时间,其他

  • 浅谈Mybatis获取参数值的方式

    目录 一. Mybatis获取参数值的各种情况 1.mapper接口方法的参数为单个字面量的类型 2.mapper接口方法的参数有多个 3.手动把参数放在map集合中 4.mapper接口方法的参数是实体类型的参数 5.通过@Param注解命名参数(比较常用) 二.总结 三.Param源码分析 Mybatis获取参数值的两种方式:${},#{} ${}本质:字符串拼接,注意:单引号要加上 #{}:本质:占位符赋值 一. Mybatis获取参数值的各种情况 1.mapper接口方法的参数为单个字面

  • 浅谈MyBatis Plus主键设置策略

    根据一次插入失败报错来了解下MyBatis Plus主键设置策略今天学习使用MyBatis Plus,发现使用代码生成器生成对应的实体类.Service和Mapper后,在保存数据时报错 com.baomidou.mybatisplus.exceptions.MybatisPlusException: java.lang.reflect.InvocationTargetException at com.baomidou.mybatisplus.MybatisSqlSessionTemplate$

  • 浅谈mysql可有类似oracle的nvl的函数

    要用ifnull,而不是isnull isnull是判断是否为null,返回值是1表示null或者0表示不为空 ifnull等同于oracle的nvl,用法如下 mysql> select ifnull(1,10); +--------------+ | ifnull(1,10) | +--------------+ |            1 | +--------------+ 1 row in set (0.00 sec) mysql> select ifnull(null,10);

  • 浅谈mybatis中的#和$的区别

    1. #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号.如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by "111", 如果传入的值是id,则解析成的sql为order by "id". 2. $将传入的数据直接显示生成在sql中.如:order by $user_id$,如果传入的值是111,那么解析成sql时的值为order by user_id, 如果传入的值是id,则解析成的sql为ord

  • 浅谈Mybatis版本升级踩坑及背后原理分析

    1.背景 某一天的晚上,系统服务正在进行常规需求的上线,因为发布时,提示统一的pom版本需要升级,于是从 1.3.9.6 升级至 1.4.2.1. 当服务开始上线后,开始陆续出现了一些更新系统交互日志方面的报警,属于系统辅助流程,报警下图所示, 具体系统数据已脱敏,内容是Mybatis相关的报警,在进行类型转换的时候,产生了强转错误. 更新开票请求返回日志, id:{#######}, response:{{"code":XXX,"data":{"call

随机推荐