MyBatis-Plus学习笔记(2):代码生成器
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):代码生成器的更多相关文章
- MyBatis:学习笔记(4)——动态SQL
MyBatis:学习笔记(4)——动态SQL 如果使用JDBC或者其他框架,很多时候需要你根据需求手动拼装SQL语句,这是一件非常麻烦的事情.MyBatis提供了对SQL语句动态的组装能力,而且他只有 ...
- MyBatis 3学习笔记
MyBatis 3 一.MyBatis简介 优秀的持久层框架,支持支持自定义 SQL.存储过程以及高级映射,专注于SQL的编写. 为什么不使用工具类进行数据库操作: 功能简单,sql语句编写在 ...
- mybatis的学习笔记
前几天学习了mybatis,今天来复习一下它的内容. mybatis是一个基于Java的持久层框架,那就涉及到数据库的操作.首先来提出第一个问题:java有jdbc连接数据库,我们为什么还要使用框架呢 ...
- 关于mybatis的学习笔记
配置文件 贴出mybatis的配置文件,这里mybatis还未与spring做整合: <?xml version="1.0" encoding="UTF-8&quo ...
- mybatis缓存学习笔记
mybatis有两级缓存机制,一级缓存默认开启,可以在手动关闭:二级缓存默认关闭,可以手动开启.一级缓存为线程内缓存,二级缓存为线程间缓存. 一提缓存,必是查询.缓存的作用就是查询快.写操作只能使得缓 ...
- 3、MyBatis.Net学习笔记之增删改
增删改之前先说一下笔记1里提到的一个无法创建ISqlMapper对象的问题. <resultMaps> <resultMap id="FullResultMap" ...
- NFinal学习笔记 03—代码生成器
NFinal代码生成器与其他的代码生成器不太一样,只需要运行模块下的WebComplier.aspx即可生成最终的web层代码.包括数据库的操作,Router类, 调试文件等.附上一段代码与大家分享 ...
- MyBatis基础学习笔记--摘录
1.MyBatis是什么? MyBatis源自于IBatis,是一个持久层框架,封装了jdbc操作数据库的过程,使得开发者只用关心sql语句,无需关心驱动加载.连接,创建statement,手动设置参 ...
- MyBatis基础学习笔记--自总结
一.MyBatis和jdbc的区别 jdbc的过程包括: 1.加载数据库驱动. 2.建立数据库连接. 3.编写sql语句. 4.获取Statement:(Statement.PrepareStatem ...
- Mybatis进阶学习笔记——动态代理方式开发Dao接口、Dao层(推荐第二种)
1.原始方法开发Dao Dao接口 package cn.sm1234.dao; import java.util.List; import cn.sm1234.domain.Customer; pu ...
随机推荐
- C#中获取时间戳
{ 注意:下面是以毫秒为单位的13位 UTC 时间戳(非正规) }//先取得当前的UTC时间,然后转换成计算用的周期数(简称计时周期数),每个周期为100纳钞(ns)=0.1微秒(us)=0.00 ...
- 常见css属性
div { width: 100px; height: 100px; /* 表示行高 */ line-heigh ...
- 每天进步一点点------Allegro中SYMBOL种类
Allegro 中SYMBOL 种类在Allegro 中, Symbol 有五种, 它们分别是Package Symbol .Mechanical Symbol.Format Symbol.Shape ...
- 每天进步一点点------下载Microblaze程序到Flash
第一步 生成下载文件(bit文件) 选择之前的工作目录,打开SDK.点击Program FPGA图标. 将bootloop项改为Hello_World.elf.点击Program.此时可以不用连接下载 ...
- 13.56Mhz下50欧姆阻抗匹配简易教程
阻抗匹配(impedance matching) 主要用于传输线上,以此来达到所有高频的微波信号均能传递至负载点的目的,而且几乎不会有信号反射回来源点,从而提升能源效益.信号源内阻与所接传输线的特性阻 ...
- 《aelf经济和治理白皮书》重磅发布:为DAPP提供治理高效、价值驱动的生态环境
2020年2月17日,aelf正式发布<aelf经济和治理白皮书>,这是aelf继项目白皮书后,在aelf网络经济模型和治理模式方面的权威论述.<aelf经济和治理白皮书>描述 ...
- node学习之express(1)
1.前提是你安装了node,npm 2.此次我学习的网站是 汇智网 3.创建一个项目学习: npm init 按照提示,输入/不输入 项目的一些信息 安装express模块:npm install e ...
- float和position:absolute脱离文本流的区别
float和position:absolute脱离文本流的区别原创 paediatrician 最后发布于2016-09-19 10:43:05 阅读数 5375 收藏展开 文档流:将窗体自上而下分成 ...
- Caffe实例
下载链接以及说明: 1.caffe代码按照官方教程下载windows分支下面的就可以了(https://github.com/BVLC/caffe/tree/windows). 2.cmake(ht ...
- [lua]紫猫lua教程-命令宝典-L1-01-05. if判断结构
L1[if]01. 简单的if判断结构 没什么说得 if得基本结构如下 xxx= ) then testlib.traceprint("1-100") ) then testlib ...