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

springboot mybatis-plus 代码生成工具

介绍

基于mybatis-plus代码生成工具
后续会不断完善

规划

后续会基于此功能搞低代码平台,会有前端VUE

mybatis-plus介绍&特性

• 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
• 损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作
• 强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求
• 支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错
• 支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题
• 支持 ActiveRecord 模式:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操作
• 支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )
• 内置代码生成器:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用
• 内置分页插件:基于 MyBatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通 List 查询
• 分页插件支持多种数据库:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多种数据库
• 内置性能分析插件:可输出 SQL 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询
• 内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,也可自定义拦截规则,预防误操作

代码生成

  • 自定义模版
  • 生成内容
    controller/entity/dto/vo/convertor/service/serviceImpl/dao/mapper

功能说明

基于模版生成,模版在templates下
restful接口和基础功能实现
service服务实现和基础功能实现
entity/dto/vo/convertor,不同传输对象和转化
使用分页插件
使用逻辑删除标识

使用说明

CodeGeneration,直接执行即可
如需要做个性化配置,则自己改即可

测试类

测试sql在resources/sql/test.sql
查看TestGeneration.http实现

模块结构

在这里插入图片描述

CodeGeneration 代码

package org.lwd.microservice.boot.generation;import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert;
import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.IColumnType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler;
import org.lwd.microservice.boot.generation.engine.EnhanceFreemarkerTemplateEngine;import java.util.Collections;
import java.util.HashMap;
import java.util.Map;import static com.baomidou.mybatisplus.generator.config.rules.DbColumnType.INTEGER;/*** @author weidong* @version V1.0.0* @description* @since 2023/5/26*/
public class CodeGeneration {public static void main(String[] args) {String projectPath = System.getProperty("user.dir")+"/microservice-boot-middle/microservice-boot-middle-generation"; //获取项目路径String outerFilePath = projectPath + "/src/main/java";  //java下的文件路径String tempFilePath = projectPath + "/src/main/resources";String packageName = "org.lwd.microservice.boot.generation";System.out.println(projectPath);FastAutoGenerator.create(new DataSourceConfig.Builder("jdbc:mysql://" + "127.0.0.1:3306/test", "root", "123456").dbQuery(new MySqlQuery()).typeConvert(new MySqlTypeConvert() {@Overridepublic IColumnType processTypeConvert(GlobalConfig config, String fieldType) {if (fieldType.toLowerCase().contains("tinyint")) {return INTEGER;}return super.processTypeConvert(config, fieldType);}}).keyWordsHandler(new MySqlKeyWordsHandler()))//全局配置.globalConfig(builder -> {builder.outputDir(outerFilePath)//生成的输出路径.author("lwd")//生成的作者名字//.enableSwagger()开启swagger,需要添加swagger依赖并配置.dateType(DateType.ONLY_DATE)//时间策略.commentDate("yyyy-MM-dd")//格式化时间格式.disableOpenDir();//禁止打开输出目录,默认false})//包配置.packageConfig(builder -> {builder.entity("entity")//实体类包名.parent(packageName)//父包名。如果为空,将下面子包名必须写全部, 否则就只需写子包名.controller("controller")//控制层包名.mapper("dao")//mapper层包名.xml("mapper.xml")//数据访问层xml包名.service("service")//service层包名.serviceImpl("service.impl")//service实现类包名.pathInfo(Collections.singletonMap(OutputFile.mapperXml, projectPath + "/src/main/resources/mapper")); //路径配置信息,就是配置各个文件模板的路径信息,这里以mapper.xml为例})//模版配置.templateConfig(builder -> {
//                    builder.disable()//禁用所有模板
//                    builder.disable(TemplateType.ENTITY)builder.service("templates/service.java")//service模板路径.serviceImpl("templates/serviceImpl.java")//实现类模板路径
//                .mapper("templates/mapper.java")//mapper模板路径
//                .mapperXml("/templates/mapper.xml")//xml文件模板路路径.controller("templates/controller.java"); //controller层模板路径}).templateEngine(new FreemarkerTemplateEngine()).injectionConfig(consumer -> {Map<String, String> customFile = new HashMap<>();// DTO 下面的key会作为类名后缀,进而生成新类customFile.put("DTO.java", "templates/other/dto.java.ftl");customFile.put("VO.java", "templates/other/vo.java.ftl");customFile.put("Convertor.java", "templates/other/convertor.java.ftl");consumer.customFile(customFile);}).templateEngine(new EnhanceFreemarkerTemplateEngine())// EnhanceFreemarkerTemplateEngine 里主要重写对自定义类的处理 如vo dto convert等//策略配置开始.strategyConfig(builder -> {builder.enableCapitalMode()//开启全局大写命名//.likeTable()模糊表匹配.addInclude("t_friendly_link")//添加表匹配,指定要生成的数据表名,不写默认选定数据库所有表//.disableSqlFilter()禁用sql过滤:默认(不使用该方法)true//.enableSchema()启用schema:默认false.addTablePrefix("t_")//增加过滤表前缀.entityBuilder() //实体策略配置//.disableSerialVersionUID()禁用生成SerialVersionUID:默认true.enableChainModel()//开启链式模型.enableLombok()//开启lombok.enableRemoveIsPrefix()//开启 Boolean 类型字段移除 is 前缀.enableTableFieldAnnotation()//开启生成实体时生成字段注解//.addTableFills()添加表字段填充.naming(NamingStrategy.underline_to_camel)//数据表映射实体命名策略:默认下划线转驼峰underline_to_camel.columnNaming(NamingStrategy.underline_to_camel)//表字段映射实体属性命名规则:默认null,不指定按照naming执行.idType(IdType.AUTO)//添加全局主键类型.formatFileName("%s")//格式化实体名称,%s取消首字母I.logicDeleteColumnName("deleted_tag")//逻辑删除标识.mapperBuilder()//mapper文件策略.enableMapperAnnotation()//开启mapper注解.enableBaseResultMap()//启用xml文件中的BaseResultMap 生成.enableBaseColumnList()//启用xml文件中的BaseColumnList//.cache(缓存类.class)设置缓存实现类.formatMapperFileName("%sMapper")//格式化Dao类名称.formatXmlFileName("%sMapper")//格式化xml文件名称.serviceBuilder()//service文件策略.formatServiceFileName("%sService")//格式化 service 接口文件名称.formatServiceImplFileName("%sServiceImpl")//格式化 service 接口文件名称.controllerBuilder()//控制层策略//.enableHyphenStyle()开启驼峰转连字符,默认:false.enableRestStyle()//开启生成@RestController.formatFileName("%sController");//格式化文件名称}).execute();}}

代码地址

https://github.com/OrderDong/microservice-boot
分支:microservice-boot-1.0.1-generator
模块:microservice-boot-middle-generation

外传

😜 原创不易,如若本文能够帮助到您的同学
🎉 支持我:关注我+点赞👍+收藏⭐️
📝 留言:探讨问题,看到立马回复
💬 格言:己所不欲勿施于人 扬帆起航、游历人生、永不言弃!🔥

相关文章:

springboot mybatis-plus 代码生成工具

介绍 基于mybatis-plus代码生成工具 后续会不断完善 规划 后续会基于此功能搞低代码平台&#xff0c;会有前端VUE mybatis-plus介绍&特性 • 无侵入&#xff1a;只做增强不做改变&#xff0c;引入它不会对现有工程产生影响&#xff0c;如丝般顺滑 • 损耗小&#xff1…...

超全、超详细的Redis学习笔记总结

❤ 作者主页&#xff1a;欢迎来到我的技术博客&#x1f60e; ❀ 个人介绍&#xff1a;大家好&#xff0c;本人热衷于Java后端开发&#xff0c;欢迎来交流学习哦&#xff01;(&#xffe3;▽&#xffe3;)~* &#x1f34a; 如果文章对您有帮助&#xff0c;记得关注、点赞、收藏、…...

Day05 04-MySQL分库分表介绍

文章目录 第十七章 MySQL分库分表17.1 什么是分库分表17.2 为什么要分库分表17.3 垂直切分17.3.1 垂直分库17.3.2 垂直分表 17.4 水平切分17.4.1 水平分库17.4.2 水平分表17.4.3 常见的水平切分规则 第十七章 MySQL分库分表 17.1 什么是分库分表 MySQL数据库常见的优化方案中…...

基于SpringBoot+vue的毕业生信息招聘平台设计和实现

博主介绍&#xff1a; 大家好&#xff0c;我是一名在Java圈混迹十余年的程序员&#xff0c;精通Java编程语言&#xff0c;同时也熟练掌握微信小程序、Python和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架下…...

git一定要学会,加油

gitgit文档http://file:///F:/%E8%B5%84%E6%96%99%E5%A4%8D%E4%B9%A0/Git%E4%BC%98%E7%A7%80%E5%BC%80%E6%BA%90%E4%B9%A6%E7%B1%8D/Git%E5%BC%80%E6%BA%90%E4%B9%A6%E7%B1%8D/Pro%20Git%E4%B8%AD%E6%96%87PDF%E7%89%88.pdf init 初始化仓库 这个命令在当前目录下初始化一个 G…...

TVM面试题

1、TVM中的调度器(Scheduler)是什么&#xff1f;请简要解释TVM调度器的作用和工作原理。 TVM中的调度器(Scheduler)是负责将计算图映射到特定硬件目标上的组件。调度器在TVM中起着关键的作用&#xff0c;它决定了计算图的执行方式、并行化策略以及内存布局等&#xff0c;以优化…...

CSS相关面试题

1、标准盒子模型和IE怪异盒子模型&#xff1f; 标准盒子模型就是指的元素的宽度和高度仅包括的内容区域&#xff0c;不包括边框和内边距&#xff0c;也就是说&#xff0c;元素的实际宽度和高度等于内容区域的宽度和高度IE怪异盒子是指元素的高度和宽度&#xff0c;包括内容区域…...

6.11总结

这周准备了蓝桥杯&#xff0c;主要看了一些以前学过的东西&#xff0c;看了二分&#xff0c;树状数组&#xff0c;树状数组二分&#xff0c;复习了利用倍增相关的算法。 周六去打的蓝桥杯&#xff0c;总体来说也就一般吧&#xff0c;出了考场突然想起来我b题中间的称号写成了加…...

Hazel游戏引擎(008-009)事件系统

文中若有代码、术语等错误&#xff0c;欢迎指正 文章目录 008、事件系统-设计009、事件系统-自定义事件前言自定义事件类与使用声明与定义类代码包含头文件使用事件 事件调度器代码 C知识&#xff1a;FunctionBind用法function基本使用 012、事件系统-DemoLayer用EventDispache…...

【C++】 STL(上)STL简述、STL容器

文章目录 简述STL容器list链表vector向量deque双端队列map映射表set集合hash_map哈希表 简述 STL是“Standard Template Library”的缩写&#xff0c;中文译为“标准模板库”。STL是C标准库的一部分&#xff0c;位与各个C的头文件中&#xff0c;即他并非以二进制代码的形式提供…...

【002 基础知识】什么是原子操作?

一、原子操作 原子操作就是指不能再进一步分割的操作。 二、为了实现一个互斥&#xff0c;自己定义一个变量作为标记来作为一个资源只有一个使用者行不行&#xff1f; 不行。如果在一个线程正持有锁时&#xff08;2处&#xff09;&#xff0c;线程上下文发生切换&#xff0c…...

English Learning - L3 作业打卡 Lesson5 Day32 2023.6.5 周一

English Learning - L3 作业打卡 Lesson5 Day32 2023.6.5 周一 引言&#x1f349;句1: What do you read when you are travelling by train or bus?成分划分弱读爆破语调 &#x1f349;句2: What are other passengers reading?成分划分弱读连读语调 &#x1f349;句3: Perh…...

深度学习应用篇-自然语言处理-命名实体识别[9]:BiLSTM+CRF实现命名实体识别、实体、关系、属性抽取实战项目合集(含智能标注)【上篇】

【深度学习入门到进阶】必看系列&#xff0c;含激活函数、优化策略、损失函数、模型调优、归一化算法、卷积模型、序列模型、预训练模型、对抗神经网络等 专栏详细介绍&#xff1a;【深度学习入门到进阶】必看系列&#xff0c;含激活函数、优化策略、损失函数、模型调优、归一化…...

腾讯安全SOC+荣获“鑫智奖”,助力金融业数智化转型

近日&#xff0c;由金科创新社主办&#xff0c;全球金融专业人士协会支持的“2023鑫智奖第五届金融数据智能优秀解决方案评选”榜单正式发布。腾讯安全申报的“SOC基于新一代安全日志大数据平台架构的高级威胁安全治理解决方案”获评“鑫智奖网络信息安全创新优秀解决方案”。 …...

Python绘制气泡图示例

部分数据来源:ChatGPT 引言 在数据可视化领域中,气泡图是一种能够同时展示三维信息的图表类型,常用于表示数据集中的两个变量之间的关系。Python中提供了许多用于绘制气泡图的可视化库,比如pyecharts。在本篇文章中,我们将介绍如何使用pyecharts库绘制一个简单的气泡图,…...

数学建模经历-程序人生

引言 即将大四毕业(现在大三末)&#xff0c;闲来无事(为了冲粽子)就写一篇记录数学建模经历的博客吧。其实经常看到一些大佬的博客里会有什么"程序人生"、"人生感想"之类的专栏&#xff0c;但是由于我只是一个小趴菜没什么阅历因此也就没有写过类似的博客…...

数字电子电路绪论

博主介绍&#xff1a;一个爱打游戏的计算机专业学生 博主主页&#xff1a;夏驰和徐策 所属专栏&#xff1a;程序猿之数字电路 1.科技革命促生互联网时代 科技革命对互联网时代的兴起产生了巨大的推动作用。以下是一些科技革命对互联网时代的促进因素&#xff1a; 1. 计算机技…...

电脑丢失dll文件一键修复需要什么软件?快速修复dll文件的方法

在使用电脑的过程中&#xff0c;我们经常会遇到程序无法正常运行的情况&#xff0c;提示“XXX.dll文件丢失”的错误。这时候&#xff0c;很多人会感到困惑&#xff0c;不知道该如何解决。本文将详细介绍dll文件丢失的各种原因、如何使用dll修复工具进行一键修复dll丢失问题以及…...

你知道微信的转账是可以退回的吗

微信作为当今最受欢迎的即时通讯软件之一&#xff0c;其转账功能得到了广泛的应用。在使用微信转账时&#xff0c;我们可能会遇到一些问题&#xff0c;例如误操作、支付失败或者需要退款等等。 首先需要注意的是&#xff0c;微信转账退回的操作只能在“一天内未确认”时进行。如…...

【链表Part01】| 203.移除链表元素、707.设计链表、206.反转链表

目录 ✿LeetCode203.移除链表元素❀ ✿LeetCode707.设计链表❀ ✿LeetCode206.反转链表❀ ✿LeetCode203.移除链表元素❀ 链接&#xff1a;203.移除链表元素 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff…...

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

java_网络服务相关_gateway_nacos_feign区别联系

1. spring-cloud-starter-gateway 作用&#xff1a;作为微服务架构的网关&#xff0c;统一入口&#xff0c;处理所有外部请求。 核心能力&#xff1a; 路由转发&#xff08;基于路径、服务名等&#xff09;过滤器&#xff08;鉴权、限流、日志、Header 处理&#xff09;支持负…...

椭圆曲线密码学(ECC)

一、ECC算法概述 椭圆曲线密码学&#xff08;Elliptic Curve Cryptography&#xff09;是基于椭圆曲线数学理论的公钥密码系统&#xff0c;由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA&#xff0c;ECC在相同安全强度下密钥更短&#xff08;256位ECC ≈ 3072位RSA…...

Xshell远程连接Kali(默认 | 私钥)Note版

前言:xshell远程连接&#xff0c;私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

【JavaSE】绘图与事件入门学习笔记

-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角&#xff0c;以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向&#xff0c;距离坐标原点x个像素;第二个是y坐标&#xff0c;表示当前位置为垂直方向&#xff0c;距离坐标原点y个像素。 坐标体系-像素 …...

Angular微前端架构:Module Federation + ngx-build-plus (Webpack)

以下是一个完整的 Angular 微前端示例&#xff0c;其中使用的是 Module Federation 和 npx-build-plus 实现了主应用&#xff08;Shell&#xff09;与子应用&#xff08;Remote&#xff09;的集成。 &#x1f6e0;️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...

AGain DB和倍数增益的关系

我在设置一款索尼CMOS芯片时&#xff0c;Again增益0db变化为6DB&#xff0c;画面的变化只有2倍DN的增益&#xff0c;比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析&#xff1a; 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...

免费数学几何作图web平台

光锐软件免费数学工具&#xff0c;maths,数学制图&#xff0c;数学作图&#xff0c;几何作图&#xff0c;几何&#xff0c;AR开发,AR教育,增强现实,软件公司,XR,MR,VR,虚拟仿真,虚拟现实,混合现实,教育科技产品,职业模拟培训,高保真VR场景,结构互动课件,元宇宙http://xaglare.c…...

Web后端基础(基础知识)

BS架构&#xff1a;Browser/Server&#xff0c;浏览器/服务器架构模式。客户端只需要浏览器&#xff0c;应用程序的逻辑和数据都存储在服务端。 优点&#xff1a;维护方便缺点&#xff1a;体验一般 CS架构&#xff1a;Client/Server&#xff0c;客户端/服务器架构模式。需要单独…...