代码一键自动生成,拿走不谢

article/2025/11/10 6:34:38

程序猿学社的GitHub,欢迎Star
github技术专题
本文已记录到github

文章目录

  • 前言
  • 起源
  • 环境
  • 实战
    • sql脚本
    • pom.xml
    • application.yml
    • 启动类
    • 代码自动生成
    • controller类
  • 测试

前言

隔壁老王: 社长,我工作有一段时间咯,我看其他的同事,上班都很悠闲,而且,那些实体类,感觉有模板似的,有点像机器生成的,是不是有什么工具,可以自动生成代码。
社长: 有的,嘻嘻,MP的AutoGenerator 插件,一键生成代码,并且,可以集成swagger,加上对应的注释,大大提高你的开发效率。
隔壁老王: 这么优秀,难怪,我看我们项目组的那些人,这么多时间撩妹。

起源

社长刚刚开始工作的时候,那时候,dao,entity,service,controller都要自己去编写。而这部分代码,都是有一定的规范,有需求,就有对应的产品应运而生,AutoGenerator 是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码,极大的提升了开发效率。

环境

springboot 2.2.6.RELEASE
mybatis-plus 3.3.0
spring-boot-starter-swagger 1.5.1.RELEASE

  • 环境版本最好保持一致,不然,你可以收获意外的惊喜

实战

  • 如遇到不清楚的,文件如何存放的,可以参考我的结构

sql脚本

/*Navicat Premium Data TransferSource Server         : 本地Source Server Type    : MySQLSource Server Version : 50722Source Host           : localhost:3306Source Schema         : proTarget Server Type    : MySQLTarget Server Version : 50722File Encoding         : 65001Date: 05/04/2020 19:17:01
*/SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;-- ----------------------------
-- Table structure for student
-- ----------------------------
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student`  (`id` int(111) NOT NULL AUTO_INCREMENT COMMENT '编号',`name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '姓名',`age` int(11) NULL DEFAULT NULL COMMENT '年龄',PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Records of student
-- ----------------------------
INSERT INTO `student` VALUES (1, '社长', 18);
INSERT INTO `student` VALUES (2, '老王', 20);
INSERT INTO `student` VALUES (3, '兰陵王', 11);SET FOREIGN_KEY_CHECKS = 1;

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.2.6.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.cxyxs</groupId><artifactId>auto</artifactId><version>0.0.1-SNAPSHOT</version><name>auto</name><description>Demo project for Spring Boot</description><properties><java.version>1.8</java.version></properties><dependencies><!--web依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--junit测试--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.3.0</version></dependency><!--代码生成模式插件  3.0.3以后需要手动设置依赖--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.3.1.tmp</version></dependency><!--代码生成模板--><dependency><groupId>org.apache.velocity</groupId><artifactId>velocity-engine-core</artifactId><version>2.2</version></dependency><!--简化代码插件--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><!--mysql驱动--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.18</version></dependency><!-- druid阿里巴巴数据库连接池 --><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.6</version></dependency><!-- 热部署 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><optional>true</optional></dependency><!--swagger2--><dependency><groupId>com.spring4all</groupId><artifactId>spring-boot-starter-swagger</artifactId><version>1.5.1.RELEASE</version></dependency></dependencies><build><!--打包后的项目名--><finalName>codeauto</finalName><!--解决mapper文件不到class文件夹的问题--><resources><resource><directory>src/main/resources</directory><includes><include>**/*</include></includes><filtering>true</filtering></resource><resource><directory>src\main\java</directory><includes><include>**/*.xml</include></includes></resource></resources><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin><!-- 1、设置jar的入口类 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><configuration><archive><manifest><addClasspath>true</addClasspath><classpathPrefix>lib/</classpathPrefix><mainClass>com.cxyxs.auto.AutoApplication</mainClass></manifest></archive></configuration></plugin><!--2、把附属的jar打到jar内部的lib目录中 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-dependency-plugin</artifactId><executions><execution><id>copy-dependencies</id><phase>package</phase><goals><goal>copy-dependencies</goal></goals><configuration><outputDirectory>${project.build.directory}/lib</outputDirectory></configuration></execution></executions></plugin><!-- 3、打包过程忽略Junit测试 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-surefire-plugin</artifactId><configuration><skip>true</skip></configuration></plugin></plugins></build>
</project>
  • MyBatis-Plus 从 3.0.3 之后移除了代码生成器与模板引擎的默认依赖,需要手动添加相关依赖:
  • 为方便以后前后端对接,集成了swagger
  • 可达成jar包,直接build就行,build里面的配置,就是为了打成jar包

application.yml

server:port: 8888spring:datasource:# 配置数据源driver-class-name: com.mysql.cj.jdbc.Driver# 使用druid连接池type: com.alibaba.druid.pool.DruidDataSourceurl: jdbc:mysql://127.0.0.1:3306/pro?useUnicode=true&characterEncoding=utf8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8username: rootpassword: root###增加日志输出,方便定位问题
logging:level:root : warncom.cxyxs.mybatisplus.dao: trace###控制台输出格式pattern:console: '%p%m%n'mybatis-plus:mapper-locations: classpath*:/com/cxyxs/auto/mapper/xml/*.xmlglobal-config:db-config:###逻辑未删除的值logic-not-delete-value: 0###逻辑已删除的值logic-delete-value: 1####扫描swagger注解swagger:base-package: com.cxyxs
  • 配置数据库的信息,以自己的配置为主
  • mapper-locations 是根据自动生成代码的规则而定义的
  • swagger 配置swagger注解,扫描范围

启动类

package com.cxyxs.auto;import com.spring4all.swagger.EnableSwagger2Doc;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
@MapperScan("com.cxyxs.auto.mapper")
@EnableSwagger2Doc
public class AutoApplication {public static void main(String[] args) {SpringApplication.run(AutoApplication.class, args);}
}
  • @MapperScan配置扫描dao包的位置(以我们常用的思维),社长习惯以mapper命名
  • @EnableSwagger2Doc 启用swagger注解

代码自动生成

package com.cxyxs.auto;import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.po.TableFill;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;import java.util.ArrayList;
import java.util.List;/*** Description:* Author: wude* Date:  2020/4/5 9:14* Modified By:*/
@RunWith(SpringRunner.class)
@SpringBootTest
public class CodeGenerationTests {public static void main(String[] args) {// 代码生成器AutoGenerator mpg = new AutoGenerator();// 全局配置GlobalConfig gc = new GlobalConfig();//当前路径String projectPath = System.getProperty("user.dir");//输出路径gc.setOutputDir(projectPath + "/src/main/java");gc.setAuthor("程序猿学社");    //设置作者//生成代码后,是否打开文件夹gc.setOpen(false);gc.setFileOverride(false);  //是否覆盖原来代码,个人建议设置为false,别覆盖,危险系数太高gc.setServiceName("%sService");   //去掉service的I前缀,一般只需要设置service就行
/*        gc.setMapperName("%sMapper");gc.setXmlName("%sMapper");gc.setServiceImplName("%sServiceImpl");gc.setControllerName("%sController");*/gc.setDateType(DateType.ONLY_DATE);   //日期格式gc.setSwagger2(true);       // 实体属性 Swagger2 注解,实体类上会增加注释mpg.setGlobalConfig(gc);// 数据源配置DataSourceConfig dsc = new DataSourceConfig();dsc.setUrl("jdbc:mysql://127.0.0.1:3306/pro?useUnicode=true&characterEncoding=utf8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8");// dsc.setSchemaName("public");dsc.setDriverName("com.mysql.cj.jdbc.Driver");dsc.setUsername("root");dsc.setPassword("root");dsc.setDbType(DbType.MYSQL);    //指定数据库的类型mpg.setDataSource(dsc);// 包配置PackageConfig pc = new PackageConfig();pc.setParent("com.cxyxs.auto");   //自定义包的路径//pc.setModuleName("module");   //模块名称  设置后,会生成com.cxyxs.test.module,里面存放之前设置的mapper,entitypc.setEntity("entity");pc.setMapper("mapper");pc.setService("service");pc.setController("controller");mpg.setPackageInfo(pc);// 策略配置StrategyConfig strategy = new StrategyConfig();strategy.setInclude("student");    //设置映射的表名,可以设置多个表//表前缀设置  cxyxs_student//strategy.setTablePrefix(new String[]{"cxyxs_"});//包的命名规则,使用驼峰规则strategy.setNaming(NamingStrategy.underline_to_camel);//列的名称,使用驼峰规则strategy.setColumnNaming(NamingStrategy.underline_to_camel);//是否使用lombokstrategy.setEntityLombokModel(true);//驼峰命名strategy.setRestControllerStyle(true);strategy.setLogicDeleteFieldName("is_delete");   //逻辑删除,假删除会用到//自动填充字段,在项目开发过程中,例如创建时间,修改时间,每次,都需要我们来指定,太麻烦了,设置为自动填充规则,就不需要我们赋值咯TableFill fillInsert = new TableFill("create_time", FieldFill.INSERT);TableFill fillUpdate= new TableFill("update_time", FieldFill.UPDATE);List fillLists = new ArrayList();fillLists.add(fillInsert);fillLists.add(fillUpdate);strategy.setTableFillList(fillLists);//乐观锁//strategy.setVersionFieldName("version");mpg.setStrategy(strategy);mpg.execute();  //执行}
}

直接启动main方法 ,见证奇迹的时候到咯。

  • contoller,entity,mapper,service代码都给我们生成好咯。
  • swagger注释都给我们生成好咯,而且代码也很规范,让我们自己来写,可能会遇到很多很低级的错误。
  • 虽说,代码自动生成很智能,智能的前提,是有规范的,数据库命令,最高遵守相关的规范,这里就不过多阐述咯

controller类

package com.cxyxs.auto.controller;import com.cxyxs.auto.entity.Student;
import com.cxyxs.auto.mapper.StudentMapper;
import com.cxyxs.auto.util.Result;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import java.util.List;/*** <p>*  前端控制器* </p>** @author 程序猿学社* @since 2020-04-05*/
@RestController
@RequestMapping("/student")
public class StudentController {@Autowiredprivate StudentMapper studentMapper;@GetMapping("/test")@ApiOperation(value = "测试接口",notes = "测试")public List<Student> getStudent1(Student stu){List<Student> lists = studentMapper.selectList(null);return lists;}
}
  • StudentController这个类,是自动生成的,增加一个方法,来看看效果。

测试

http://localhost:8888/swagger-ui.html

  • 通过页面可以发现有一个basic-error-controller,实际上,我们代码里面没有定义这个,有强迫症的,可以百度解决方法,配置一下,这里社长,就不配置咯。
  • 通过可视化界面,前端可以看到返回的参数注释
  • 传参也有注释

点击try it out按钮

  • 跟前端需要对接的传参和返回参数都有注释,那个接口,用来干嘛的,都有注释文档。就没有后台什么事咯

在公众号"程序猿学社",后台回复关键字"代码自动生成",获取源码


原创不易,不要白嫖,觉得有用的社友,给我点赞,让更多的老铁看到这篇文章。
因技术能力有限,如文中有不合理的地方,希望各位大佬指出,在下方评论留言,谢谢,希望大家一起进步,一起成长。

作者:程序猿学社
原创公众号:『程序猿学社』,专注于java技术栈,分享java各个技术系列专题,以及各个技术点的面试题。
原创不易,转载请注明来源(注明:来源于公众号:程序猿学社, 作者:程序猿学社)。


http://chatgpt.dhexx.cn/article/TZuXrhP6.shtml

相关文章

4个免费代码自动生成神器

4个免费代码自动生成神器 日常写代码&#xff0c;是一件非常需要耐心的事情&#xff0c;尤其是那些没有技术含量重复使用到的一些代码排列组合&#xff0c;比如前端的一些html和css布局&#xff0c;简单繁杂&#xff0c;这个时候就会使用到一些免费代码自动生成神器&#xff0c…

java自动代码生成

1.概述 可在线自动生成代码&#xff0c;省去复制、修改通用模板代码的繁琐过程&#xff0c;减少团队70%以上的开发工作量 基于java的template模板引擎velocity&#xff0c;在定义好模板文件后&#xff0c;动态产生适应业务的java、xml、html、sql等代码文件 2.自动生成过程 …

Linux防火墙关闭方法

Linux防火墙关闭方法 关闭防火墙&#xff1a; 1、查看状态&#xff1a;systemctl status firewalld 2、关闭&#xff1a; systemctl stop firewalld&#xff08;只执行这个&#xff0c;重启后不行&#xff0c;还必须执行systemctl status firewalld&#xff09; 1.1、查看seli…

Linux中的Java项目服务器无故关闭

部署在Linux中的项目&#xff0c;最近一直无故关闭。找了很多都找不到原因。最近发现一个现象终于让我知道是什么原因导致我的开发服务器无故关闭了。 起因 部署在linux中的java开发服务器最近一直无故关闭。且是因为我在启动脚本中加了如下命令导致的。 tail -f log/game.lo…

Linux 系统下关闭防火墙

一、重启后永久性生效&#xff1a; 开启&#xff1a; chkconfig iptables on 关闭&#xff1a; chkconfig iptables off 二、即时生效&#xff0c;重启后失效&#xff1a; 开启&#xff1a; service iptables start 关闭&#xff1a; service iptables stop 需要说明的…

linux 桌面关闭防火墙,linux如何关闭防火墙的方法

火墙是一项协助确保信息安全的设备&#xff0c;会依照特定的规则&#xff0c;允许或是限制传输的数据通过。简单的来说防火墙的作用就是保护你的网络免受非法用户的侵入&#xff0c;虽然防火墙是为了你网络安全而存在&#xff0c;但是同时也限制了你上网操作&#xff0c;有很多…

LINUX系统下关闭防火墙

所谓防火墙指的是一个由软件和硬件设备组合而成、在内部网和外部网之间、专用网与公共网之间的界面上构造的保护屏障.是一种获取安全性方法的形象说法&#xff0c;它是一种计算机硬件和软件的结合&#xff0c;使Internet与Intranet之间建立起一个安全网关。 一、重启后永久性生…

JAVA配置防火墙开放、关闭端口

要达成的目的可以描述为&#xff1a; 在JAVA程序中随机生成一个可用的端口&#xff0c;并在防火墙中开放这个端口。 随机生成可用端口 /*** 随机获取10100-10200的未占用端口** return 端口号*/private int generateLocalPort() {while (true) {int port 10100 (new Random(…

Linux系统关闭防火墙命令

Linux系统关闭防火墙命令 下面是red hat/CentOs7关闭防火墙的命令! 1:查看防火状态 systemctl status firewalld service iptables status 2:暂时关闭防火墙 systemctl stop firewalld service iptables stop 3:永久关闭防火墙 systemctl disable firewalld chkconfi…

Linux下的关闭防火墙

一、临时关闭防火墙 1、 查看防火墙的状态 /etc/init.d/iptables status 2、 临时关闭防火墙 /etc/init.d/iptables stop 3、 查看关闭后的状态 二、永久关闭防火墙 命令&#xff1a;chkconfig --level 2345 iptables off 或者 chkconfig iptables off 其中2345 代表”执…

Linux关闭防火墙命令

一、下面是red hat/CentOs7关闭防火墙的命令! 1:查看防火状态 systemctl status firewalld service iptables status 2:暂时关闭防火墙 systemctl stop firewalld service iptables stop 3:永久关闭防火墙 systemctl disable firewalld chkconfig iptables off 4:重…

原生js 实现图片轮播(图片按钮+左右轮播)

该代码可以实现左右箭头点击切换,按钮点击切换,自动播放方面还需改进 点击切换方面算是实现了效果,自我感觉还需要改进,代码仅供参考 html部分 <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>…

JS——【案例】图片轮播图(自动轮播/手动点击/悬停显示)[技术栈:html、css、JavaScript]

1、效果&#xff1a; 2、需求&#xff1a; 3、代码实现&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"&…

如何用JS实现轮播图!

轮播图 1.思路与写法 1.1 首先我们拿到一个关于轮播图的实例我们要分析里面的功能&#xff0c;将其模块化处理&#xff1b; 1.2 首先需要实现的是自动轮播的效果&#xff1a; 1.2.1需要用到运动函数框架&#xff0c;startMove()&#xff0c;还需要用到定时器&#xff0c;这里…

javascript图片轮播技术动态实现

我们经常会在网页中见到轮播的图片&#xff0c;如京东主页面中图片自动更换。我们在这里对这一技术进行实现&#xff0c;主要能够使图片自动进行轮播&#xff0c;数字标签随着图片一同更换&#xff0c;鼠标移动到数字标签上&#xff0c;相应的图片停留&#xff0c;鼠标在整个图…

JS——实现轮播图(完整功能)

没有把细节单拎出来讲&#xff0c;但基本上所有重要步骤都在代码里边备注解释了~~ 个人认为比较难的地方就是&#xff1a; 怎么在自动播放到最后一张图片后&#xff0c;瞬间切换回第一张图片重新播放&#xff1f; 这里采用了比较取巧的方法&#xff0c;比如我用了四张例图&a…

Js实现图片点击切换与轮播

Js实现图片点击切换与轮播 图片点击切换 <!DOCTYPE html> <html><head> <meta charset"UTF-8"><title></title><script type"text/javascript">window.onloadfunction(){var btn1document.getElementById("…

原生JS-实现无限图片轮播

实现思路&#xff1a; 一、布局部分&#xff1a; 1、采用div>ul>li>img布局&#xff0c;来展示轮播的图片banner; 2、采用div>>ul>li>a标签&#xff0c;来显示小红点&#xff1b; 整个布局入下图所示&#xff1a;途中的&#xff0c;图中的第一个li和最后一…

HTML网页js超简单实现图片轮播

其实实现图片轮播很简单 1. 创建一个js文件&#xff08;自己会的博主不多说&#xff09; 2. 在html文件引入js文件 引入代码&#xff1a; <script type"text/javascript" src"js/sth.js"></script> 注意&#xff1a;sth是自己的js文件名自行…

JS实现图片轮播(方法一)

效果如下&#xff1a; 下面是具体的实现代码&#xff1a; HTML代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"…