mapper mysql 主鍵_實現通用mapper主鍵策略兼容mysql和oracle

【原創文章,轉載請注明原文章地址,謝謝!】

1.直接用官方提供的注解方法是無法達到兼容效果的

2.跟蹤源碼看看是否有其他方法

6b532f59ad44840e4652b404788eb271.png

3.這里有個genSql,可以看一下這個類

c42333520af38dc415df15b49ad74ebb.png

4.創建一個自定義的處理類實現GenSql(代碼中是我實際項目中用到的策略,部分代碼可以忽略)

package com.wisedu.common.handle;

import com.wisedu.common.utils.EnvironmentUtil;

import com.wisedu.common.utils.StringUtils;

import lombok.Data;

import tk.mybatis.mapper.code.ORDER;

import tk.mybatis.mapper.entity.EntityColumn;

import tk.mybatis.mapper.entity.EntityTable;

import tk.mybatis.mapper.gensql.GenSql;

import javax.persistence.Table;

/**

* @Author meiwenjun

* @Description 主鍵策略handle

* @Date 2020/3/5

*/

@Data

public class GenSqlHandle implements GenSql {

@Override

public String genSql(EntityTable entityTable, EntityColumn entityColumn) {

if (StringUtils.isNotEmpty(EnvironmentUtil.getEnvironment())) {

Class> entityClass = entityTable.getEntityClass();

if (!entityClass.isAnnotationPresent(Table.class)) {

throw new RuntimeException(entityClass.getName() + "[email?protected]");

}

String environment = EnvironmentUtil.getEnvironment();

if (environment.contains("oracle")) {

entityColumn.setOrder(ORDER.BEFORE);

// entityColumn.setUseJavaType(true);

//獲取表名

Table classAnnotation = entityClass.getAnnotation(Table.class);

//拼接序列名稱

String sequenceName = StringUtils.substringAfter(classAnnotation.name().toLowerCase(), "pms_") + "_seq";

return "SELECT " + sequenceName + ".nextval from dual";

} else {

entityColumn.setOrder(ORDER.AFTER);

return "SELECT LAST_INSERT_ID()";

}

}else {

throw new RuntimeException("獲取環境變量失敗");

}

}

}

5.POJO類中可以用以下注解即可(@KeySql(gensql = GenSqlHandle.class)

@Id

@KeySql(genSql = GenSqlHandle.class)

private Integer id;

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/396306.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/396306.shtml
英文地址,請注明出處:http://en.pswp.cn/news/396306.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

權限分配界面 純手工 僅用到bootstrap的架構 以及 c標簽

<div class"form-group"> <div class"row"> <label class"col-sm-2 control-label">配置權限</label> <div class"col-sm-10"> <c:forEach var"m" items…

數據管理與數據庫 大學課程_根據數據顯示的50種最佳免費在線大學課程

數據管理與數據庫 大學課程When I launched Class Central back in November 2011, there were around 18 or so free online courses, and almost all of them were from Stanford.當我在2011年11月推出Class Central時&#xff0c;大約有18項免費在線課程&#xff0c;幾乎所有…

每天一個linux命令(12):more命令

more命令&#xff0c;功能類似 cat &#xff0c;cat命令是整個文件的內容從上到下顯示在屏幕上。 more會以一頁一頁的顯示方便使用者逐頁閱讀&#xff0c;而最基本的指令就是按空白鍵&#xff08;space&#xff09;就往下一頁顯示&#xff0c;按 b 鍵就會往回&#xff08;back&…

java 面試題 由淺入深_面試官由淺入深的面試套路

閱讀文本大概需要3分鐘。從上圖看來面試官面試是有套路的&#xff0c;一不小心就一直被套路。0x01&#xff1a;Thread面試官&#xff1a;創建線程有哪幾種方式&#xff1f;應聘者&#xff1a;繼承Thread類、實現Runable接口、使用j.u.c中的線程池面試官&#xff1a;繼承Thread類…

怎么用centos7運行c語言程序_centos如何編譯c語言代碼

centos如何編譯c語言代碼,文件,選項,作用,鏈接,程序 centos如何編譯c語言代碼 易采站長站,站長之家為您整理了centos如何編譯c語言代碼的相關內容。 編譯c,c++代碼 安裝gcc 1、使用如下命令查詢 centos 官方gcc的所有包:yum -list gcc* 可安裝的軟件包gcc.x86_64gcc-c++.x86…

第四篇:基本數據類型及用法(1)

字符串&#xff08;str型&#xff09; -可以做加法&#xff0c;乘法 乘法例&#xff1a; n1"alex" n2n1*3 print(n2) #結果&#xff1a;alexalexalex -首字母大寫: capitalize() -所有字母變小寫: casefold()、lower() #casefold更牛&#xff0c;很多未知的對應關系也…

Android Studio 錯誤集

錯誤列表與解決方案: 1.Android studio Gradle project sync failed Android studio 構建項目出錯 Error:Unable to start the daemon process: could not reserve enough space for object heap.Please assign more memory to Gradle in the projects gradle.properties file.…

需求簡報_代碼簡報:我如何通過做自己喜歡的事情來獲得頂級技術實習

需求簡報Here are three stories we published this week that are worth your time:這是我們本周發布的三個值得您關注的故事&#xff1a; How I landed a top-tier tech internship by doing something I love: 7 minute read 我如何通過做自己喜歡的事情獲得一流的技術實習…

review what i studied `date` - 2017-3-31

在11 月份內&#xff0c;每天的早上6 點到12 點中&#xff0c;每隔2 小時執行一次/usr/bin/httpd.sh 怎么實現0 6-12/2 * 11 * /usr/bin/httpd.shNginx中的ip_hash是指講一個地址的請求永久分發至后端的一臺RealServer&#xff0c;直至這臺RealServer宕機Zabbix和Nagios的工作原…

java string轉long報錯_java.lang.Integer cannot be cast to java.lang.Long解決辦法

你好我是辰兮&#xff0c;本次是項目遇到的java.lang.Integer cannot be cast to java.lang.Long異常以及相對應的解決方案。文章目錄一、實戰問題用postman測試數據報錯&#xff0c;類型轉換異常&#xff01;如何將Integer類型轉換成長整形 &#xff1f;先轉成String型&#x…

pyqt 界面關閉信號_木辛老師的編程課堂之Python和Qt實戰慕課軟件開發:增加關閉按鈕...

軟件實戰開始&#xff0c;快速提供編程能力&#xff1b;通過實戰&#xff0c;分析產品需求&#xff0c;梳理設計需求&#xff0c;提升項目分析和架構的能力。快點跟著木辛老師一起學習吧&#xff01;請點擊右上角“關注”按鈕關注我們喲&#xff1a;跟著木辛老師學習Python編程…

從零開始nodejs系列文章

http://blog.fens.me/series-nodejs/轉載于:https://www.cnblogs.com/chinafbi/p/5394482.html

Leetcode589.N-ary Tree Preorder TraversalN叉樹的前序遍歷

給定一個 N 叉樹&#xff0c;返回其節點值的前序遍歷。 class Node { public:int val;vector<Node*> children;Node() {}Node(int _val, vector<Node*> _children) {val _val;children _children;} };//遞歸 class Solution { public:vector<int> res;vect…

打破雙親委派么,怎么打破_質量保證被打破。 這就是我們如何使其像其他所有東西一樣敏捷。...

打破雙親委派么,怎么打破by Derwin由Derwin 質量保證被打破。 這就是我們如何使其像其他所有東西一樣敏捷。 (Quality Assurance is broken. Here’s how we can make it as agile as everything else.) Process is the key to great software.過程是出色軟件的關鍵。 In gen…

android java.lang.linkageerror_使用eclipse中的maven構建web應用出現 java.lang.LinkageError異常...

????: Servlet.service() for servlet [jsp] in context with path [/webdemo] threw exception [java.lang.LinkageError: loader constraint violation: loader (instance of org/apache/jasper/servlet/JasperLoader) previously initiated loading for a different typ…

android 鍵盤遮蓋輸入框_Android軟鍵盤擋住輸入框的終極解決方案

前言開發做得久了&#xff0c;總免不了會遇到各種坑。而在Android開發的路上&#xff0c;『軟鍵盤擋住了輸入框』這個坑&#xff0c;可謂是一個曠日持久的巨坑——來來來&#xff0c;我們慢慢看。入門篇最基本的情況&#xff0c;如圖所示&#xff1a;在頁面底部有一個EditText&…

最全面的幾何畫板實用教程視頻免費下載

不同的選擇就會有不同的人生夜&#xff0c;這里小編為奮斗在教學一線的老師們送個大福利&#xff0c;這也是老師們充實自己的好去處。作為數學老師一枚&#xff0c;在平時的教學中應該用到很多教學輔助軟件&#xff0c;而幾何畫板就是其中一款。眾所周知&#xff0c;幾何畫板是…

Redis(1):簡介

2019獨角獸企業重金招聘Python工程師標準>>> Redis之父Salvatore Sanfilippo于2009年將Redis開源。VMware公司從2010年開始贊助Redis的開發&#xff0c;Salvatore Sanfilippo和Pieter Noordhuis(另一名主要的代碼貢獻者)同年加入VMware&#xff0c;全職開發Redis。R…

小程序服務器域名5次_為什么您不應該在100美元的服務器上用5天的時間構建面向500,000個用戶的應用程序...

小程序服務器域名5次by Howard Lo霍華德羅 為什么您不應該在100美元的服務器上用5天的時間構建面向500,000個用戶的應用程序 (Why you shouldn’t build an app aimed at 500,000 users in 5 days on a $100 server) A few days ago, I read Erik Duindam’s “How I built an…

tp5 異步處理_tp5框架ajax異步添加數據的代碼實現

本篇文章給大家帶來的內容是關于tp5框架ajax異步添加數據的代碼實現&#xff0c;有一定的參考價值&#xff0c;有需要的朋友可以參考一下&#xff0c;希望對你有所幫助。ajax異步無刷新處理數據的用戶體驗還是不錯的&#xff0c;在我們的項目開發中算是經常使用到的一個知識點。…