AutoGenerator 是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码。

项目结构:

生成前:

生成后:

pom.xml:

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.3.1.tmp</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.3.1.tmp</version>
</dependency>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.29</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

代码生成主类:PlusGenerator

package com.cf.plusdm2;

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.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine; public class PlusGenerator { 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);
//是否覆盖已有文件,默认false
gc.setFileOverride(true);
//实体属性 Swagger2 注解
//gc.setSwagger2(true);
//mapper.xml中生成通用查询结果列
gc.setBaseColumnList(true);
//mapper.xml中生成通用查询映射结果
gc.setBaseResultMap(true);
//设置Controller、Mapper、mapper.xml等命名方式,使用默认即可。
/*gc.setServiceName("%sService");
gc.setControllerName();
gc.setMapperName();
gc.setEntityName();
gc.setXmlName();
gc.setServiceImplName();*/
mpg.setGlobalConfig(gc); //数据源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl("jdbc:mysql://localhost/localdb?useUnicode=true&characterEncoding=UTF-8");
//数据库 schema name
// dsc.setSchemaName("public");
//数据库驱动
dsc.setDriverName("com.mysql.jdbc.Driver");
//数据库连接用户名
dsc.setUsername("root");
//数据库连接密码
dsc.setPassword("123456");
mpg.setDataSource(dsc); //包配置
PackageConfig pc = new PackageConfig();
//父包模块名
pc.setModuleName("user");
//父包名,如果为空,将下面子包名必须写全部, 否则就只需写子包名
pc.setParent("com.cf.plusdm2");
//设置Controller、Mapper、mapper.xml等存放的包名
/*pc.setController();
pc.setEntity();
...*/
mpg.setPackageInfo(pc); // 策略配置
StrategyConfig strategy = new StrategyConfig();
//数据库表映射到实体的命名策略
strategy.setNaming(NamingStrategy.underline_to_camel);
//数据库表字段映射到实体的命名策略, 未指定按照 naming 执行
strategy.setColumnNaming(NamingStrategy.underline_to_camel);
//是否为lombok模型,默认false
strategy.setEntityLombokModel(true);
//生成 @RestController 控制器
strategy.setRestControllerStyle(true);
//需要包含的表名,允许正则表达式
strategy.setInclude("tb_user");
//驼峰转连字符
strategy.setControllerMappingHyphenStyle(true);
//表前缀
strategy.setTablePrefix("tb_");
mpg.setStrategy(strategy);
mpg.setTemplateEngine(new FreemarkerTemplateEngine());
mpg.execute();
}
}

当以上生成不能满足需求时,MyBatis-Plus也提供了自定义生成的方法,如使用InjectionConfig和TemplateConfig。

自定义生成Controller

1.首先创建用于生成Controller的FreeMarker模板文件,内容可以参照com.baomidou.mybatis-plus-generator.3.3.1.tmp.mybatis-plus-generator-3.3.1.tmp.jar!.templates.controller.java.ftl(默认Controller的模板文件)模板文件进行修改。

src/main/resources/ftl/controller.java.ftl:

package ${package.Controller};

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.beans.factory.annotation.Autowired;
<#if restControllerStyle>
import org.springframework.web.bind.annotation.RestController;
<#else>
import org.springframework.stereotype.Controller;
</#if>
<#if superControllerClassPackage??>
import ${superControllerClassPackage};
</#if>
<#if cfg.servicePackage??>
import ${cfg.servicePackage}.${table.serviceName};
</#if>
<#if cfg.entityPackage??>
import ${cfg.entityPackage}.${table.entityName};
</#if> /**
* <p>
* ${table.comment!} 前端控制器
* </p>
*
* @author ${author}
* @since ${date}
*/
<#if restControllerStyle>
@RestController
<#else>
@Controller
</#if>
@RequestMapping("<#if package.ModuleName??>/${package.ModuleName}</#if>/<#if controllerMappingHyphenStyle??>${controllerMappingHyphen}<#else>${table.entityPath}</#if>")
<#if kotlin>
class ${table.controllerName}<#if superControllerClass??> : ${superControllerClass}()</#if>
<#else>
<#if superControllerClass??>
public class ${table.controllerName} extends ${superControllerClass} {
<#else>
public class ${table.controllerName} {
</#if>
@Autowired
private ${table.serviceName} ${table.serviceName?uncap_first}; @RequestMapping("/add")
public String insert(User user){
return ${table.serviceName?uncap_first}.save(user) ? "success" : "fail";
}
}
</#if>

2.在PlusGenerator中策略配置上方添加InjectionConfig和TemplateConfig的配置:

        //自定义配置
InjectionConfig cfg = new InjectionConfig() {
@Override
public void initMap() {
// to do nothing
}
};
//传入模板的参数,在模板中通过cfg.servicePackage的方式来获取
Map<String, Object> map = new HashMap<>();
map.put("servicePackage", pc.getParent() + "." + pc.getService());
map.put("entityPackage", pc.getParent() + "." + pc.getEntity());
cfg.setMap(map);
mpg.setCfg(cfg); //配置模板
TemplateConfig templateConfig = new TemplateConfig();
templateConfig.setController("/ftl/controller.java");
mpg.setTemplate(templateConfig);

使用templateConfig.setController()方法来设置生成controller的模板,注意不要带上.ftl/.vm, 会根据使用的模板引擎自动识别。当未设置值时,则使用默认MyBatis-Plus提供的默认的模板。当设置为null时,则不会生成Controller。(mapper、service等类似)

重新运行PlusGenerator,生成后的Controller如下:

package com.cf.plusdm2.user.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RestController;
import com.cf.plusdm2.user.service.IUserService;
import com.cf.plusdm2.user.entity.User; /**
* <p>
* 前端控制器
* </p>
*
* @author 布禾
* @since 2020-02-10
*/
@RestController
@RequestMapping("/user/user")
public class UserController {
@Autowired
private IUserService iUserService; @RequestMapping("/add")
public String insert(User user){
return iUserService.save(user) ? "success" : "fail";
}
}

代码生成器详细使用可参考:代码生成器

MyBatis-Plus学习笔记(2):代码生成器的更多相关文章

  1. MyBatis:学习笔记(4)——动态SQL

    MyBatis:学习笔记(4)——动态SQL 如果使用JDBC或者其他框架,很多时候需要你根据需求手动拼装SQL语句,这是一件非常麻烦的事情.MyBatis提供了对SQL语句动态的组装能力,而且他只有 ...

  2. MyBatis 3学习笔记

    MyBatis 3 一.MyBatis简介 优秀的持久层框架,支持支持自定义 SQL.存储过程以及高级映射,专注于SQL的编写. ​ 为什么不使用工具类进行数据库操作: ​ 功能简单,sql语句编写在 ...

  3. mybatis的学习笔记

    前几天学习了mybatis,今天来复习一下它的内容. mybatis是一个基于Java的持久层框架,那就涉及到数据库的操作.首先来提出第一个问题:java有jdbc连接数据库,我们为什么还要使用框架呢 ...

  4. 关于mybatis的学习笔记

    配置文件 贴出mybatis的配置文件,这里mybatis还未与spring做整合: <?xml version="1.0" encoding="UTF-8&quo ...

  5. mybatis缓存学习笔记

    mybatis有两级缓存机制,一级缓存默认开启,可以在手动关闭:二级缓存默认关闭,可以手动开启.一级缓存为线程内缓存,二级缓存为线程间缓存. 一提缓存,必是查询.缓存的作用就是查询快.写操作只能使得缓 ...

  6. 3、MyBatis.Net学习笔记之增删改

    增删改之前先说一下笔记1里提到的一个无法创建ISqlMapper对象的问题. <resultMaps> <resultMap id="FullResultMap" ...

  7. NFinal学习笔记 03—代码生成器

    NFinal代码生成器与其他的代码生成器不太一样,只需要运行模块下的WebComplier.aspx即可生成最终的web层代码.包括数据库的操作,Router类, 调试文件等.附上一段代码与大家分享 ...

  8. MyBatis基础学习笔记--摘录

    1.MyBatis是什么? MyBatis源自于IBatis,是一个持久层框架,封装了jdbc操作数据库的过程,使得开发者只用关心sql语句,无需关心驱动加载.连接,创建statement,手动设置参 ...

  9. MyBatis基础学习笔记--自总结

    一.MyBatis和jdbc的区别 jdbc的过程包括: 1.加载数据库驱动. 2.建立数据库连接. 3.编写sql语句. 4.获取Statement:(Statement.PrepareStatem ...

  10. Mybatis进阶学习笔记——动态代理方式开发Dao接口、Dao层(推荐第二种)

    1.原始方法开发Dao Dao接口 package cn.sm1234.dao; import java.util.List; import cn.sm1234.domain.Customer; pu ...

随机推荐

  1. jQuery的主要使用方法

    一.在html中添加jquery,可以使用cdn加载jquery 1.网址:https://www.bootcdn.cn/jquery/ 2.推荐使用3.4左右版本的,建议使用min.js后缀的,mi ...

  2. 如何查看mac多少位的操作系统?

    1.点击工具栏左上角点击 (苹果Logo)标志,关于本机  -->  更多信息 --> 系统报告  -->(左侧栏中)软件 (有的电脑是没有的例如第一张图) 2. 输入命令 una ...

  3. 16 符号 xargs

    03. 系统特殊符号: 1) 基础符号系列 美元符号:$ 叹号符号: ! 取反 竖线符号: | 管道符号 前一个命令执行结果交给后面命令处理 xargs 命令|xargs 命令 xargs: 将信息进 ...

  4. centos useradd 命令详解

    useradd 命令 Usage: useradd [options] LOGIN useradd -D useradd -D [options] Options: -b, --base-dir BA ...

  5. EAC3 mantissa quantization(VQ & GAQ)

    EAC3基于hebap来决定mantissa的quantizer. hebap如下: mantissa 使用VQ(vector quantization) 和GAQ(gain adaptive qua ...

  6. RTMP 协议规范(中文版)

    本文是为截至发稿时止最新 Adobe 官方公布的 RTMP 规范.本文包含 RTMP 规范的全部内容.是第一个比较全面的 RTMP 规范的中译本.由于成文时间仓促,加上作者知识面所限,翻译错误之处在所 ...

  7. Linux上查看当前系统各内存分区信息

    命令 ulimit -a -a 查看所有信息,同理,也可以例如 ulimit -s 只查看栈占内存信息

  8. C语言数据结构——第三章 栈和队列

    三.栈和队列 栈和队列是两种重要的线性结构.从数据结构的角度来看,栈和队列也是线性表,它的特殊性在于栈和队列的基本操作是线性表操作的子集,它们的操作相对于线性表来说是受到限制的,因此,可以称其为限定性 ...

  9. 1.3 使用jmeter进行http接口测试

    来源: http://www.cnblogs.com/alisapan/p/6150309.html 此篇纯是搬运记载..   一.测试需求描述 1. 本次测试的接口为http服务端接口 2. 接口的 ...

  10. Codeforces Round #624 (Div. 3) A. Add Odd or Subtract Even(水题)

    You are given two positive integers aa and bb . In one move, you can change aa in the following way: ...