亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

 更新時(shí)間:2023年03月30日 09:26:22   作者:旗木卡卡西zz  
這篇文章主要介紹了使用mybatisPlus生成oracle自增序列遇到的坑及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

記錄一次使用mybatisPlus遇到的坑,在網(wǎng)上找了各種配置,依然沒有實(shí)現(xiàn)oracle插入數(shù)據(jù)實(shí)現(xiàn)序列自增,原因是引入的mybatisPlus依賴有誤。

下面記錄下代碼:

看看這張圖片就知道多坑了 這么多的jar包,我用的是springboot,試了好幾個(gè)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
  #配置實(shí)體類路徑
  type-aliases-package: com.jp.entity
  global-config:
    #主鍵類型  0:"數(shù)據(jù)庫ID自增", 1:"用戶輸入ID",2:"全局唯一ID (數(shù)字類型唯一ID)", 3:"全局唯一ID UUID";
    id-type: 1
    #駝峰下劃線轉(zhuǎn)換
    db-column-underline: true
  configuration:
  #配置打印sql
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

配置類一定不能少,自以為在application.yml文件中配置過就完事了,誰知道還要添加一個(gè)配置類來配置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();
    }
}

下面是實(shí)體類

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導(dǎo)入
     *
     * @param list
     * @return
     */
    Object importExcel(List<People> list) throws Exception;

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

    List<People> selectDistinct();
}

實(shí)現(xiàn)類

@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("沒有要導(dǎo)入的數(shù)據(jù)");
        }
        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(), "數(shù)據(jù)重複");
                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("沒有要導(dǎo)入的數(shù)據(jù)");
        }
        List<ErrorExcelResult> errorList = new ArrayList<>();
        ErrorExcelResult errorExcelResult;
        List<People> rightList = new ArrayList<>();
        long start = System.currentTimeMillis();
        for (People p : list) {
            //如果重複記錄該條數(shù)據(jù)
            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(), "該條數(shù)據(jù)重複");
                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實(shí)現(xiàn)類是要加@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;
        }
    }

只是白天工作的時(shí)候一直生成數(shù)據(jù)庫序列自增失敗,所以下班想找找原因,代碼寫的特別簡單,就是為了試試能不能生成自增序列。

以下是postman測試傳入的參數(shù)

傳入一些簡單數(shù)據(jù)

以上就是測試的數(shù)據(jù),很簡單

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • java 定時(shí)器Timer和TimerTask的使用詳解(執(zhí)行和暫停)

    java 定時(shí)器Timer和TimerTask的使用詳解(執(zhí)行和暫停)

    這篇文章主要介紹了java 定時(shí)器Timer和TimerTask的使用詳解(執(zhí)行和暫停),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2023-11-11
  • 解決rocketmq-spring-boot-starter導(dǎo)致的多消費(fèi)者實(shí)例重復(fù)消費(fèi)問題

    解決rocketmq-spring-boot-starter導(dǎo)致的多消費(fèi)者實(shí)例重復(fù)消費(fèi)問題

    這篇文章主要介紹了解決rocketmq-spring-boot-starter導(dǎo)致的多消費(fèi)者實(shí)例重復(fù)消費(fèi)問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • Java設(shè)計(jì)模式之原型模式詳細(xì)解讀

    Java設(shè)計(jì)模式之原型模式詳細(xì)解讀

    這篇文章主要介紹了Java設(shè)計(jì)模式之原型模式詳細(xì)解讀,原型模式屬于創(chuàng)建型設(shè)計(jì)模式,用于創(chuàng)建重復(fù)的對象,且同時(shí)又保證了性能,該設(shè)計(jì)模式的好處是將對象的創(chuàng)建與調(diào)用方分離,需要的朋友可以參考下
    2023-12-12
  • SpringMVC使用自定義驗(yàn)證器進(jìn)行數(shù)據(jù)驗(yàn)證的方法

    SpringMVC使用自定義驗(yàn)證器進(jìn)行數(shù)據(jù)驗(yàn)證的方法

    SpringMVC?提供了強(qiáng)大的數(shù)據(jù)驗(yàn)證機(jī)制,可以方便地驗(yàn)證表單提交的數(shù)據(jù),除了自帶的驗(yàn)證器之外,SpringMVC?還支持自定義驗(yàn)證器,允許開發(fā)者根據(jù)業(yè)務(wù)需求自定義驗(yàn)證規(guī)則,本文將介紹如何在?SpringMVC?中使用自定義驗(yàn)證器
    2023-07-07
  • Spring?Boot項(xiàng)目Jar包加密實(shí)戰(zhàn)教程

    Spring?Boot項(xiàng)目Jar包加密實(shí)戰(zhàn)教程

    本文詳細(xì)介紹了如何在Spring?Boot項(xiàng)目中實(shí)現(xiàn)Jar包加密,我們首先了解了Jar包加密的基本概念和作用,然后學(xué)習(xí)了如何使用Spring?Boot的Jar工具和第三方庫來實(shí)現(xiàn)Jar包的加密和解密,感興趣的朋友一起看看吧
    2024-02-02
  • 第三方網(wǎng)站微信登錄java代碼實(shí)現(xiàn)

    第三方網(wǎng)站微信登錄java代碼實(shí)現(xiàn)

    這篇文章主要為大家詳細(xì)介紹了第三方網(wǎng)站微信登錄的java代碼實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • 基于HashMap遍歷和使用方法(詳解)

    基于HashMap遍歷和使用方法(詳解)

    下面小編就為大家?guī)硪黄贖ashMap遍歷和使用方法(詳解)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-08-08
  • 深入介紹Java對象初始化

    深入介紹Java對象初始化

    本文對Java如何執(zhí)行對象的初始化做一個(gè)詳細(xì)深入地介紹。有需要的小伙伴們可以參考。
    2016-07-07
  • java8學(xué)習(xí)教程之函數(shù)引用的使用方法

    java8學(xué)習(xí)教程之函數(shù)引用的使用方法

    這篇文章主要給大家介紹了關(guān)于java8學(xué)習(xí)教程之函數(shù)引用的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)下吧。
    2017-09-09
  • java中使用interrupt通知線程停止詳析

    java中使用interrupt通知線程停止詳析

    這篇文章主要介紹了java中使用interrupt通知線程停止詳析,文章介紹的是使用interrupt來通知線程停止運(yùn)行,而不是強(qiáng)制停止,詳細(xì)內(nèi)容需要的小伙伴可以參考一下
    2022-09-09

最新評論