springboot集成mybaits-generator自動生成代碼

文章目錄

  • 概述
  • 創建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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/77202.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/77202.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/77202.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

數據庫脫褲

假設你已經getshell 找到mysql賬號密碼。 網站要連接mysql&#xff0c;就需要把mysql的賬號密碼保存在一個php文件中&#xff0c;類似config.php、common.inc.php等&#xff0c;在shell中&#xff0c;讀取這些文件&#xff0c;找到其中信息即可 下面是一些常見平臺的配置文…

leetcode 337. House Robber III

用動態規劃的思想解決這道題。 對于每一個節點&#xff0c;只有兩種可能&#xff0c;偷或者不偷。 對于一顆以root為根節點的二叉樹&#xff0c;定義rob表示偷root節點能從這棵二叉樹偷到的最大金額。定義notrob表示不偷root節點能從這棵二叉樹偷到的最大金額。 遞推公式分析…

ES和MySQL概念對比

基本概念 ES和MySQL都屬于數據庫&#xff0c;不過各有各的特性&#xff0c;大致使用方法與MySQL類似并無區別。 MySQL&#xff1a;擅長事務持有ACID的特性&#xff0c;確保數據的一致性和安全。 ES&#xff1a;持有倒排索引&#xff0c;適合海量數據搜索和分析。 ES和MySQL如何…

【python】針對Selenium中彈框信息無法定位的問題,以下是綜合解決方案及注意事項:

一、常見原因分析 1.1 彈窗類型不匹配 若彈窗為alert&#xff0c;需使用driver.switch_to.alert處理&#xff1b; 若為confirm或prompt&#xff0c;同樣適用該方法。 1.2 窗口句柄切換問題 新窗口或彈窗可能開啟新句柄&#xff0c;需先通過driver.window_handles切換到對應句…

歐拉服務器操作系統安裝MySQL

1. 安裝MySQL服務器?? 1. 更新倉庫緩存 sudo dnf makecache2. 安裝MySQL sudo dnf install mysql-server2. 初始化數據庫? sudo mysqld --initialize --usermysql3. 啟動數據庫服務 # 啟動服務 sudo systemctl start mysqld# 設置開機自啟 sudo systemctl enable mysql…

SQLark:一款國產免費數據庫開發和管理工具

SQLark&#xff08;百靈連接&#xff09;是一款面向信創應用開發者的數據庫開發和管理工具&#xff0c;用于快速查詢、創建和管理不同類型的數據庫系統&#xff0c;目前可以支持達夢數據庫、Oracle 以及 MySQL。 對象管理 SQLark 支持豐富的數據庫對象管理功能&#xff0c;包括…

Spring Boot 中的自動配置原理

2025/4/6 向全棧工程師邁進&#xff01; 一、自動配置 所謂的自動配置原理就是遵循約定大約配置的原則&#xff0c;在boot工程程序啟動后&#xff0c;起步依賴中的一些bean對象會自動的注入到IOC容器中。 在講解Spring Boot 中bean對象的管理的時候&#xff0c;我們注入bean對…

Mysql8配置文件

Mysql8配置文件 修改my.cnf----配置持久化鍵(persistence key)配置表名不區分大小寫 修改my.cnf----配置持久化鍵(persistence key) MySQL8初始化數據庫之前配置好這些變量值&#xff0c;初始化數據庫之后可能無法修改這個值。 # 服務端配置 [mysqld] ######## 數據目錄和基…

關于系統架構思考,如何設計實現系統的高可用?

緒論、系統高可用的必要性 系統高可用為了保持業務連續性保障&#xff0c;以及停機成本量化&#xff0c;比如在以前的雙十一當天如果出現宕機&#xff0c;那將會損失多少錢&#xff1f;比如最近幾年Amazon 2021年30分鐘宕機損失$5.6M。當然也有成功的案例&#xff0c;比如異地…

【Unity筆記】實現可視化配置的Unity按鍵輸入管理器(按下/長按/松開事件 + UnityEvent綁定)

【Unity筆記】實現可視化配置的Unity按鍵輸入管理器 適用于角色控制、技能觸發的Unity按鍵輸入系統&#xff0c;支持UnityEvent事件綁定、長按/松開監聽與啟用開關 一、引言 在 Unity 游戲開發中&#xff0c;處理鍵盤輸入是最常見的交互方式之一。尤其是角色控制、技能釋放、菜…

Fortran 中使用 C_LOC 和 C_F_POINTER 結合的方法來實現不同類型指針指向同一塊內存區域

在 Fortran 中&#xff0c;可以使用 C_LOC 和 C_F_POINTER 結合的方法來實現不同類型指針指向同一塊內存區域。以下是具體方法和示例&#xff1a; 關鍵步驟&#xff1a; 獲取內存地址&#xff1a;用 C_LOC 獲取原始數組的 C 地址。類型轉換&#xff1a;用 C_F_POINTER 將地址轉…

Spring Boot整合Kafka的詳細步驟

1. 安裝Kafka 下載Kafka&#xff1a;從Kafka官網下載最新版本的Kafka。 解壓并啟動&#xff1a; 解壓Kafka文件后&#xff0c;進入bin目錄。 啟動ZooKeeper&#xff1a;./zookeeper-server-start.sh ../config/zookeeper.properties。 啟動Kafka&#xff1a;./kafka-server-…

【含文檔+PPT+源碼】基于微信小程序的學校體育館操場預約系統的設計與實現

課程簡介&#xff1a; 本課程演示的是一款基于微信小程序的學校體育館操場預約系統的設計與實現&#xff0c;主要針對計算機相關專業的正在做畢設的學生與需要項目實戰練習的 Java 學習者。 1.包含&#xff1a;項目源碼、項目文檔、數據庫腳本、軟件工具等所有資料 2.帶你從…

【Leetcode-Hot100】最大子數組和

題目 解答 class Solution(object):def maxSubArray(self, nums):""":type nums: List[int]:rtype: int"""len_nums len(nums)result -1e5left_fit, right_fit 0, len_nums-1if len_nums 1:return nums[0]sum_left, sum_right 0, 0while r…

txt、Csv、Excel、JSON、SQL文件讀取(Python)

txt、Csv、Excel、JSON、SQL文件讀取&#xff08;Python&#xff09; txt文件讀寫 創建一個txt文件 fopen(rtext.txt,r,encodingutf-8) sf.read() f.close() print(s)open( )是打開文件的方法 text.txt’文件名 在同一個文件夾下所以可以省略路徑 如果不在同一個文件夾下 ‘…

硬件電路設計之51單片機(2)

聲明&#xff1a;繪制原理圖和PCB的軟件為嘉立創EDA。根據B站尚硅谷嵌入式之原理圖&PCB設計教程學習所作個人用筆記。 目錄 一、原理圖詳解 1、TypeC接口 &#xff08;1&#xff09;TypeC接口介紹 &#xff08;2&#xff09;TypeC原理圖 2、5V轉3.3V 3、單片機電源開…

kubernetes 入門篇之架構介紹

經過前段時間的學習和實踐&#xff0c;對k8s的架構有了一個大致的理解。 1. k8s 分層架構 架構層級核心組件控制平面層etcd、API Server、Scheduler、Controller Manager工作節點層Kubelet、Kube-proxy、CRI&#xff08;容器運行時接口&#xff09;、CNI&#xff08;網絡插件&…

Flink CDC 出現錯誤碼 1236 和 SQL 狀態 HY000 的原因及解決方法

Flink CDC 出現錯誤碼 1236 和 SQL 狀態 HY000 的原因及解決方法 常見原因 server-id 沖突:當多個 Flink CDC 任務連接同一個 MySQL 實例,且使用了相同的 server-id 時,會導致該沖突。因為 MySQL 服務器通過 server-id 來區分不同的從服務器,如果多個 Flink CDC 任務使用相…

從PPT到PNG:Python實現的高效PPT轉圖工具

從PPT到PNG&#xff1a;Python實現的高效PPT轉圖工具 在日常工作中&#xff0c;PPT&#xff08;PowerPoint&#xff09;文件是我們常用的演示工具。然而&#xff0c;有時候我們需要將PPT的內容提取為圖片格式&#xff08;如PNG&#xff09;以便于展示或保存。手動將每一頁PPT保…

【開發語言】懸空指針問題

懸空指針&#xff08;Dangling Pointer&#xff09;是編程中常見的內存管理問題&#xff0c;尤其在C/C這類手動管理內存的語言中。以下是詳細解釋&#xff1a; 什么是懸空指針&#xff1f; 懸空指針是指向已經被釋放&#xff08;或失效&#xff09;內存的指針。這段內存可能已…