Springboot+MybatisPlus+Oracle实现主键自增

博主接到将项目的MySQL数据库换成Oracle数据库的任务,配置数据库、建表调试一上午,后卡在oracle主键问题,次日才解决。文中贴出application.yml配置和model实体类配置,还提到解决主键ID插入及获取问题的方法。

上周周一,本来刚过完周末,高高兴兴,老大突然安排了个活,要在一天内把项目的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数据库的配置教程 #### 1. 引入相关依赖 在`pom.xml`文件中引入SpringBootMyBatisPlus以及Oracle相关的依赖。由于Oracle数据库的驱动为收费版本,需要手动将Oracle JDBC驱动包导入Maven仓库[^1]。 ```xml <dependencies> <!-- SpringBoot Starter --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> <version>2.1.4.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>2.1.4.RELEASE</version> </dependency> <!-- MyBatisPlus Starter --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.3</version> </dependency> <!-- Oracle Driver (需手动导入Maven仓库) --> <dependency> <groupId>com.oracle.database.jdbc</groupId> <artifactId>ojdbc8</artifactId> <version>19.8.0.0</version> </dependency> </dependencies> ``` #### 2. 配置数据源 在`application.yml`或`application.properties`文件中配置Oracle数据库的数据源信息[^3]。 ```yaml server: port: 80 spring: datasource: driver-class-name: oracle.jdbc.OracleDriver url: jdbc:oracle:thin:@192.168.8.222:1521:orcl username: data password: 123 ``` #### 3. 配置MyBatisPlus 创建一个配置类`MyBatisPlusConfig`,用于配置分页插件、逻辑删除插件以及Oracle主键生成器[^4]。 ```java import com.baomidou.mybatisplus.core.injector.ISqlInjector; import com.baomidou.mybatisplus.extension.incrementer.OracleKeyGenerator; import com.baomidou.mybatisplus.extension.injector.LogicSqlInjector; import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor; import org.mybatis.spring.annotation.MapperScan; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration @MapperScan("com.XXX.*.mapper") public class MyBatisPlusConfig { /** * Oracle主键配置 */ @Bean public OracleKeyGenerator oracleKeyGenerator() { return new OracleKeyGenerator(); } /** * 逻辑删除插件 */ @Bean public ISqlInjector sqlInjector() { return new LogicSqlInjector(); } /** * 分页插件 */ @Bean public PaginationInterceptor paginationInterceptor() { return new PaginationInterceptor(); } } ``` #### 4. 启动类配置SpringBoot启动类上添加`@MapperScan`注解,指定Mapper接口所在的包路径[^5]。 ```java import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.mybatis.spring.annotation.MapperScan; @SpringBootApplication @MapperScan("com.XXX.*.mapper") public class AppApplication { public static void main(String[] args) { SpringApplication.run(AppApplication.class, args); } } ``` #### 5. 测试代码生成 可以通过MyBatisPlus提供的代码生成器快速生成实体类、Mapper接口、Service层及Controller层代码[^5]。 ```java import com.baomidou.mybatisplus.generator.AutoGenerator; import com.baomidou.mybatisplus.generator.config.DataSourceConfig; import com.baomidou.mybatisplus.generator.config.GlobalConfig; import com.baomidou.mybatisplus.generator.config.PackageConfig; import com.baomidou.mybatisplus.generator.config.StrategyConfig; import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy; public class CodeGenerator { public static void main(String[] args) { AutoGenerator mpg = new AutoGenerator(); // 全局配置 GlobalConfig gc = new GlobalConfig(); gc.setOutputDir(System.getProperty("user.dir") + "/src/main/java"); gc.setAuthor("Your Name"); gc.setOpen(false); mpg.setGlobalConfig(gc); // 数据源配置 DataSourceConfig dsc = new DataSourceConfig(); dsc.setUrl("jdbc:oracle:thin:@192.168.8.222:1521:orcl"); dsc.setDriverName("oracle.jdbc.OracleDriver"); dsc.setUsername("data"); dsc.setPassword("123"); mpg.setDataSource(dsc); // 包配置 PackageConfig pc = new PackageConfig(); pc.setParent("com.XXX"); pc.setModuleName("example"); mpg.setPackageInfo(pc); // 策略配置 StrategyConfig strategy = new StrategyConfig(); strategy.setNaming(NamingStrategy.underline_to_camel); strategy.setColumnNaming(NamingStrategy.underline_to_camel); strategy.setEntityLombokModel(true); strategy.setRestControllerStyle(true); mpg.setStrategy(strategy); mpg.execute(); } } ``` #### 6. 浏览器验证 在Controller层编写测试方法,通过Postman或浏览器访问接口,验证Oracle数据库连接是否正常[^5]。 ```java import com.XXX.example.mapper.UserMapper; import com.XXX.example.entity.User; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.List; @RestController @RequestMapping("/users") public class UserController { @Autowired private UserMapper userMapper; @GetMapping public List<User> getAllUsers() { return userMapper.selectList(null); } } ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值