1. 概述
1.1 官网
1.2 特点
- AutoGenerator 是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码,极大的提升了开发效率
2. CodeGenerator 源码
- 指定要生成的表(每次执行前都要再次确认)
- 配置数据源
- 设置生成文件存放的路径
- 设置父包名,会放到controller丶service丶mapper包的前面
- 设置作者,不可为null,否则会报错
- 设置是否添加@RestController注解
- 其他属性大部分有默认值,如非必要可以不用管
package com.xxx.generator;
import com.baomidou.mybatisplus.annotation.IdType;
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.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import java.util.ArrayList;
import java.util.List;
public class CodeGenerator {
private static String tables ="*";
private static String db_url="jdbc:mysql://localhost:3306/bookshop?useUnicode=true&useSSL=false&characterEncoding=utf8";
private static String db_driver ="com.mysql.jdbc.Driver";
private static String db_username="root";
private static String db_password="root";
private static String outputDir=System.getProperty("user.dir")+"/src/main/test/code";
private static String tablePrefix="";
private static String author="duson";
private static String parentPackage="com";
private static String moduleName=null;
private static boolean isAddRestController=true;
private static boolean isUseLombok=true;
private static boolean isUseSwagger=true;
private static boolean isUseAR=false;
private static IdType idType=IdType.AUTO;
private static DataSourceConfig dataSourceConfig(){
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl(db_url);
dsc.setDriverName(db_driver);
dsc.setUsername(db_username);
dsc.setPassword(db_password);
return dsc;
}
private static GlobalConfig globalConfig(){
GlobalConfig globalConfig = new GlobalConfig();
globalConfig
.setActiveRecord(isUseAR)
.setAuthor(author)
.setOutputDir(outputDir)
.setFileOverride(true)
.setIdType(idType)
.setServiceName("%sService")
.setSwagger2(isUseSwagger)
.setBaseResultMap(true)
.setBaseColumnList(true)
;
return globalConfig;
}
private static PackageConfig packageConfig() {
PackageConfig packageConfig = new PackageConfig();
packageConfig.setParent(parentPackage);
packageConfig.setModuleName(moduleName);
packageConfig.setController("controller");
packageConfig.setService("service");
packageConfig.setEntity("entity");
packageConfig.setMapper("mapper");
packageConfig.setXml("mapper");
return packageConfig;
}
private static InjectionConfig injectionConfig() {
InjectionConfig injectionConfig = new InjectionConfig() {
@Override
public void initMap() {
}
};
String templatePath = "/templates/mapper.xml.ftl";
List<FileOutConfig> focList = new ArrayList<>();
focList.add(new FileOutConfig(templatePath) {
@Override
public String outputFile(TableInfo tableInfo) {
return outputDir+ "/mapper_xml/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
}
});
injectionConfig.setFileOutConfigList(focList);
return injectionConfig;
}
private static TemplateConfig templateConfig() {
TemplateConfig templateConfig = new TemplateConfig();
templateConfig.setXml(null);
return templateConfig;
}
private static StrategyConfig strategyConfig() {
StrategyConfig strategyConfig = new StrategyConfig();
strategyConfig.setCapitalMode(true);
strategyConfig.setNaming(NamingStrategy.underline_to_camel);
if(tables.startsWith("*")) {
strategyConfig.setExclude();
}else if(tables.startsWith("-")){
strategyConfig.setExclude(tables.substring(1).split(","));
}else{
strategyConfig.setInclude(tables.split(","));
}
strategyConfig.setColumnNaming(NamingStrategy.underline_to_camel);
strategyConfig.setEntityLombokModel(isUseLombok);
strategyConfig.setRestControllerStyle(isAddRestController);
strategyConfig.setEntitySerialVersionUID(true);
strategyConfig.setTablePrefix(tablePrefix);
return strategyConfig;
}
public static void main(String[] args) {
AutoGenerator mpg = new AutoGenerator();
mpg.setGlobalConfig(globalConfig());
mpg.setDataSource(dataSourceConfig());
mpg.setPackageInfo(packageConfig());
mpg.setCfg(injectionConfig());
mpg.setTemplate(templateConfig());
mpg.setStrategy(strategyConfig());
mpg.setTemplateEngine(new FreemarkerTemplateEngine());
mpg.execute();
}
}
3. 生成的各层代码
3.1 生成的entity代码
package com.entity;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime;
import java.io.Serializable;
public class Book implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "book_id", type = IdType.AUTO)
private Integer bookId;
private String bookName;
private LocalDateTime bookDate;
private BigDecimal bookPrice;
private String bookCover;
private Integer categoryId;
public Integer getBookId() {
return bookId;
}
public void setBookId(Integer bookId) {
this.bookId = bookId;
}
public String getBookName() {
return bookName;
}
public void setBookName(String bookName) {
this.bookName = bookName;
}
public LocalDateTime getBookDate() {
return bookDate;
}
public void setBookDate(LocalDateTime bookDate) {
this.bookDate = bookDate;
}
public BigDecimal getBookPrice() {
return bookPrice;
}
public void setBookPrice(BigDecimal bookPrice) {
this.bookPrice = bookPrice;
}
public String getBookCover() {
return bookCover;
}
public void setBookCover(String bookCover) {
this.bookCover = bookCover;
}
public Integer getCategoryId() {
return categoryId;
}
public void setCategoryId(Integer categoryId) {
this.categoryId = categoryId;
}
@Override
public String toString() {
return "Book{" +
"bookId=" + bookId +
", bookName=" + bookName +
", bookDate=" + bookDate +
", bookPrice=" + bookPrice +
", bookCover=" + bookCover +
", categoryId=" + categoryId +
"}";
}
}
3.2 生成的mapper代码
package com.mapper;
import com.entity.Book;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
public interface BookMapper extends BaseMapper<Book> {
}
3.3 生成的service接口代码
package com.service;
import com.entity.Book;
import com.baomidou.mybatisplus.extension.service.IService;
public interface IBookService extends IService<Book> {
}
3.4 生成的service实现类代码
package com.service.impl;
import com.entity.Book;
import com.mapper.BookMapper;
import com.service.IBookService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
@Service
public class BookServiceImpl extends ServiceImpl<BookMapper, Book> implements IBookService {
}
3.5 生成的Controller代码
package com.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("//book")
public class BookController {
}
3.6 生成的mapper.xml代码
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.mapper.BookMapper">
<resultMap id="BaseResultMap" type="com.entity.Book">
<id column="book_id" property="bookId" />
<result column="book_name" property="bookName" />
<result column="book_date" property="bookDate" />
<result column="book_price" property="bookPrice" />
<result column="book_cover" property="bookCover" />
<result column="category_id" property="categoryId" />
</resultMap>
<sql id="Base_Column_List">
book_id, book_name, book_date, book_price, book_cover, category_id
</sql>
</mapper>