当前位置: 首页 > news >正文

MyBatisPlus逆向工程

依赖

 <!--Mybatis-plus逆向生成器依赖--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.4.1</version></dependency><!--Mybatis-plus逆向生成器的Freemarker模板引擎--><dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.31</version></dependency>

代码

package com.admin.util;import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.InjectionConfig;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;/*** @Author: huangjun* @Date: 2024/1/8 17:02* @Version: 1.0* @Description:*/
public class Generator {private final static AutoGenerator autoGenerator = new AutoGenerator();/*** 全局配置  生成路径*/private final static String GLOBAL_PROJECT_PATH = System.getProperty("user.dir");//全局配置 作者private final static String GLOBAL_AUTHOR = "huangjun";/*** 数据库配置信息*/private final static String JDBC_URL = "jdbc:mysql://localhost:3306/mywork?useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai";private final static String JDBC_USERNAME = "root";private final static String JDBC_PASSWORD = "root";private final static String JDBC_DRIVERNAME = "com.mysql.cj.jdbc.Driver";private final static DbType JDBC_DBTYPE = DbType.MYSQL;/*** 包信息配置*/private final static String PACKAGE_PARENT = "com.admin";private final static String PACKAGE_CONTROLLER = "controller";private final static String PACKAGE_ENTITY = "entity";private final static String PACKAGE_MAPPER = "mapper";private final static String PACKAGE_SERVICE = "service";private final static String PACKAGE_SERVICE_IMPL = "service.impl";/*** 模板文件路径*/private final static String XML_TEMPLATE_PATH = "/templates/mapper.xml.ftl";private final static String MAPPER_TEMPLATE_PATH = "/templates/mapper.java.ftl";private final static String SERVICE_TEMPLATE_PATH = "/templates/service.java.ftl";private final static String SERVICE_IMPL_TEMPLATE_PATH = "/templates/serviceImpl.java.ftl";private final static String ENTITY_TEMPLATE_PATH = "/templates/entity.java.ftl";private final static String CONTROLLER_TEMPLATE_PATH = "/templates/controller.java.ftl";/*** 项目信息*/private final static String PARENT_REAL_PATH = GLOBAL_PROJECT_PATH + "/src/main/java/com/admin";private final static String CONTROLLER_REAL_PATH = PARENT_REAL_PATH + "/controller/";private final static String SERVICE_REAL_PATH = PARENT_REAL_PATH + "/service/";private final static String SERVICE_IMPL_REAL_PATH = PARENT_REAL_PATH + "/service/impl/";private final static String MAPPER_XML_REAL_PATH = GLOBAL_PROJECT_PATH + "/src/main/resources/mapper/";private final static String MAPPER_JAVA_REAL_PATH = PARENT_REAL_PATH + "/mapper/";private final static String ENTITY_REAL_PATH = PARENT_REAL_PATH + "/entity/";/*** 逆向生成类去除表名的前缀*/private final static String STRATEGY_TABLE_PREFIX = "";/*** 数据源的配置*/private static void dataSourceConfig(){DataSourceConfig dataSourceConfig = new DataSourceConfig().setUrl(JDBC_URL).setUsername(JDBC_USERNAME).setPassword(JDBC_PASSWORD).setDriverName(JDBC_DRIVERNAME).setDbType(JDBC_DBTYPE);autoGenerator.setDataSource(dataSourceConfig);}/*** 全局配置*/private static void globalConfig(){GlobalConfig globalConfig = new GlobalConfig();// 输出文件路径globalConfig.setOutputDir(GLOBAL_PROJECT_PATH + "/src/main/java")// 设置作者名字.setAuthor(GLOBAL_AUTHOR)// 是否打开资源管理器.setOpen(false)// 是否覆盖原来生成的.setFileOverride(true)// 主键策略.setIdType(IdType.AUTO)// 生成resultMap.setBaseResultMap(true)// 设置时间格式,采用Date.setDateType(DateType.ONLY_DATE)// 生成的service接口名字首字母是否为I.setServiceName("I%sService")//XML中生成基础列.setBaseColumnList(true);autoGenerator.setGlobalConfig(globalConfig);}/*** 包属性的配置*/private static void packageConfig(){// 配置指定项目中各层的名称PackageConfig packageConfig = new PackageConfig();packageConfig.setParent(PACKAGE_PARENT)// Controller层.setController(PACKAGE_CONTROLLER)// 实体层(pojo层).setEntity(PACKAGE_ENTITY)// Dao 层.setMapper(PACKAGE_MAPPER)// service层.setService(PACKAGE_SERVICE)// ServiceImp层.setServiceImpl(PACKAGE_SERVICE_IMPL);autoGenerator.setPackageInfo(packageConfig);}/*** 逆向生成类的名称配置*/private static void strategyConfig(){StrategyConfig strategyConfig = new StrategyConfig();// 开启全局大写命名strategyConfig// 设置要映射的表.setInclude(INCLUDE_TABLES.split(",")).setCapitalMode(true)// 下划线到驼峰的命名方式.setNaming(NamingStrategy.underline_to_camel)// 下划线到驼峰的命名方式.setColumnNaming(NamingStrategy.underline_to_camel)// 是否使用lombok.setEntityLombokModel(true)// 是否开启rest风格.setRestControllerStyle(true)// 去除前缀.setTablePrefix(STRATEGY_TABLE_PREFIX).setControllerMappingHyphenStyle(true);autoGenerator.setStrategy(strategyConfig);autoGenerator.setTemplateEngine(new FreemarkerTemplateEngine());}/*** 在resource目录下生成Mapper文件的配置*/private static void injectionConfig(){InjectionConfig injectionConfig = new InjectionConfig() {@Overridepublic void initMap() {this.setMap(new HashMap<>());}};List<FileOutConfig> fileOutConfigList = new ArrayList<>();// 根据/templates/mapper.xml.ftl规则在指定的位置生成Mapper文件,可以在多个地方生成。fileOutConfigList.add(new FileOutConfig(XML_TEMPLATE_PATH) {@Overridepublic String outputFile(TableInfo tableInfo) {// 返回Mapper文件的绝对路径return MAPPER_XML_REAL_PATH +tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;}});// 将对Mapper文件的配置添加到文件输出对象中injectionConfig.setFileOutConfigList(fileOutConfigList);autoGenerator.setCfg(injectionConfig);}/*** java文件的的配置*/private static void initInjectionConfigForJava(){InjectionConfig injectionConfig = new InjectionConfig() {@Overridepublic void initMap() {// 实现InjectionConfig抽象类就需要初始化一个Map集合this.setMap(new HashMap<>());}};List<FileOutConfig> fileOutConfigList = new ArrayList<>();//mapper.java的文件路径配置fileOutConfigList.add(new FileOutConfig(MAPPER_TEMPLATE_PATH) {@Overridepublic String outputFile(TableInfo tableInfo) {return MAPPER_JAVA_REAL_PATH+ tableInfo.getEntityName() + "Mapper" + StringPool.DOT_JAVA;}});//service.java的文件路径配置fileOutConfigList.add(new FileOutConfig(SERVICE_TEMPLATE_PATH) {@Overridepublic String outputFile(TableInfo tableInfo) {return SERVICE_REAL_PATH+ "I" + tableInfo.getEntityName() + "Service" + StringPool.DOT_JAVA;}});//serviceImpl.java的文件路径配置fileOutConfigList.add(new FileOutConfig(SERVICE_IMPL_TEMPLATE_PATH) {@Overridepublic String outputFile(TableInfo tableInfo) {return SERVICE_IMPL_REAL_PATH+ tableInfo.getEntityName() + "ServiceImpl" + StringPool.DOT_JAVA;}});//controller.java的文件路径配置fileOutConfigList.add(new FileOutConfig(CONTROLLER_TEMPLATE_PATH) {@Overridepublic String outputFile(TableInfo tableInfo) {return CONTROLLER_REAL_PATH+ tableInfo.getEntityName() + "Controller" + StringPool.DOT_JAVA;}});//entity.javafileOutConfigList.add(new FileOutConfig(ENTITY_TEMPLATE_PATH) {@Overridepublic String outputFile(TableInfo tableInfo) {return ENTITY_REAL_PATH+ tableInfo.getEntityName() + StringPool.DOT_JAVA;}});injectionConfig.setFileOutConfigList(fileOutConfigList);autoGenerator.setCfg(injectionConfig);}/*** 配置生成器的生成模板*/private static void templateConfig() {TemplateConfig templateConfig = new TemplateConfig();templateConfig.setXml(null);autoGenerator.setTemplate(templateConfig);}//初始化static {globalConfig();dataSourceConfig();packageConfig();strategyConfig();injectionConfig();//initInjectionConfigForJava();templateConfig();}private final static String INCLUDE_TABLES ="student";public static void main(String[] args) {autoGenerator.execute();}
}

相关文章:

MyBatisPlus逆向工程

依赖 <!--Mybatis-plus逆向生成器依赖--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.4.1</version></dependency><!--Mybatis-plus逆向生成器的Freema…...

创建ESP32开源WiFi MAC(介质访问控制)层

内置WiFi 内置的 WiFi.h 库将使我们能够轻松使用 ESP32 板的 WiFi 功能。 连接到 Wi-Fi 接入点&#xff1a; #include <WiFi.h>const char* ssid "yourNetworkName"; const char* password "yourNetworkPassword";void setup(){Serial.begin(11…...

LeetCode 2723. 两个 Promise 对象相加

给定两个 promise 对象 promise1 和 promise2&#xff0c;返回一个新的 promise。promise1 和 promise2 都会被解析为一个数字。返回的 Promise 应该解析为这两个数字的和。 示例 1&#xff1a; 输入&#xff1a; promise1 new Promise(resolve > setTimeout(() > res…...

Flutter--常用技术文档

配置 清华大学flutter镜像 export PUB_HOSTED_URLhttps://mirrors.tuna.tsinghua.edu.cn/dart-pub export FLUTTER_STORAGE_BASE_URLhttps://mirrors.tuna.tsinghua.edu.cn/flutter 社区镜象 export PUB_HOSTED_URLhttps://pub.flutter-io.cn export FLUTTER_STORAGE_BASE_UR…...

行分类问题

行分类问题可以应用于多个领域和问题&#xff0c;其中一些示例包括&#xff1a; 文本分类&#xff1a; 在自然语言处理中&#xff0c;可以将文本分为不同的类别&#xff0c;例如情感分析、主题分类等。每个文本可以被视为一个“行”&#xff0c;而分类任务就是对每个行进行分类…...

java常见面试题:如何使用Java进行XML解析和生成?

在Java中&#xff0c;有几种不同的方式可以进行XML的解析和生成。以下是使用Java进行XML解析和生成的基本步骤&#xff1a; 解析XML&#xff1a; DOM (Document Object Model): 这是最常用的解析方法。它将整个XML文档加载到内存中&#xff0c;并允许你通过编程方式遍历和操作它…...

【LabVIEW FPGA入门】LabVIEW FPGA实现I2S解码器

该示例演示了如何使用 LabVIEW FPGA 解码 IS 信号。该代码可用于大多数支持高速数字输入的LabVIEW FPGA 目标&#xff08;例如R 系列、CompactRIO&#xff09;。IS 用于对系统和组件内的数字音频数据进行编码。例如&#xff0c;MP3 播放器或 DVD 播放器内部的数字音频通常使用 …...

linux 安装sipp

sudo apt-get install libnet1-dev libpcap0.8-dev openssl libssl-dev 从 sipp - Browse /sipp/3.2 at SourceForge.net 下载最新版的sipp.svn.tar.gz&#xff0c;解压之后就得到一个rpm文件 tar -zxvf sipp.svn.tar.gz cd sipp make pcapplay_ossl...

c++最值查找

目录 min和max函数 min_element和max_element 例 nth_element函数 例 例题 题目描述 输入描述 输出描述 解 min和max函数 只能传入两个值或一个列表 时间复杂度为O(1),数组O(n)&#xff0c;n为元素个数 min_element和max_element min_element(st,ed)返回地址[st,…...

xtu-c语言考试复习-2

1223 确实写不出&#xff0c;数据远超过64位&#xff0c;难道用数组存吗&#xff0c;但是不好计算&#xff0c;想到的思路是取模&#xff0c;一边计算&#xff0c;一边取模&#xff0c;就不会超过数据范围&#xff0c;但是数学原理没懂&#xff0c;所以做不出来 看了下自己以…...

MySQL决战:MySQL数据导入导出

目录 前言 一.navact数据导入导出&#xff08;第三方工具&#xff09; 1.导入数据 2.数据导出 二. mysqldump命令导入导出数据 1.mysqldump介绍 2.数据导出 3.数据导入 三.load data file进行数据导入导出&#xff08;只限于单表&#xff09; 1.数据导出 增加导出权…...

Unity 面试篇|(二)Unity基础篇 【全面总结 | 持续更新】

目录 1.Unity3d脚本从唤醒到销毁有着一套比较完整的生命周期&#xff0c;列出系统自带的几个重要的方法。2.Unity3D中的碰撞器和触发器的区别&#xff1f;3.物体发生碰撞的必要条件&#xff1f;4.简述Unity3D支持的作为脚本的语言的名称&#xff1f;5. .Net与Mono的关系&#x…...

TIDB的忘了root用户密码和数据库密码解决办法

方法一&#xff1a; 1、修改配置文件重启tidb&#xff0c;无密码登录修改root密码 找到配置文件 tidb.toml &#xff0c;在[security] 作用域下增加如下配置&#xff1a; [security] skip-grant-tabletrue 重启tidb&#xff1a; sh run_tidb.sh 2、重启后&#xff0c;就可以无密…...

QT基础篇(4)QT5基本对话框

1.标准文件对话框类 在QT5中&#xff0c;可以使用QFileDialog类来创建标准文件对话框。QFileDialog类提供了一些方法和属性&#xff0c;用于选择文件和目录。 常用的方法和属性如下&#xff1a; getOpenFileName()&#xff1a;打开文件对话框&#xff0c;选择一个文件。 get…...

Springboot项目Nacos做配置中心

Springboot项目Nacos做配置中心 说明安装2.Springboot整合使用Nacos3.问题处理 说明 文档参考 Nacos Spring Boot 安装 查看nacos镜像 docker search nacos 下载镜像 docker pull nacos/nacos-server启动naocs镜像 docker run --env MODEstandalone --name nacos -d -p 8…...

SpringSecurity入门demo(三)多用户身份认证

WebSecurityConfigurerAdapter配置文件在 configure(AuthenticationManagerBuilder auth) 方法中完成身份认证。前面的demo都只有一个用户&#xff0c;security中使用UserDetailsService做为用户数据源 &#xff0c;所以可以实现UserDetailsService 接口来自定义用户。实现方…...

【设计模式-02】Strategy策略模式及应用场景

一、参考资料 Java 官方文档 Overview (Java SE 18 & JDK 18)module indexhttps://docs.oracle.com/en/java/javase/18/docs/api/index.html Java中使用到的策略模式 Comparator、comparable Comparator (Java SE 18 & JDK 18)declaration: module: java.base, pa…...

ssh远程登陆

一、ssh远程登陆的概念 SSH&#xff08;Secure Shell&#xff09;是一种安全通道协议&#xff0c;主要用来实现字符界面的远程登录、远程 复制等功能。SSH 协议对通信双方的数据传输进行了加密处理&#xff0c;其中包括用户登录时输入的用户口令&#xff0c;SSH 为建立在应用层…...

go如何终止多个for select循环嵌套

空山新雨后&#xff0c;天气晚来秋。 目录 分类说明 总结 分类说明 for select循环嵌套&#xff0c;如何终止&#xff1f;上代码&#xff1a; stop : make(chan struct{})go func() {for i : 1; i < 3; i {fmt.Println("writed ", i)time.Sleep(time.Second * …...

nginx(1.13.7)首次安装出现:【make: *** 没有规则可以创建“default”需要的目标“build” 问题】解决措施

目录 前言&#xff1a; 一.龙蜥&#xff08;Anolis&#xff09;操作系统上安装GCC 1.安装gcc 2.检验安装 二.安装出现 make&#xff1a; *** 没有规则可以创建“default”需要的目标“build” 问题 1.解压安装nginx 2.安装出现问题展示 3.解决措施 4.重新编译进行安装 5…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…...

测试微信模版消息推送

进入“开发接口管理”--“公众平台测试账号”&#xff0c;无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息&#xff1a; 关注测试号&#xff1a;扫二维码关注测试号。 发送模版消息&#xff1a; import requests da…...

Spark 之 入门讲解详细版(1)

1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室&#xff08;Algorithms, Machines, and People Lab&#xff09;开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目&#xff0c;8个月后成为Apache顶级项目&#xff0c;速度之快足见过人之处&…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建

制造业采购供应链管理是企业运营的核心环节&#xff0c;供应链协同管理在供应链上下游企业之间建立紧密的合作关系&#xff0c;通过信息共享、资源整合、业务协同等方式&#xff0c;实现供应链的全面管理和优化&#xff0c;提高供应链的效率和透明度&#xff0c;降低供应链的成…...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU&#xff1a;如何让RNN变得更聪明&#xff1f; 在深度学习的世界里&#xff0c;循环神经网络&#xff08;RNN&#xff09;以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而&#xff0c;传统RNN存在的一个严重问题——梯度消失&#…...

vue3 字体颜色设置的多种方式

在Vue 3中设置字体颜色可以通过多种方式实现&#xff0c;这取决于你是想在组件内部直接设置&#xff0c;还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法&#xff1a; 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

Nginx server_name 配置说明

Nginx 是一个高性能的反向代理和负载均衡服务器&#xff0c;其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机&#xff08;Virtual Host&#xff09;。 1. 简介 Nginx 使用 server_name 指令来确定…...

ardupilot 开发环境eclipse 中import 缺少C++

目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...

多模态图像修复系统:基于深度学习的图片修复实现

多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...

【SpringBoot自动化部署】

SpringBoot自动化部署方法 使用Jenkins进行持续集成与部署 Jenkins是最常用的自动化部署工具之一&#xff0c;能够实现代码拉取、构建、测试和部署的全流程自动化。 配置Jenkins任务时&#xff0c;需要添加Git仓库地址和凭证&#xff0c;设置构建触发器&#xff08;如GitHub…...