springboot集成mybaits-generator自動生成代碼的流程分析
概述
創(chuàng)建springboot項目,在這里使用的是springboot 2.6.13版本,引入的項目依賴包如pom文件所寫,jdk使用1.8,集成swagger。
創(chuàng)建springboot項目
使用start.aliyun.com創(chuàng)建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連接驅(qū)動-->
<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數(shù)據(jù)源-->
<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: 8096
servlet:
context-path: /
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/you_table?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT
username: root
password: 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);
//數(shù)據(jù)源配置
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() {
@Override
public void initMap() {
}
};
//模板引擎是freemarker
String templatePath = "/template/mapper.xml.ftl";
//模版引擎是velocity
//String templatePath = "/template/mapper.xml.vm";
List<FileOutConfig> focList = new ArrayList<>();
//需要生成*mapper.xml時需要配置
focList.add(new FileOutConfig(templatePath) {
@Override
public 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"
}模板中的動態(tài)數(shù)據(jù)可以根據(jù)mybatis-plus提供的變量進(jìn)行填充
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 {
@Autowired
private ${table.serviceName} ${entity?uncap_first}Service;
/**
* 根據(jù)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>總結(jié)
通過繼承mybaits-generotar可以快速根據(jù)表生成后端代碼,簡化開發(fā),開發(fā)過程中只需要專注于開發(fā)業(yè)務(wù)邏輯的梳理。
項目地址:https://gitee.com/wangcheng626/generator-demo.git
到此這篇關(guān)于springboot集成mybaits-generator自動生成代碼的文章就介紹到這了,更多相關(guān)springboot集成mybaits-generator內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
淺析Java設(shè)計模式編程中的單例模式和簡單工廠模式
這篇文章主要介紹了淺析Java設(shè)計模式編程中的單例模式和簡單工廠模式,使用設(shè)計模式編寫代碼有利于團(tuán)隊協(xié)作時程序的維護(hù),需要的朋友可以參考下2016-01-01
解決@Scheduled定時器使用@Thransactional事物問題
這篇文章主要介紹了解決@Scheduled定時器使用@Thransactional事物問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-08-08
springboot整合mybatis-plus基于注解實現(xiàn)一對一(一對多)查詢功能
這篇文章主要介紹了springboot整合mybatis-plus基于純注解實現(xiàn)一對一(一對多)查詢功能,因為本人采用的是spring-boot進(jìn)行開發(fā),本身springboot就提倡采用不用配置自動配置的方式,所以真心希望mybatis(不是mybatis-plus)這點需要繼續(xù)努力2021-09-09
java批量導(dǎo)入Excel數(shù)據(jù)超詳細(xì)實例
這篇文章主要給大家介紹了關(guān)于java批量導(dǎo)入Excel數(shù)據(jù)的相關(guān)資料,EXCEL導(dǎo)入就是文件導(dǎo)入,操作代碼是一樣的,文中給出了詳細(xì)的代碼示例,需要的朋友可以參考下2023-08-08

