日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

mybatis plus代碼生成工具的實現代碼

瀏覽:115日期:2023-10-19 13:37:17
前言:

原本想使用AutoGenerator 是 MyBatis-Plus 的官方代碼生成器 ,嘗試了一下,竟然報錯,原因可能是MyBatis-Plus和mybatis-plus-generator 的版本不一致,因為我用的MyBatis-Plus 的版本是3.42 ,但是mybatis-plus-generator的3.4.2不知道怎么了,下載不下來,只能下載3.4.1,發現運行起來老是報錯,還有一堆配置說明要看,于是自己手寫生成代碼的工具類,覺得更簡單些。分享給大家,請多多指教。

pom文件引入java-mysql 驅動依賴

<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.22</version></dependency>

單類代碼實現,復制粘貼到編輯器里,主方法運行即可。

import org.apache.commons.lang3.StringUtils; import java.io.File;import java.io.FileOutputStream;import java.sql.Connection;import java.sql.DatabaseMetaData;import java.sql.DriverManager;import java.sql.ResultSet;import java.text.SimpleDateFormat;import java.util.Date; /** * mybatis plus通用生成工具 * 可生成業務接口、mapper接口、實體類 * * @author tarzan Liu * @date 2021/4/10 19:44 */ public class MyBatisPlusTools { private static final String driver = 'com.mysql.cj.jdbc.Driver';//驅動 private static final String user = 'root'; //數據庫賬號 private static final String pwd = '123456'; //數據庫密碼 private static final String url = 'jdbc:mysql://127.0.0.1:3306/ofcms' + '?user=' + user + '&password=' + pwd+'&useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull'; //鏈接參數 private static String tableName = 'of_cms_ad'; // 數據庫表名 private static String aliasName = 'cms_ad'; // 數據庫別名,可以與數據庫表名相同 private static final String packagePath = 'com/tarzan/cms'; //mapper.xml命名空間路徑 private static final String packageName = 'com.tarzan.cms'; //mapper.xml命名空間路徑 private static final String author = 'tarzan'; // 作者 private static final String rootPathName = 'src/main/java/'; // 默認生成主文件夾路徑 private static Connection getConnection = null; static SimpleDateFormat format = new SimpleDateFormat('yyyy-MM-dd HH:mm:ss'); /** * 鏈接數據庫 */ private static Connection getConnections() {try { Class.forName(driver); getConnection = DriverManager.getConnection(url);} catch (Exception e) { e.printStackTrace();}return getConnection; } /** * 格式化默認值 */ private static String defaultValue(String value) {if (StringUtils.isNotBlank(value)) { return ';默認值:' + value;}{ return '';} } private static String getAliasName(String tableName,String prefix){return tableName.substring(prefix.length()); } /** * 格式化數據類型 * 返回的是基本類型的包裝類 * 如果使用基本數據類型long */ private static String formatType(String typeValue) { if ('bit'.equalsIgnoreCase(typeValue)) { return 'Boolean';}else if (typeValue.equalsIgnoreCase('int') || typeValue.equalsIgnoreCase('int unsigned')|| typeValue.equalsIgnoreCase('tinyint') || typeValue.equalsIgnoreCase('tinyint unsigned')|| typeValue.equalsIgnoreCase('smallint') || typeValue.equalsIgnoreCase('smallint unsigned')|| typeValue.equalsIgnoreCase('mediumint') || typeValue.equalsIgnoreCase('mediumint unsigned')) { return 'Integer';} else if (typeValue.equalsIgnoreCase('bigint') || typeValue.equalsIgnoreCase('bigint unsigned')) { return 'Long';} else if (typeValue.equalsIgnoreCase('float') || typeValue.equalsIgnoreCase('float unsigned')) { return 'Float';} else if (typeValue.equalsIgnoreCase('decimal') || typeValue.equalsIgnoreCase('decimal unsigned') || typeValue.equalsIgnoreCase('numeric') || typeValue.equalsIgnoreCase('numeric unsigned')|| typeValue.equalsIgnoreCase('real') || typeValue.equalsIgnoreCase('real unsigned') || typeValue.equalsIgnoreCase('money') || typeValue.equalsIgnoreCase('money unsigned')|| typeValue.equalsIgnoreCase('smallmoney') || typeValue.equalsIgnoreCase('smallmoney unsigned')) { return 'Double';} else if (typeValue.equalsIgnoreCase('varchar') || typeValue.equalsIgnoreCase('char')|| typeValue.equalsIgnoreCase('nvarchar') || typeValue.equalsIgnoreCase('nchar')|| typeValue.equalsIgnoreCase('text')) { return 'String';} else if (typeValue.equalsIgnoreCase('datetime')) { return 'Date';} else if (typeValue.equalsIgnoreCase('image')) { return 'Blod';} else { return 'Long';} } /** * 駝峰轉換 */ private static String columnToProperty(String column) {StringBuilder result = new StringBuilder();// 快速檢查if (column == null || column.isEmpty()) { // 沒必要轉換 return '';}else column =column.toLowerCase(); if (!column.contains('_')) { // 不含下劃線,僅將首字母小寫 return column.substring(0, 1).toLowerCase() + column.substring(1);} else { // 用下劃線將原始字符串分割 String[] columns = column.split('_'); for (String columnSplit : columns) {// 跳過原始字符串中開頭、結尾的下換線或雙重下劃線if (columnSplit.isEmpty()) { continue;}// 處理真正的駝峰片段if (result.length() == 0) { // 第一個駝峰片段,全部字母都小寫 result.append(columnSplit.toLowerCase());} else { // 其他的駝峰片段,首字母大寫 result.append(columnSplit.substring(0, 1).toUpperCase()).append(columnSplit.substring(1).toLowerCase());} } return result.toString();} } /** * 實體名稱轉換 */ private static String formatBeanName(String column) {StringBuilder result = new StringBuilder();// 快速檢查if (column == null || column.isEmpty()) { // 沒必要轉換 return '';} else if (!column.contains('_')) { // 不含下劃線,僅將首字母大寫 return column.substring(0, 1).toUpperCase() + column.substring(1);} else { // 用下劃線將原始字符串分割 String[] columns = column.split('_'); for (String columnSplit : columns) {// 跳過原始字符串中開頭、結尾的下換線或雙重下劃線if (columnSplit.isEmpty()) { continue;}// 處理真正的駝峰片段result.append(columnSplit.substring(0, 1).toUpperCase()).append(columnSplit.substring(1).toLowerCase()); } return result.toString();} } /** * 實體類字段 */ private static void getBean(String tableName,String aliasName) {getConnection = getConnections();StringBuilder sb = new StringBuilder();try { DatabaseMetaData dbmd = getConnection.getMetaData(); ResultSet rs = dbmd.getColumns(null, '%', tableName, '%'); String beanName = formatBeanName(aliasName); sb.append('package '+packageName+'.entity;nn'); sb.append('import com.baomidou.mybatisplus.annotation.TableName;n'); sb.append('import lombok.Data;n'); int length=sb.length(); boolean dateFlag=false; sb.append( ' /**n' + ' * @author ' + author + 'n' + ' * @date '+ format.format(new Date())+'n' + ' */n' +'@Datan' +'@TableName(''+tableName+'')n' + 'public class '+beanName+'Entity {n'); while (rs.next()) {if(formatType(rs.getString('TYPE_NAME')).equals('Date')){ dateFlag=true;}sb.append('t//').append(rs.getString('REMARKS')).append(defaultValue(rs.getString('COLUMN_DEF'))).append('n');sb.append('tprivate ').append(formatType(rs.getString('TYPE_NAME'))).append(' ').append(columnToProperty(rs.getString('COLUMN_NAME'))).append(';n'); } sb.append('} '); if(dateFlag){sb.insert(length, 'import java.util.Date;n'); }} catch (Exception e) { e.printStackTrace();}write(sb.toString(),'Entity.java','entity');System.err.println('n類型:JAVA數據層實體類(bean.java)' + 'n狀態:成功' + 'n時間:' + format.format(new Date()) + 'n'); } /** * 生成DAO層接口 */ private static void getMapper(String tableName,String aliasName) {StringBuilder sb = new StringBuilder();try { String beanName = formatBeanName(aliasName); sb.append('package '+packageName+'.mapper;nn'); sb.append('import com.baomidou.mybatisplus.core.mapper.BaseMapper;n'); sb.append('import '+packageName+'.entity.'+beanName+'Entity;n'); sb.append( '/**n' + ' * @author ' + author + 'n' + ' * @date '+ format.format(new Date())+'n' + ' */n' + 'public interface '+beanName+'Mapper extends BaseMapper<'+beanName+'Entity>{n' + ' n' + '}');} catch (Exception e) { e.printStackTrace();}write(sb.toString(),'Mapper.java','mapper');System.err.println('n類型:JAVA數據持久層接口(dao.java)' + 'n狀態:成功' + 'n時間:' + format.format(new Date()) + 'n'); } /** * 生成SERVICE層接口 */ private static void getService(String tableName,String aliasName) {StringBuilder sb = new StringBuilder();try { String beanName = formatBeanName(aliasName); sb.append('package '+packageName+'.service;nn'); sb.append('import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;n'); sb.append('import org.springframework.stereotype.Service;n'); sb.append('import '+packageName+'.mapper.'+beanName+'Mapper;n'); sb.append('import '+packageName+'.entity.'+beanName+'Entity;n'); sb.append( '/**n' + ' * @author ' + author + 'n' + ' * @date '+ format.format(new Date())+'n' + ' */n' +'@Servicen' + 'public class '+beanName+'Service extends ServiceImpl<'+beanName+'Mapper, '+beanName+'Entity>{n' + 'n' + '}');} catch (Exception e) { e.printStackTrace();}write(sb.toString(),'Service.java','service');System.err.println('n類型:JAVA業務層接口(service.java)' + 'n狀態:成功' + 'n時間:' + format.format(new Date()) + 'n'); } /** * 寫文件,支持中文字符,在linux redhad下測試過 * @param str 文本內容 * @param name 文本名稱 * */ private static void write(String str, String name,String type) {try { File dir = new File(rootPathName +packagePath+ '/' + type); dir.mkdirs(); String path = dir.getPath() + '/' + formatBeanName(aliasName)+name; File file = new File(path); if (!file.exists())file.createNewFile();FileOutputStream out = new FileOutputStream(file, false); //如果追加方式用true StringBuilder sb = new StringBuilder(); sb.append(str + 'n'); out.write(sb.toString().getBytes('utf-8'));//注意需要轉換對應的字符集 out.close();} catch (Exception e) { e.printStackTrace();} } //一次生產所有表 private static void tableNames() {getConnection = getConnections();try { DatabaseMetaData dbmd = getConnection.getMetaData(); ResultSet rs = dbmd.getTables(getConnection.getCatalog(), null, null, new String[] { 'TABLE' }); while (rs.next()) {tableName=rs.getString('TABLE_NAME');aliasName=getAliasName(tableName,'of_');//實體getBean(tableName,aliasName);//dao層接口getMapper(tableName,aliasName);//業務類接口getService(tableName,aliasName); }} catch (Exception e) { e.printStackTrace();} } public static void main(String[] args) { // tableNames();//實體 getBean(tableName,aliasName); //mapper接口 getMapper(tableName,aliasName);//業務類接口 getService(tableName,aliasName); } }

生成文件截圖

實體

mybatis plus代碼生成工具的實現代碼

mapper

mybatis plus代碼生成工具的實現代碼

service

mybatis plus代碼生成工具的實現代碼

到此這篇關于mybatis plus代碼生成工具的實現代碼的文章就介紹到這了,更多相關mybatis plus代碼生成工具內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Mybatis 數據庫
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩精品一页| 精品一区二区三区四区五区| 四虎8848精品成人免费网站| 国产精品红桃| 国产精品扒开腿做爽爽爽软件| 日韩二区三区四区| 日韩av一级片| 国产精品九九| 国产亚洲人成a在线v网站| 国产精品欧美大片| 久久久久伊人| 日韩国产网站| 国产视频一区在线观看一区免费| 亚洲精品1区| 亚洲精品美女| 久久国产人妖系列| 久久精品天堂| 久久久精品日韩| 影音国产精品| 日韩精品亚洲专区在线观看| 国产精一区二区| 97精品国产福利一区二区三区| 99精品一区| 日韩午夜电影| 日本视频一区二区| 久久精品毛片| 激情综合激情| 婷婷五月色综合香五月| 欧美精品二区| 久久国产直播| 蜜桃视频免费观看一区| 国产一卡不卡| а√天堂8资源中文在线| 久久精品国内一区二区三区水蜜桃| 先锋影音久久久| 欧美有码在线| 日韩毛片视频| 蜜臀国产一区二区三区在线播放| 亚洲精品亚洲人成在线观看| 麻豆国产欧美一区二区三区| 宅男在线一区| 欧美一区成人| 亚洲91精品| 亚洲69av| www.com.cn成人| 男人的天堂亚洲一区| 国产精品3区| 亚洲高清av| 欧美啪啪一区| 99久久精品网| 91麻豆精品激情在线观看最新 | 老色鬼精品视频在线观看播放| 久久伊人国产| 精品一区欧美| 欧美久久一区二区三区| 久久国产欧美| 国产美女视频一区二区| 亚洲天堂久久| 国产精品高清一区二区| 亚洲激情五月| 精品三级av在线导航| 免费看欧美美女黄的网站| 福利一区二区三区视频在线观看| 免费观看在线综合| 黑森林国产精品av| 欧美一级网站| 欧美日韩国产高清| 九九九精品视频| 亚洲青青久久| 亚洲成人二区| 国产精品欧美一区二区三区不卡| 精品欧美激情在线观看| 欧美激情aⅴ一区二区三区| 亚洲一区日本| 日韩在线免费| 你懂的网址国产 欧美| 免费中文字幕日韩欧美| 日韩天堂在线| 免费在线亚洲欧美| 日韩欧美久久| 午夜欧美理论片| 高清av一区| 欧美亚洲人成在线| 久久午夜精品一区二区| 亚洲电影有码| 国产一区二区精品福利地址| 日韩av在线免费观看不卡| 国产日韩综合| 伊人精品一区| 另类中文字幕国产精品| 麻豆精品在线播放| 日本aⅴ亚洲精品中文乱码| 午夜在线一区二区| 伊人精品一区| 成人免费网站www网站高清| 六月丁香综合在线视频| 综合日韩在线| 婷婷六月综合| 久久精品导航| 人在线成免费视频| 国产成人精品三级高清久久91 | 麻豆精品一区二区综合av| 日韩高清欧美激情| 综合色就爱涩涩涩综合婷婷| 国产亚洲在线| 亚洲永久字幕| 欧美特黄一级| 99re国产精品| 91国语精品自产拍| 亚洲永久av| 日韩电影免费网站| av资源亚洲| 欧美日韩在线观看首页| av免费不卡国产观看| 高清一区二区三区| 欧美国产美女| 国产精品成人一区二区不卡| 国产一区日韩| 国产v日韩v欧美v| a日韩av网址| 国产超碰精品| 亚洲午夜精品久久久久久app| 亚洲成人二区| 国产综合视频| 91精品亚洲| 黄色成人91| 蜜桃久久av| 日韩精品导航| 国产免费播放一区二区| 麻豆精品在线播放| 国产第一亚洲| 偷拍精品精品一区二区三区| 亲子伦视频一区二区三区| 久久亚洲成人| 国产农村妇女精品一二区| 在线观看亚洲精品福利片| 日本不卡视频在线观看| 国产精品亚洲片在线播放| 老司机精品视频网| 精品国产精品久久一区免费式| 国产一区二区三区视频在线| 色在线中文字幕| 日韩亚洲在线| 一区二区三区四区日韩| 热久久久久久| 国产一区2区在线观看| 91视频一区| 三上悠亚国产精品一区二区三区| 精品中文一区| 亚洲精品在线二区| 国产精品久久久久久妇女 | 在线日韩视频| 在线综合欧美| 日韩精品成人| 九九久久国产| 日本欧美不卡| 国产精品日韩久久久| 亚洲综合国产| 日韩激情网站| 麻豆国产精品| 999久久久精品国产| 国产精品日韩久久久| 日本a级不卡| 日本久久精品| 欧美高清一区| 日本精品一区二区三区在线观看视频| 日本91福利区| 欧美国产美女| 最新亚洲激情| 日韩av网站在线免费观看| 麻豆精品视频在线观看视频| 亚洲爱爱视频| 日韩一区欧美二区| 欧美亚洲三级| 免费观看亚洲| 视频一区国产视频| 欧美黄页在线免费观看 | 日韩欧美综合| 国产美女一区| 日韩在线成人| 久久精品免视看国产成人| 欧产日产国产精品视频| 国产精品毛片一区二区三区| 国产午夜久久av| 欧美日韩中文一区二区| 亚洲精品成人一区| 国产在线观看91一区二区三区| 怡红院精品视频在线观看极品| 日韩国产一二三区| 九色porny丨国产首页在线| 日韩一区二区三区精品| 国产成人77亚洲精品www| 亚洲一区二区免费看| 久久精品国产网站| 精品欧美激情在线观看| 国产精品v亚洲精品v日韩精品| 欧美日韩亚洲在线观看| 欧美片第1页综合| 精品一区欧美| 欧美激情麻豆|