成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

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

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

瀏覽:76日期: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 數據庫
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
日韩亚洲欧美在线| 亚洲午夜黄色| 激情文学一区| 欧美激情一区二区在线| 成人h动漫精品一区二| 日韩一本二本av| 国产精品正在播放| 91精品国产高清一区二区三区蜜臀| 激情综合色综合久久| 在线观看欧美日本| 蜜臀91精品一区二区三区 | www国产亚洲精品久久麻豆| 成人在线综合网站| 日韩欧美卡一卡二| 99免费精品视频| 久久久久综合网| 午夜视频一区| 国产精品天干天干在线综合| 红桃视频亚洲| 一区二区三区欧美视频| 欧美综合国产| 蜜臀va亚洲va欧美va天堂| 欧美这里有精品| 一区二区三区在线观看动漫| 亚洲免费婷婷| 日韩av电影免费观看高清完整版在线观看 | 99久久精品国产观看| 久久久久久久久久久99999| 欧美日韩1区| 亚洲天堂2016| 免费一区二区三区| 精品一区二区三区在线观看国产| 91精品国产综合久久久久久漫画 | 亚洲.国产.中文慕字在线| 久久久综合香蕉尹人综合网| 美女任你摸久久| 欧美一区二区三区四区五区| 99热这里都是精品| 综合在线观看色| 美女亚洲精品| 国产在线视频一区二区| 精品99久久久久久| 一区在线视频| 视频一区视频二区在线观看| 欧美电影在哪看比较好| 99在线精品视频| 亚洲欧美综合另类在线卡通| 国产伦精品一区二区三区照片91| 日本欧美久久久久免费播放网| 91超碰这里只有精品国产| 91原创在线视频| 亚洲免费观看在线视频| 色偷偷88欧美精品久久久| 国产精品538一区二区在线| 久久久99精品久久| 国产偷国产偷亚洲高清97cao| 麻豆精品久久久| 久久天天做天天爱综合色| 在线成人www免费观看视频| 午夜欧美在线一二页| 69精品人人人人| 欧美性色综合| 亚洲成av人片一区二区| 制服丝袜一区二区三区| 午夜久久tv| 中文字幕在线一区免费| 色播五月激情综合网| av中文字幕在线不卡| 一区二区三区自拍| 91精品国产综合久久香蕉麻豆 | 久久久久久久久久久黄色| 日韩亚洲在线| 国产一区在线精品| 中文字幕一区二区三区四区不卡| 老司机一区二区三区 | 久久精品午夜| 不卡电影免费在线播放一区| 亚洲精品视频观看| 日韩午夜电影av| 日韩一级精品| 国产成人夜色高潮福利影视| 亚洲免费观看高清完整版在线观看| 欧美午夜宅男影院| 亚洲网站啪啪| 国产一区二区三区不卡在线观看| 欧美高清在线一区二区| 久久综合九色综合网站| 91亚洲精品一区二区乱码| 三级一区在线视频先锋| 久久这里只有精品首页| 蜜桃精品久久久久久久免费影院| 国产福利一区二区| 亚洲一区二区视频在线观看| 欧美白人最猛性xxxxx69交| 国产伦精品一区二区三区视频黑人 | 欧美激情一区二区| 欧美性一级生活| 欧美欧美全黄| 国产一区高清在线| 一区二区日韩电影| 26uuu欧美日本| 在线观看亚洲专区| 亚洲国产精品久久久久久女王| 国产一区二区三区精品欧美日韩一区二区三区 | 国产午夜一区二区三区| 在线观看免费视频综合| 亚洲一二三区精品| 国产大片一区二区| 午夜视频在线观看一区| 中文字幕av一区 二区| 欧美日韩视频在线第一区| 尤物网精品视频| 国产精品一二三区| 亚洲国产va精品久久久不卡综合| 26uuuu精品一区二区| 在线观看一区日韩| 亚洲理伦在线| 91免费国产在线观看| 国产揄拍国内精品对白| 五月婷婷久久丁香| 日韩毛片精品高清免费| 精品剧情在线观看| 欧美午夜电影一区| 国产女主播一区二区三区| 欧美精品播放| 成人一区二区视频| 久久草av在线| 日韩精品一区第一页| 亚洲激情校园春色| 中文字幕av一区二区三区| 日韩欧美国产高清| 欧美影片第一页| 免费视频一区二区三区在线观看| 国产精品xxx在线观看www| 成人午夜在线播放| 久久国产精品免费| 丝袜美腿亚洲一区| 亚洲欧美aⅴ...| 中文字幕高清一区| 2020国产精品| 欧美一区二区三区电影| 久久久久欧美精品| 一区二区三区精品国产| 欧美日韩一区二区视频在线| 成人妖精视频yjsp地址| 亚洲va欧美va人人爽| 亚洲精品第1页| 成人免费一区二区三区视频| 国产精品网站导航| 中文字幕欧美激情| 国产日韩精品一区二区三区 | 欧美一区二区视频观看视频| 欧洲精品中文字幕| 久久久久国产一区二区| 国产一区二区三区的电影| 亚洲欧洲日本国产| 91久久精品www人人做人人爽| 亚洲欧美亚洲| 欧美一区二区| 91麻豆免费看| 91啪亚洲精品| 牛夜精品久久久久久久99黑人| 成人激情开心网| 丁香婷婷综合五月| 国产91精品露脸国语对白| 国产在线不卡一区| 激情av综合网| 国产一区二区三区日韩| 精品在线播放免费| 国产一区啦啦啦在线观看| 国产毛片精品国产一区二区三区| 国内成人免费视频| 国产美女视频91| 国产成人日日夜夜| 成人精品国产一区二区4080| 成人三级伦理片| av成人免费在线| 91视视频在线观看入口直接观看www | 国产精品乱子乱xxxx| 999在线观看精品免费不卡网站| 亚洲一本视频| 亚洲黄色影院| 国产伦精品一区| 久久久久国产精品一区二区 | 欧美视频一区二区三区四区| 欧美色网一区二区| 欧洲精品中文字幕| 99综合影院在线| av午夜精品一区二区三区| 色综合久久中文字幕综合网| 欧美丰满一区二区免费视频| 在线播放亚洲| 性做久久久久久免费观看欧美| 6080亚洲精品一区二区| 麻豆精品一区二区av白丝在线| 一本色道**综合亚洲精品蜜桃冫| 美日韩在线观看| 精品视频一区二区三区免费| 日韩视频在线一区二区| 久久亚洲春色中文字幕久久久|