mybatis-plus自动生成代码

  • 一、简易生成代码
  • 二、指定生成的样式,并且不在一个模块
    • 1.父pom文件配置
    • 2.子模块pom文件配置
    • 3.准备vm文件
    • 4.设置MyBatisPlusGenerator.java
    • 5.运行MyBatisPlusGenerator.java文件
    • 6.运行sign-auth模块,解决异常

一、简易生成代码

/*** 代码生成器* @since 2022-03-21*/
public class MpCode {public static void main(String[] args) {generate();}private  static  void generate(){FastAutoGenerator.create("jdbc:mysql://127.0.0.1:3306/life-sign?serverTimezone=UTC", "root", "root").globalConfig(builder -> {builder.author("lh") // 设置作者/*.enableSwagger() */// 开启 swagger 模式.fileOverride() // 覆盖已生成文件.outputDir("E:\\IDEA_MY\\life-sign\\sign-common\\sign-code\\src\\main\\java"); // 指定输出目录  和自己项目src一一对应}).packageConfig(builder -> {builder.parent("com.luck.sign") // 设置父包名.moduleName(null) // 设置父包模块名  解决路径冲突.serviceImpl("service.impl") //自定义包名imp 官方的是impi.entity("entity") //设置实体包为pojo.pathInfo(Collections.singletonMap(OutputFile.mapperXml, "E:\\IDEA_MY\\life-sign\\sign-common\\sign-code\\src\\main\\resources\\mapper")); // 设置mapperXml生成路径}).strategyConfig(builder -> {builder.entityBuilder().enableLombok();//使用lombokbuilder.controllerBuilder().enableHyphenStyle().enableRestStyle();//开启RestControllerbuilder.addInclude("sign_tag"); // 设置需要生成的表名})
//                  .templateEngine(new VelocityTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板.execute();}
}

二、指定生成的样式,并且不在一个模块

1.父pom文件配置

我是在父pom文件里进行的依赖管理

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.luck</groupId><artifactId>life-sign</artifactId><version>1.0-SNAPSHOT</version><modules><module>sign-auth</module><module>sign-common</module><module>sign-work</module></modules><!--    打包方式 pom--><packaging>pom</packaging><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target></properties><dependencyManagement><dependencies><!--swagger本身不支持spring mvc的,springfox把swagger包装了一下,让他可以支持springmvc--><!-- swagger-ui --><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</artifactId><version>2.9.2</version></dependency><!-- swagger2 --><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.9.2</version></dependency><!--spring cloud Hoxton.SR1--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Hoxton.SR1</version><type>pom</type><scope>import</scope></dependency><!--spring boot 2.2.2--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>2.2.2.RELEASE</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.27</version></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.1.4</version></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.1</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.23</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13</version><scope>test</scope></dependency><!--      lombok 包含了lombok.extern.slf4j.Slf4j --><!--      https://blog.csdn.net/xiaozhuangyumaotao/article/details/106009846--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.22</version></dependency></dependencies></dependencyManagement></project>

2.子模块pom文件配置

父模块管理了依赖,对于父模块里面有的,子模块导入,就不需要写版本号了

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>sign-common</artifactId><groupId>com.luck</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><packaging>jar</packaging><artifactId>sign-code</artifactId><dependencies><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</artifactId></dependency><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId></dependency><!-- mybatis plus 代码生成器引擎依赖--><dependency><groupId>org.apache.velocity</groupId><artifactId>velocity</artifactId><version>1.7</version></dependency><!-- mybatis plus 代码生成器依赖 --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.4.1</version></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency></dependencies></project>

以上模块的导入,针对mybatis-plus自动生成代码的功能,主要如下几个依赖

<!-- mybatis plus 代码生成器引擎依赖--><dependency><groupId>org.apache.velocity</groupId><artifactId>velocity</artifactId><version>1.7</version></dependency><!-- mybatis plus 代码生成器依赖 --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.4.1</version></dependency><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId></dependency>

3.准备vm文件

资源链接如下,若下载不了,可留言
mybatis-plus自动生成代码的自定义引擎文件(vm文件)

4.设置MyBatisPlusGenerator.java

用心看,铁子们应该看的懂

package com.luck.sign.util;import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
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.VelocityTemplateEngine;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.WordUtils;import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;/*** mybatis plus 代码自动生成器* 参考: https://blog.csdn.net/ChunwaiLeung/article/details/121629340*/
public class MyBatisPlusGenerator {private static String module;private static String PACKAGE = "com.luck.sign";private static String AUTHOR = "lh";private static String DATA_USER_NAME = "root";private static String DATA_PASSWORD = "root";private static String DATA_DRIVER_NAME = "com.mysql.cj.jdbc.Driver";private static String DATA_URL = "jdbc:mysql://127.0.0.1:3306/life-sign?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowMultiQueries=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai";private static String PATH_MAPPER  = "/src/main/java/com/luck/sign/";private static String PATH_MAPPER_XML = "/src/main/resources/mapper/";private static String PATH_CONTROLLER = "/src/main/java/com/luck/sign/";private static String PATH_SERVICE = "/src/main/java/com/luck/sign/";private static String PATH_SERVICE_IMP = "/src/main/java/com/luck/sign/";private static String PATH_ENTITY = "/sign-common/sign-code/src/main/java/com/luck/sign/";public static void main(String[] args) {module = "/" + scanner("要输入到哪个项目?");String[] tables = scanner("请输入要生成的表名多个用 , 分割").split(",");for (String table : tables) {shell(table);}}public static String scanner(String someThing) {Scanner scanner = new Scanner(System.in);StringBuilder help = new StringBuilder();help.append("请输入" + someThing + ":");System.out.println(help.toString());if (scanner.hasNext()) {String sc = scanner.next();if ("" != sc && null != sc) {return sc;}}throw new MybatisPlusException("请输入正确的" + someThing + "!");}private static void shell(String table) {// 代码生成器AutoGenerator mpg = new AutoGenerator();// 数据源配置DataSourceConfig dsc = new DataSourceConfig();dsc.setDriverName(DATA_DRIVER_NAME);dsc.setUsername(DATA_USER_NAME);dsc.setPassword(DATA_PASSWORD);dsc.setUrl(DATA_URL);mpg.setDataSource(dsc);// 全局配置final String projectPath = System.getProperty("user.dir"); // 默认定位到的当前用户目录("user.dir")(即工程根目录) https://blog.csdn.net/qq_29964641/article/details/86686585GlobalConfig gc = new GlobalConfig();gc.setAuthor(AUTHOR);//作者名称gc.setDateType(DateType.ONLY_DATE);gc.setOpen(false); //生成后是否打开资源管理器gc.setServiceName("%sService"); //自定义文件命名,注意 %s 会自动填充表实体属性! %s作为占位符gc.setServiceImplName("%sServiceImpl");gc.setMapperName("%sMapper");gc.setXmlName("%sMapper");gc.setSwagger2(true);// 是否开启Swagger2模式gc.setFileOverride(true); //重新生成时文件是否覆盖gc.setActiveRecord(false);// 不需要ActiveRecord特性的请改为falsegc.setEnableCache(false);// XML 二级缓存gc.setBaseResultMap(true);// XML ResultMapgc.setBaseColumnList(false);// XML columList
//        gc.setIdType(IdType.ID_WORKER_STR); //主键策略
//        gc.setOutputDir(projectPath + "/src/main/java");
//        gc.setControllerName("%sController");mpg.setGlobalConfig(gc);// 包配置PackageConfig pc = new PackageConfig();pc.setParent(PACKAGE);pc.setMapper("mapper");//daopc.setService("service");//servciepc.setController("controller");//controllerpc.setEntity("entity");
//        pc.setModuleName("model名"); 自定义包名// 自定义配置InjectionConfig cfg = new InjectionConfig() {@Overridepublic void initMap() {//                //表信息String name = this.getConfig().getStrategyConfig().getColumnNaming().name();}};// 模板引擎是 freemarker// 自定义controller的代码模板// 如果模板引擎是 velocityString templatePath = "/template/Mapper.xml.vm";// 自定义输出配置List<FileOutConfig> focList = new ArrayList<>();// 自定义配置会被优先输出,配置mapper.xmlfocList.add(new FileOutConfig(templatePath) {@Overridepublic String outputFile(TableInfo tableInfo) {//根据自己的位置修改return projectPath  + module + PATH_MAPPER_XML + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;}});//控制层templatePath = "/template/Controller.java.vm";// 自定义配置会被优先输出focList.add(new FileOutConfig(templatePath) {@Overridepublic String outputFile(TableInfo tableInfo) {// 自定义输出文件名 + pc.getModuleName()String expand = projectPath  + module + PATH_CONTROLLER + "controller";String entityFile = String.format((expand + File.separator + "%s" + ".java"), tableInfo.getControllerName());return entityFile;}});//业务层templatePath = "/template/Service.java.vm";// 自定义配置会被优先输出focList.add(new FileOutConfig(templatePath) {@Overridepublic String outputFile(TableInfo tableInfo) {// 自定义输出文件名 + pc.getModuleName()String expand = projectPath  + module + PATH_SERVICE + "service";String entityFile = String.format((expand + File.separator + "%s" + ".java"), tableInfo.getServiceName());return entityFile;}});templatePath = "/template/ServiceImpl.java.vm";// 自定义配置会被优先输出focList.add(new FileOutConfig(templatePath) {@Overridepublic String outputFile(TableInfo tableInfo) {// 自定义输出文件名 + pc.getModuleName()String expand = projectPath  + module + PATH_SERVICE_IMP + "service/impl";String entityFile = String.format((expand + File.separator + "%s" + ".java"), tableInfo.getServiceImplName());return entityFile;}});//数据层templatePath = "/template/Mapper.java.vm";// 自定义配置会被优先输出focList.add(new FileOutConfig(templatePath) {@Overridepublic String outputFile(TableInfo tableInfo) {// 自定义输出文件名 + pc.getModuleName()String expand = projectPath + module +PATH_MAPPER + "mapper";String entityFile = String.format((expand + File.separator + "%s" + ".java"), tableInfo.getMapperName());return entityFile;}});//数据层templatePath = "/template/Entity.java.vm";// 自定义配置会被优先输出focList.add(new FileOutConfig(templatePath) {@Overridepublic String outputFile(TableInfo tableInfo) {// 自定义输出文件名 + pc.getModuleName()String expand = projectPath + PATH_ENTITY + "entity";String entityFile = String.format((expand + File.separator + "%s" + ".java"), tableInfo.getEntityName());return entityFile;}});mpg.setPackageInfo(pc);cfg.setFileOutConfigList(focList);mpg.setCfg(cfg);// 配置模板TemplateConfig templateConfig = new TemplateConfig();// 配置自定义输出模板//指定自定义模板路径,注意不要带上.ftl/.vm, 会根据使用的模板引擎自动识别templateConfig.setService("/template/Service.java.vm");templateConfig.setServiceImpl("/template/ServiceImpl.java.vm");templateConfig.setEntity("/template/Entity.java.vm");templateConfig.setMapper("/template/Mapper.java.vm");templateConfig.setController("/template/Controller.java.vm");//        //此处设置为null,就不会再java下创建xml的文件夹了templateConfig.setXml("/template/Mapper.xml.vm");mpg.setTemplate(templateConfig);// 策略配置StrategyConfig strategy = new StrategyConfig();strategy.setNaming(NamingStrategy.underline_to_camel); // 数据库表映射到实体的命名策略strategy.setColumnNaming(NamingStrategy.underline_to_camel); //数据库表字段映射到实体的命名策略strategy.setEntityLombokModel(true);strategy.setRestControllerStyle(true);strategy.setInclude(table); //table 表名对那一张表生成代码strategy.setControllerMappingHyphenStyle(true);strategy.setEntityLombokModel(true); // lombok 模型 @Accessors(chain = true) setter链式操作
//        strategy.setSuperEntityClass("com.baomidou.ant.common.BaseEntity");
//        strategy.setSuperControllerClass("com.baomidou.ant.common.BaseController"); // 公共父类
//        strategy.setSuperEntityColumns("id"); //         写于父类中的公共字段
//        strategy.setTablePrefix("t_");  //生成实体时去掉表前缀
//        strategy.setRestControllerStyle(true); //restful api风格控制器
//        strategy.setControllerMappingHyphenStyle(true); //url中驼峰转连字符mpg.setStrategy(strategy);mpg.setTemplateEngine(new VelocityTemplateEngine());//默认模板引擎mpg.execute();}/*** 表名转换成Java类名*/private String tableToJava(String tableName, String tablePrefix) {if (StringUtils.isNotBlank(tablePrefix)) {tableName = tableName.replaceFirst(tablePrefix, "");}return columnToJava(tableName);}/*** 列名转换成Java属性名*/public String columnToJava(String columnName) {return WordUtils.capitalizeFully(columnName, new char[]{'_'}).replace("_", "");}
}

5.运行MyBatisPlusGenerator.java文件


6.运行sign-auth模块,解决异常

问题:
因为在MyBatisPlusGenerator.java 的全局参数配置重开启了swagger,但是模块并没有引入相关依赖
解决:
1.因为其他模块都会引入sign-code模块,所以在sign-code模块里引入
2.配置swagger.config,否则swagger不能正常访问<dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</artifactId></dependency><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId></dependency>
报错:
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'signOpenidController' defined in file [E:\IDEA_MY\life-sign\sign-auth\target\classes\com\luck\sign\controller\SignOpenidController.class]: Unsatisfied dependency expressed through constructor parameter 0; nested exception is org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'signOpenidServiceImpl': Unsatisfied dependency expressed through field 'baseMapper'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.luck.sign.mapper.SignOpenidMapper' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:798) ~[spring-beans-5.2.2.RELEASE.jar:5.2.2.RELEASE]... ...
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'signOpenidServiceImpl': Unsatisfied dependency expressed through field 'baseMapper'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.luck.sign.mapper.SignOpenidMapper' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:643) ~[spring-beans-5.2.2.RELEASE.jar:5.2.2.RELEASE]... ...
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.luck.sign.mapper.SignOpenidMapper' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1695) ~[spring-beans-5.2.2.RELEASE.jar:5.2.2.RELEASE]... ...
解决方式:
在启动类加注释 @MapperScan("com.luck.sign.mapper"),再运行即可@MapperScan("com.luck.sign.mapper")
@SpringBootApplication
public class AuthApplication {public static void main(String[] args){SpringApplication.run(AuthApplication.class,args);}
}

Mybatis Plus自动生成代码相关推荐

  1. SpringBoot如何自动生成实体类和Dao层以及映射文件(mybatis generator 自动生成代码)

    一.首先添加自动生成代码插件 <!-- mybatis generator 自动生成代码插件 生成时解除注释 --><plugin><groupId>org.myb ...

  2. SpringBoot入门篇--整合mybatis+generator自动生成代码+druid连接池+PageHelper分页插件

    我们这一一篇博客讲的是如何整合Springboot和Mybatis框架,然后使用generator自动生成mapper,pojo等文件.然后再使用阿里巴巴提供的开源连接池druid,这个连接池的好处我 ...

  3. (转)MyBatis框架的学习(七)——MyBatis逆向工程自动生成代码

    http://blog.csdn.net/yerenyuan_pku/article/details/71909325 什么是逆向工程 MyBatis的一个主要的特点就是需要程序员自己编写sql,那么 ...

  4. Mybatis中自动生成代码(利用mybatis-generator-core-1.3.2)

    Mybatis中自动生成代码(利用mybatis-generator-core-1.3.2) 引言: 在使用mybatis开发的过程中,通常我们会给数据库的每张表编写对应的po.mapper.mapp ...

  5. 使用Mybatis Generator自动生成代码

    MyBatis Generator(MBG)是MyBatis MyBatis 和iBATIS的代码生成器. 它将为所有版本的MyBatis以及版本2.2.0之后的iBATIS版本生成代码. 它将内省数 ...

  6. Mybatis逆向工程自动生成代码文件

    一般来说都会新建另外一个项目,用于生成代码文件,然后拷贝到需要的项目中.新建maven项目用于生成代码文件,项目目录如下所示: pom.xml内容如下: <project xmlns=" ...

  7. Mybatis(1)——Mybatis Generator自动生成代码

    MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可以使用简单的 XML ...

  8. mybatis generator 自动生成代码(带注释的实体类)

    使用前提: 当你开发的java 项目或新模块的数据库有N张表操作时,这时要自己写实体类.dao.SqlMapper.xml等文件,如果有多个表,就是造成时间浪费降低开发效率,所以建议使用mybatis ...

  9. Eclipse使用mybatis generator自动生成代码

    一.写在前面 Mybatis属于半自动ORM,在使用这个框架中,工作量最大的就是书写Mapping的映射文件,由于手动书写很容易出错,我们可以利用Mybatis-Generator来帮我们自动生成文件 ...

最新文章

  1. 获取json格式字符串的简单方法
  2. 时代中坚:互联网电视迎来极致时代
  3. 计算机视觉实习岗面试准备(一.基础知识)
  4. Dataset:(公交车、恐龙、大象、花朵、骏马)六类图片数据集(AutoKeras测试)的简介、下载、使用方法之详细攻略
  5. Mac 可设置环境变量的位置、查看和添加PATH环境变量
  6. Python 中实用却不常见的小技巧!
  7. 业务专题篇:用户增长分析
  8. Linux下如何搭建Java环境
  9. 两种方法递归斐波那契数列
  10. Hadoop_17_MapRduce_案例2_实现用户手机流量统计(ReduceTask并行度控制)
  11. java从0单排之java就业培训教程复习与面试题回顾——02
  12. The Basics of 3D Printing in 2015 - from someone with 16 WHOLE HOURS' experience
  13. 欢迎关注异贝!今天与您一起分享服装行业异贝引客方案设计!
  14. 在PHP中用sleep导致诡异事件
  15. npm init @vitejs/app的背后,仅是npm CLI的冰山一角
  16. server 服务器文档,服务器文档,server document,音标,读音,翻译,英文例句,英语词典...
  17. 活动并发测试-1000个不同用户同时并发请求报名笔记
  18. SpringBoot发送邮件通过SendGrid服务平台(带动态模板)
  19. mysql表id的数据类型是_MySQL表中的数据类型
  20. 企业微信三方开发(五):扫码登录

热门文章

  1. 我的数据分析学习路径设计
  2. php定义指定长度数组,PHP中定义数组时,不需要指定数组的大小。
  3. matlab sort三维_三维数组存储顺序
  4. 特定领域知识图谱融合方案:文本匹配算法ERNIE-Gram单塔等诸多模型【_副本
  5. 【MySQL 教程】达达集团实时计算任务SQL化实践
  6. Java------Thread线程
  7. android hook 第三方app_不需要Root即可Hook别人APP的方法
  8. 大班科学计算机的发明应用教案,大班教案时钟的发明_大班科学教案:时钟的秘密...
  9. 计算机怎么识别你写的代码?
  10. Markdown格式下符号及数学公式的输入