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提供的變量進行填充
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è)計模式編寫代碼有利于團隊協(xié)作時程序的維護,需要的朋友可以參考下2016-01-01解決@Scheduled定時器使用@Thransactional事物問題
這篇文章主要介紹了解決@Scheduled定時器使用@Thransactional事物問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-08-08springboot整合mybatis-plus基于注解實現(xiàn)一對一(一對多)查詢功能
這篇文章主要介紹了springboot整合mybatis-plus基于純注解實現(xiàn)一對一(一對多)查詢功能,因為本人采用的是spring-boot進行開發(fā),本身springboot就提倡采用不用配置自動配置的方式,所以真心希望mybatis(不是mybatis-plus)這點需要繼續(xù)努力2021-09-09java批量導(dǎo)入Excel數(shù)據(jù)超詳細實例
這篇文章主要給大家介紹了關(guān)于java批量導(dǎo)入Excel數(shù)據(jù)的相關(guān)資料,EXCEL導(dǎo)入就是文件導(dǎo)入,操作代碼是一樣的,文中給出了詳細的代碼示例,需要的朋友可以參考下2023-08-08