使用mybatisPlus生成oracle自增序列遇到的坑及解決
記錄一次使用mybatisPlus遇到的坑,在網(wǎng)上找了各種配置,依然沒有實(shí)現(xiàn)oracle插入數(shù)據(jù)實(shí)現(xiàn)序列自增,原因是引入的mybatisPlus依賴有誤。
下面記錄下代碼:
正確依賴
<!--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ù)
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
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)問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06Java設(shè)計(jì)模式之原型模式詳細(xì)解讀
這篇文章主要介紹了Java設(shè)計(jì)模式之原型模式詳細(xì)解讀,原型模式屬于創(chuàng)建型設(shè)計(jì)模式,用于創(chuàng)建重復(fù)的對象,且同時(shí)又保證了性能,該設(shè)計(jì)模式的好處是將對象的創(chuàng)建與調(diào)用方分離,需要的朋友可以參考下2023-12-12SpringMVC使用自定義驗(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-07Spring?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)
這篇文章主要為大家詳細(xì)介紹了第三方網(wǎng)站微信登錄的java代碼實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-04-04java8學(xué)習(xí)教程之函數(shù)引用的使用方法
這篇文章主要給大家介紹了關(guān)于java8學(xué)習(xí)教程之函數(shù)引用的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)下吧。2017-09-09