起因

  由于需要将新数据同步到另外的数据库,所以需要使用dblink进行操作,但是dblink不支持写入操作,因此需要调用写好的存储过程才能实现将新数据插入新数据的同时插入旧数据库。

  准备工作

  预先准备好新旧两个数据库

  旧的数据库

MybatisPlus中调用Oracle存储过程_第1张图片

  新的数据库

MybatisPlus中调用Oracle存储过程_第2张图片

  对应的实体为:

 MybatisPlus中调用Oracle存储过程_第3张图片

MybatisPlus中调用Oracle存储过程_第4张图片

  创建存储过程

  创建一个存储过程用于将新数据库的数据字段和旧的数据库字段映射上,同时使用序列自增作为id值,将新数据插入旧数据库中。

MybatisPlus中调用Oracle存储过程_第5张图片

MybatisPlus中调用Oracle存储过程_第6张图片

  创建mapper中的方法

MybatisPlus中调用Oracle存储过程_第7张图片

  注意点:

  statementType 设置为 CALLABLE

  在存储过程中使用参数时,除了写上必要的属性名外,还必须指定参数的 mode(模式),可选值为 IN、OUT、INOUT 三种,入参使用 IN,出参使用 OUT,输入输出参数使用 INOUT。

  OUT 模式的参数,必须指定 jdbcType。因为在 IN 模式下,MyBatis 提供了默认的 jdbcType,在 OUT 模式下没有提供,因此必须指定 jdbcType

  当入参存在无法识别,执行报错时,最好指定 jdbcType

  创建mapper接口

 MybatisPlus中调用Oracle存储过程_第8张图片

  这里定义的是void方法,但是实际上是会返回NewUser实体对象,所以可以通过get方法获取属性值,这就是为什么在实体中定义了一个oldUserId,但是它不是数据表中真实存在的字段 @TableField(exist = false)

  创建controller方法

  这里为了方便就直接在controller中写方法调用了。

MybatisPlus中调用Oracle存储过程_第9张图片

  执行的debug日志

MybatisPlus中调用Oracle存储过程_第10张图片