使用mybatisPlus生成oracle自增序列遇到的坑及解决

 更新时间:2023年03月30日 09:26:22   作者:旗木卡卡西zz  
这篇文章主要介绍了使用mybatisPlus生成oracle自增序列遇到的坑及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

记录一次使用mybatisPlus遇到的坑,在网上找了各种配置,依然没有实现oracle插入数据实现序列自增,原因是引入的mybatisPlus依赖有误。

下面记录下代码:

看看这张图片就知道多坑了 这么多的jar包,我用的是springboot,试了好几个jar包,最终才找到正确的引用。

正确依赖

<!--mybatis plus-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.0.6</version>
        </dependency>

配置文件

mybatis-plus:
#配置mapper.xml路径
  mapper-locations: classpath:/mapper/*.xml
  #配置实体类路径
  type-aliases-package: com.jp.entity
  global-config:
    #主键类型  0:"数据库ID自增", 1:"用户输入ID",2:"全局唯一ID (数字类型唯一ID)", 3:"全局唯一ID UUID";
    id-type: 1
    #驼峰下划线转换
    db-column-underline: true
  configuration:
  #配置打印sql
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

配置类一定不能少,自以为在application.yml文件中配置过就完事了,谁知道还要添加一个配置类来配置oracle序列,就是这里坑了我好久,一定记得加上。

如下:

package com.jp.config;

import com.baomidou.mybatisplus.extension.incrementer.OracleKeyGenerator;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author ljp
 * @date 2020/4/23 22:14
 */
@Configuration
@MapperScan("com.jp.mapper")
public class MybatisPlusConfig {

    @Bean
    public OracleKeyGenerator oracleKeyGenerator() {
        return new OracleKeyGenerator();
    }
}

下面是实体类

package com.jp.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

import java.io.Serializable;
import java.util.Date;

/**
 * @author :Y19090908
 * @date :Created in 2020/3/25 下午 05:17
 */
@Data
@TableName("people")
@KeySequence(value = "seq_people", clazz = Integer.class)
public class People implements Serializable {
    private static final long serialVersionUID = 1110056585174675869L;
    @TableId(value = "ID", type = IdType.INPUT)
    private Integer id;
    private String name;
    private String sex;
    private String city;
    private String job;
    private String money;
    private Date createTime;

    public People() {
    }

    public People(String name, String sex, String city, String job, String money) {
        this.name = name;
        this.sex = sex;
        this.city = city;
        this.job = job;
        this.money = money;
    }

    public People(Integer id, String name, String sex, String city, String job, String money) {
        this.id = id;
        this.name = name;
        this.sex = sex;
        this.city = city;
        this.job = job;
        this.money = money;
    }

}

mapper:

@Mapper
public interface PeopleMapper extends BaseMapper<People> {
    
    List<People> selectDistinct();

    void importExcel(List<People> list);

    void importAll(List<People> list);

    void callInsert(Map<String, Object> map);

    void removeAll();

}

service:

package com.jp.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.jp.bean.ErrorExcelResult;
import com.jp.entity.People;

import java.util.List;

/**
 * @author :Y19090908
 * @date :Created in 2020/3/25 下午 05:24
 */
public interface PeopleService extends IService<People> {

    /**
     * excel導入
     *
     * @param list
     * @return
     */
    Object importExcel(List<People> list) throws Exception;

    List<ErrorExcelResult> importExcelForEach(List<People> list) throws Exception;

    List<People> selectDistinct();
}

实现类

@Service
public class PeopleServiceImpl extends ServiceImpl<PeopleMapper, People> implements PeopleService {

    @Autowired
    private PeopleMapper peopleMapper;

    @Override
    @Transactional(rollbackFor = Exception.class)
    public Object importExcel(List<People> list) throws Exception {
        if (MyStringUtil.isEmpty(list)) {
            throw new Exception("沒有要導入的數據");
        }
        peopleMapper.importAll(list);
        Map<String, Object> map = new HashMap<>();
        peopleMapper.callInsert(map);
        List<People> repeatList = (List<People>) map.get("P_CURSOR");
        List<ErrorExcelResult> errorList = new ArrayList<>();
        ErrorExcelResult errorExcelResult;
        if (!MyStringUtil.isEmpty(repeatList)) {
            for (People p : repeatList) {
                errorExcelResult = new ErrorExcelResult(p.getName(), p.getSex(), p.getCity(), p.getJob(), p.getMoney(), "數據重複");
                errorList.add(errorExcelResult);
            }
        }
//        peopleMapper.removeAll();
        return errorList;
    }

    @Override
    @Transactional(rollbackFor = Exception.class)
    public List<ErrorExcelResult> importExcelForEach(List<People> list) throws Exception {
        if (MyStringUtil.isEmpty(list)) {
            throw new Exception("沒有要導入的數據");
        }
        List<ErrorExcelResult> errorList = new ArrayList<>();
        ErrorExcelResult errorExcelResult;
        List<People> rightList = new ArrayList<>();
        long start = System.currentTimeMillis();
        for (People p : list) {
            //如果重複記錄該條數據
            if (peopleMapper.selectCount(new QueryWrapper<People>().eq("name", p.getName()).eq("sex", p.getSex())) > 0) {
                errorExcelResult = new ErrorExcelResult(p.getName(), p.getSex(), p.getCity(), p.getJob(), p.getMoney(), "該條數據重複");
                errorList.add(errorExcelResult);
                continue;
            }
            rightList.add(p);
        }
        peopleMapper.importExcel(rightList);
//        this.saveBatch(rightList);
        long end = System.currentTimeMillis();
        System.out.println(end - start);
        return errorList;
    }


    @Override
    public List<People> selectDistinct() {
        return peopleMapper.selectDistinct();
    }

}

service实现类是要加@Service注解的,之前会忘记。

下面是新增的接口,还是蛮简单的,只把添加的接口展示出来了。

 @PostMapping("/page/easy/add")
    @ResponseBody
    public Object add(@RequestBody People people) {
        JSONObject jsonObject = new JSONObject();
        try {
            validate(people);
            people.setCreateTime(new Date());
            peopleService.save(people);
            jsonObject.put("code", 0);
            return jsonObject;
        } catch (Exception e) {
            log.error(e.getMessage());
            jsonObject.put("code", 1);
            jsonObject.put("msg", e.getMessage());
            return jsonObject;
        }
    }

只是白天工作的时候一直生成数据库序列自增失败,所以下班想找找原因,代码写的特别简单,就是为了试试能不能生成自增序列。

以下是postman测试传入的参数

传入一些简单数据

以上就是测试的数据,很简单

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java同步容器和并发容器详解

    Java同步容器和并发容器详解

    这篇文章主要介绍了Java同步容器和并发容器详解,容器是Java基础类库中使用频率最高的一部分,Java集合包中提供了大量的容器类来帮组我们简化开发,下面小编和大家来一起学习下吧
    2019-06-06
  • 关于springboot集成阿里云短信的问题

    关于springboot集成阿里云短信的问题

    这篇文章主要介绍了springboot集成阿里云短信的方法,本文通过实例代码图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-11-11
  • java实现简单音乐播放器

    java实现简单音乐播放器

    这篇文章主要为大家详细介绍了java实现简单音乐播放器,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-06-06
  • Spring Boot 连接LDAP的方法

    Spring Boot 连接LDAP的方法

    这篇文章主要介绍了Spring Boot 连接LDAP的方法,仅仅涉及基本的使用ODM来快速实现LDAP增删改查操作。具有一定的参考价值,有兴趣的可以了解一下
    2017-12-12
  • struts2+spring+ibatis框架整合实现增删改查

    struts2+spring+ibatis框架整合实现增删改查

    这篇文章主要为大家详细介绍了struts2+spring+ibatis框架整合实现增删改查操作,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-07-07
  • SpringBoot+Redis+Lua防止IP重复防刷攻击的方法

    SpringBoot+Redis+Lua防止IP重复防刷攻击的方法

    本文主要介绍了SpringBoot+Redis+Lua防止IP重复防刷攻击的方法,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12
  • Springboot中yml文件没有叶子图标的解决

    Springboot中yml文件没有叶子图标的解决

    这篇文章主要介绍了Springboot中yml文件没有叶子图标的解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • JAVA实现Excel和PDF上下标的操作代码

    JAVA实现Excel和PDF上下标的操作代码

    这篇文章主要介绍了JAVA实现Excel和PDF上下标,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-09-09
  • Java内存映射 大文件轻松处理

    Java内存映射 大文件轻松处理

    这篇文章主要介绍了Java内存映射 大文件轻松处理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • Java泛型通配符的使用详解

    Java泛型通配符的使用详解

    本文主要介绍了Java泛型通配符的使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01

最新评论