文章目录
- 概述
- 创建springboot项目
- pom文件
- aplication.yml
- 代码生成类
- mybatis-plus提供的变量
- controller模板
- mapper模板
- 总结
概述
创建springboot项目,在这里使用的是springboot 2.6.13版本,引入的项目依赖包如pom文件所写,jdk使用1.8,集成swagger
创建springboot项目
使用start.aliyun.com创建springboot项目
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 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.rc</groupId><artifactId>generator-demo</artifactId><version>0.0.1-SNAPSHOT</version><name>generator-demo</name><description>generator-demo</description><properties><java.version>1.8</java.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><spring-boot.version>2.6.13</spring-boot.version></properties><dependencies><!--web--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--springboot--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><!--mysql连接驱动--><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId></dependency><!--lombok类--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><!--mybatis-plus--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.2</version></dependency><!--druid数据源--><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.2.20</version></dependency><!--swagger--><dependency><groupId>com.spring4all</groupId><artifactId>swagger-spring-boot-starter</artifactId><version>1.9.1.RELEASE</version></dependency><!--热启动--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId></dependency><!--mybatis-plus代码生成--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.4.0</version></dependency><!--freemarker模板引擎--><dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.31</version></dependency><!--lang3工具类--><dependency><groupId>org.apache.commons</groupId><artifactId>commons-lang3</artifactId></dependency><!--测试--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring-boot.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>1.8</source><target>1.8</target><encoding>UTF-8</encoding></configuration></plugin><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>${spring-boot.version}</version><configuration><mainClass>com.rc.GeneratorDemoApplication</mainClass><skip>true</skip></configuration><executions><execution><id>repackage</id><goals><goal>repackage</goal></goals></execution></executions></plugin></plugins></build>
</project>
使用mybatis-plus-generator时需要注意版本号,本项目使用的是3.4.0版本
aplication.yml
server:port: 8096servlet:context-path: /spring:datasource:url: jdbc:mysql://127.0.0.1:3306/you_table?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMTusername: rootpassword: root
代码生成类
public class CodeGenerator {public static String tables = "user"; //需要自动生成代码的表,以英文逗号隔开public static void main(String[] args) {//代码生成器对象AutoGenerator autoGenerator = new AutoGenerator();//全局配置GlobalConfig gc = new GlobalConfig();//获取项目目录String projectPath = System.getProperty("user.dir");gc.setOutputDir(projectPath+"/src/main/java");gc.setAuthor("rc");gc.setOpen(false);gc.setServiceName("%sService");autoGenerator.setGlobalConfig(gc);//数据源配置DataSourceConfig dsc = new DataSourceConfig();dsc.setUrl("jdbc:mysql://192.168.1.229:3306/rcdb?useUnicode=true&useSSL=false&characterEncoding=utf-8&serverTimezone=UTC");dsc.setDriverName("com.mysql.cj.jdbc.Driver");dsc.setUsername("root");dsc.setPassword("wangcheng");autoGenerator.setDataSource(dsc);//包配置PackageConfig pc = new PackageConfig();pc.setModuleName(null);pc.setParent("com.rc");autoGenerator.setPackageInfo(pc);//自定义配置InjectionConfig cfg = new InjectionConfig() {@Overridepublic void initMap() {}};//模板引擎是freemarkerString templatePath = "/template/mapper.xml.ftl";//模版引擎是velocity//String templatePath = "/template/mapper.xml.vm";List<FileOutConfig> focList = new ArrayList<>();//需要生成*mapper.xml时需要配置focList.add(new FileOutConfig(templatePath) {@Overridepublic String outputFile(TableInfo tableInfo) {return projectPath+"/src/main/resources/mapper/" + "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;}});cfg.setFileOutConfigList(focList);autoGenerator.setCfg(cfg);//配置模板TemplateConfig templateConfig = new TemplateConfig();templateConfig.setController("template/Controller.java");templateConfig.setXml(null);autoGenerator.setTemplate(templateConfig);//策略配置StrategyConfig strategyConfig = new StrategyConfig();strategyConfig.setNaming(NamingStrategy.underline_to_camel);strategyConfig.setColumnNaming(NamingStrategy.underline_to_camel);strategyConfig.setEntityLombokModel(true);strategyConfig.setRestControllerStyle(true);strategyConfig.setInclude(tables.split(","));strategyConfig.setControllerMappingHyphenStyle(true);strategyConfig.setTablePrefix("m_");autoGenerator.setStrategy(strategyConfig);autoGenerator.setTemplateEngine(new FreemarkerTemplateEngine());autoGenerator.execute();}
}
mybatis-plus提供的变量
{"date": "2018-10-30","superServiceImplClassPackage": "com.baomidou.mybatisplus.extension.service.impl.ServiceImpl","baseResultMap": true,"superMapperClass": "BaseMapper","activeRecord": true,"superServiceClass": "IService","superServiceImplClass": "ServiceImpl","table": {"comment": "表备注","commonFields": [],"controllerName": "AirStatLiveDataController","convert": false,"entityName": "AirStatLiveData","entityPath": "airStatLiveData","fieldNames": "table_id, citycode, cityname, createtime, time, info, devid, stationname, aqi, pm25, pm10, co, so2, no2, o3, prkey","fields": [{"capitalName": "TableId","columnType": "LONG","comment": "表单id","convert": false,"keyFlag": true,"keyIdentityFlag": true,"name": "table_id","propertyName": "tableId","propertyType": "Long","type": "bigint(20)"}...],"importPackages": ["com.baomidou.mybatisplus.annotation.IdType", "com.baomidou.mybatisplus.extension.activerecord.Model", "com.baomidou.mybatisplus.annotation.TableId", "java.io.Serializable"],"mapperName": "xxxMapper","name": "tableName","serviceImplName": "xxxServiceImpl","serviceName": "xxxService","xmlName": "xxxMapper"},"package": {"Entity": "com.cy.entity","Mapper": "com.cy.mapper","Xml": "com.cy.mapper","ServiceImpl": "com.cy.service.impl","Service": "com.cy.service","Controller": "com.cy.controller"},"author": "author","swagger2": false,"baseColumnList": false,"kotlin": false,"entityLombokModel": false,"superMapperClassPackage": "com.baomidou.mybatisplus.core.mapper.BaseMapper","restControllerStyle": false,"entityBuilderModel": true,"superServiceClassPackage": "com.baomidou.mybatisplus.extension.service.IService","entityBooleanColumnRemoveIsPrefix": false,"entityColumnConstant": false,"config": {"globalConfig": {"activeRecord": true,"author": "author","baseColumnList": false,"baseResultMap": true,"controllerName": "%sController","dateType": "TIME_PACK","enableCache": false,"fileOverride": false,"kotlin": false,"mapperName": "%sMapper","open": false,"outputDir": "","serviceImplName": "%sServiceImpl","serviceName": "%sService","swagger2": false,"xmlName": "%sMapper"},"packageInfo": {"$ref": "$.package"},"pathInfo": {"entity_path": "","controller_path": "","xml_path": "","service_path": "","mapper_path": "","service_impl_path": ""},"strategyConfig": {"capitalMode": false,"columnNaming": "underline_to_camel","controllerMappingHyphenStyle": false,"entityBooleanColumnRemoveIsPrefix": false,"entityBuilderModel": true,"entityColumnConstant": false,"entityLombokModel": false,"entityTableFieldAnnotationEnable": false,"include": ["air_stat_live_data"],"naming": "underline_to_camel","restControllerStyle": false,"skipView": false,"superMapperClass": "com.baomidou.mybatisplus.core.mapper.BaseMapper","superServiceClass": "com.baomidou.mybatisplus.extension.service.IService","superServiceImplClass": "com.baomidou.mybatisplus.extension.service.impl.ServiceImpl"},"superMapperClass": "com.baomidou.mybatisplus.core.mapper.BaseMapper","superServiceClass": "com.baomidou.mybatisplus.extension.service.IService","superServiceImplClass": "com.baomidou.mybatisplus.extension.service.impl.ServiceImpl","tableInfoList": [{"$ref": "$.table"}],"template": {"controller": "/templates/controller.java","mapper": "/templates/mapper.java","service": "/templates/service.java","serviceImpl": "/templates/serviceImpl.java","xml": "/templates/mapper.xml"}},"enableCache": false,"entity": "AirStatLiveData"
}
模板中的动态数据可以根据mybatis-plus提供的变量进行填充
controller模板
Controller.java.ftl
package ${package.Controller};import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import ${package.Entity}.${entity};
import ${package.Service}.${table.serviceName};
import com.rc.entity.web.PageParam;
import com.rc.entity.web.Result;
import io.swagger.annotations.Api;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;@RestController
@Api(tags="$(table.comment)")
@RequestMapping("/${entity?uncap_first}")
public class ${entity}Controller {@Autowiredprivate ${table.serviceName} ${entity?uncap_first}Service;/*** 根据id获取对象* @param id* @return*/@GetMapping("/{id}")public ${entity} getById(@PathVariable Long id) {return ${entity?uncap_first}Service.getById(id);}/*** 分页查询* @param pageParam* @return*/@PostMapping("/queryByPage")public Result queryUserByPage(PageParam pageParam){QueryWrapper<${entity}> ${entity?uncap_first}QueryWrapper = new QueryWrapper<>();Map<String, String> queryMap = pageParam.getQueryMap();if (StringUtils.isNotBlank(queryMap.get("id"))){${entity?uncap_first}QueryWrapper.like("id",queryMap.get("id"));}Page<${entity}> ${entity?uncap_first}Page = ${entity?uncap_first}Service.page(new Page<>(pageParam.getCurrentPage(), pageParam.getPageSize()), ${entity?uncap_first}QueryWrapper);return Result.SUCCESS(${entity?uncap_first}Page);}
}
mapper模板
mapper.xml.ftl
<?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="${package.Mapper}.${table.mapperName}"></mapper>
总结
通过继承mybaits-generotar可以快速根据表生成后端代码,简化开发,开发过程中只需要专注于开发业务逻辑的梳理。
项目地址:https://gitee.com/wangcheng626/generator-demo.git