From 818a81009e7d1cb8185719ca185a71d286e65bcc Mon Sep 17 00:00:00 2001 From: W1y1r <2730956796@qq.com> Date: Fri, 4 Jul 2025 14:38:53 +0800 Subject: [PATCH 1/2] add mybatisPlus to table ecosystem --- .../public/img/MyBatisPlus-Generator.png | Bin 0 -> 93682 bytes src/.vuepress/sidebar/V2.0.x/en-Table.ts | 9 + src/.vuepress/sidebar/V2.0.x/zh-Table.ts | 9 + .../sidebar_timecho/V2.0.x/en-Table.ts | 9 + .../sidebar_timecho/V2.0.x/zh-Table.ts | 9 + .../MyBatisPlus-Generator.md | 318 ++++++++++++++++++ .../MyBatisPlus-Generator.md | 318 ++++++++++++++++++ .../MyBatisPlus-Generator.md | 318 ++++++++++++++++++ .../MyBatisPlus-Generator.md | 318 ++++++++++++++++++ 9 files changed, 1308 insertions(+) create mode 100644 src/.vuepress/public/img/MyBatisPlus-Generator.png create mode 100644 src/UserGuide/Master/Table/Ecosystem-Integration/MyBatisPlus-Generator.md create mode 100644 src/UserGuide/latest-Table/Ecosystem-Integration/MyBatisPlus-Generator.md create mode 100644 src/zh/UserGuide/Master/Table/Ecosystem-Integration/MyBatisPlus-Generator.md create mode 100644 src/zh/UserGuide/latest-Table/Ecosystem-Integration/MyBatisPlus-Generator.md diff --git a/src/.vuepress/public/img/MyBatisPlus-Generator.png b/src/.vuepress/public/img/MyBatisPlus-Generator.png new file mode 100644 index 0000000000000000000000000000000000000000..612b57050acedc5fad2d146c0302d7a84546e930 GIT binary patch literal 93682 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 + +# MyBatisPlus Generator + +## 1. Overview + +MyBatis-Plus Generator is a built-in code generation tool of the MyBatis-Plus framework. It automatically generates standardized entity classes, Mapper interfaces, Service layers, and Controller layer code based on the database table structure. It integrates MyBatis-Plus's general CRUD methods (such as `BaseMapper` built-in create, read, update, delete) and condition constructors (`QueryWrapper`), and supports extended annotations like Lombok and Swagger. Through simple configuration, it can quickly build persistent layer code that conforms to enterprise-level specifications, greatly reducing repetitive development work for single-table operations. It is suitable for quickly building background management systems or standardized data service modules. + +The following will introduce how to use Mybatis-Plus Generator to connect to IoTDB and generate entity classes, Mapper interfaces, Service layers, and Controller layer code files corresponding to database tables. + +## 2. Usage Steps + +### 2.1 Version Requirements + +- IoTDB: >=2.0.2-SNAPSHOT +- mybatisPlus: >=3.5.10 +- iotdb-jdbc:>=2.0.4-SNAPSHOT + +### 2.2 Operating Process + +#### 2.2.1 IoTDB Environment Setup + +1. Download, install, and start the IoTDB service. For details, refer to [QuickStart](../QuickStart/QuickStart.md) +2. Create the database database1 and tables table1 / table2. Relevant SQL statements can refer to [Sample-Data](../Reference/Sample-Data.md) + +#### 2.2.2 Create a Maven Project + +1. Create a Maven project +2. Add the following dependency configurations to the pom + +```XML + + 17 + 17 + UTF-8 + + + + + com.baomidou + mybatis-plus-spring-boot3-starter + 3.5.10 + + + com.baomidou + mybatis-plus-generator + 3.5.10 + + + com.github.jeffreyning + mybatisplus-plus + 1.7.5-RELEASE + + + org.apache.velocity + velocity-engine-core + 2.0 + + + org.apache.iotdb + iotdb-jdbc + 2.0.4-SNAPSHOT + + + org.springframework.boot + spring-boot-starter + 3.4.3 + + + org.slf4j + slf4j-api + + + commons-logging + commons-logging + + + + + org.springframework.boot + spring-boot-starter-web + 3.4.3 + + + org.slf4j + slf4j-api + + + commons-logging + commons-logging + + + + + io.springfox + springfox-swagger2 + 3.0.0 + + + io.springfox + springfox-swagger-ui + 3.0.0 + + + org.projectlombok + lombok + 1.18.36 + + + org.springframework.boot + spring-boot-starter-test + 3.4.3 + test + + + org.slf4j + slf4j-api + 2.0.13 + + + ch.qos.logback + logback-classic + 1.5.16 + + + ch.qos.logback + logback-core + 1.5.16 + + + + + + org.mybatis.generator + mybatis-generator-maven-plugin + 1.4.2 + + + org.apache.iotdb + mybatis-generator-plugin + 2.0.2-SNAPSHOT + + + + true + true + src/main/resources/generatorConfig.xml + + + + +``` +3. Create an execution file, modify the `url`/`username`/`password` of the target IoTDB, and the target file generation directory `outputDir`/`pathInfo` + +```Java +package org.apache.iotdb; + +import com.baomidou.mybatisplus.generator.FastAutoGenerator; +import com.baomidou.mybatisplus.generator.config.DataSourceConfig; +import com.baomidou.mybatisplus.generator.config.OutputFile; +import com.baomidou.mybatisplus.generator.config.rules.DateType; +import com.baomidou.mybatisplus.generator.config.rules.DbColumnType; +import org.apache.iotdb.jdbc.IoTDBDataSource; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +import java.sql.Types; +import java.util.Collections; + + +@SpringBootApplication +@MapperScan("org.apache.iotdb.mapper") +public class Main { + public static void main(String[] args) { + SpringApplication.run(Main.class, args); + IoTDBDataSource dataSource = new IoTDBDataSource(); + dataSource.setUrl("jdbc:iotdb://127.0.0.1:6667/database1?sql_dialect=table"); + dataSource.setUser("root"); + dataSource.setPassword("root"); + FastAutoGenerator generator = FastAutoGenerator.create(new DataSourceConfig.Builder(dataSource).driverClassName("org.apache.iotdb.jdbc.IoTDBDriver")); + generator + .globalConfig(builder -> { + builder.author("IoTDB") + .enableSwagger() + .dateType(DateType.ONLY_DATE) + .outputDir("src/main/java"); + }) + .packageConfig(builder -> { + builder.parent("org.apache.iotdb") + .mapper("mapper") + .pathInfo(Collections.singletonMap(OutputFile.xml, "src/main/java/org/apache/iotdb/xml")); + }) + .dataSourceConfig(builder -> { + builder.typeConvertHandler((globalConfig, typeRegistry, metaInfo) -> { + int typeCode = metaInfo.getJdbcType().TYPE_CODE; + switch (typeCode) { + case Types.FLOAT: + return DbColumnType.FLOAT; + default: + return typeRegistry.getColumnType(metaInfo); + } + }); + }) + .strategyConfig(builder -> { + builder.addInclude("table1"); + builder.entityBuilder() + .enableLombok() +// .addIgnoreColumns("create_time") + .enableFileOverride(); + builder.serviceBuilder() + .formatServiceFileName("%sService") + .formatServiceImplFileName("%sServiceImpl") + .convertServiceFileName((entityName -> entityName + "Service")) + .enableFileOverride(); + builder.controllerBuilder() + .enableRestStyle() + .enableFileOverride(); + }) + .strategyConfig(builder -> { + builder.addInclude("table2"); + builder.entityBuilder() + .enableLombok() +// .addIgnoreColumns("create_time") + .enableFileOverride(); + builder.serviceBuilder() + .formatServiceFileName("%sService") + .formatServiceImplFileName("%sServiceImpl") + .convertServiceFileName((entityName -> entityName + "Service")) + .enableFileOverride(); + builder.controllerBuilder() + .enableRestStyle() + .enableFileOverride(); + }) + .execute(); + } +} +``` + +#### 2.2.3 Generate Target Files + +1. Run Main.java +2. View the log output. The following indicates that the target files are generated + +```Java +16:10:08.943 [main] DEBUG com.baomidou.mybatisplus.generator.AutoGenerator -- ==========================File generation completed!!!========================== +``` + +#### 2.2.4 Generate Target Files + +```Plain +org/apache/iotdb/controller/Table1Controller.java +org/apache/iotdb/controller/Table2Controller.java +org/apache/iotdb/entity/Table1.java +org/apache/iotdb/mapper/Table2.xml +org/apache/iotdb/service/Table1Service.java +org/apache/iotdb/service/Table2Service.java +org/apache/iotdb/service/impl/Table1ServiceImpl.java +org/apache/iotdb/service/impl/Table2ServiceImpl.java +org/apache/iotdb/xml/Table1Mapper.xml +org/apache/iotdb/xml/Table2Mapper.xml +``` +![](/img/MyBatisPlus-Generator.png.png) + +#### 2.2.5 Modify Annotations + +Manually adjust the generated code `org/apache/iotdb/entity/Table1.java`, `org/apache/iotdb/entity/Table2.java` to support multi-primary key queries. + +```TypeScript +// Add new import +import com.github.jeffreyning.mybatisplus.anno.MppMultiId; + +// Add new annotation @MppMultiId +@MppMultiId +// Modify annotation @TableId() -->> @TableField() +@TableField("time") +private Date time; + +// Add new annotation @MppMultiId +@MppMultiId +// Modify annotation @TableId() -->> @TableField() +@TableField("region") +private String region; + +// Add new annotation @MppMultiId +@MppMultiId +// Modify annotation @TableId() -->> @TableField() +@TableField("plant_id") +private String plantId; + +// Add new annotation @MppMultiId +@MppMultiId +// Modify annotation @TableId() -->> @TableField() +@TableField("device_id") +private String deviceId; +``` + +## 3. Usage Example + +For a complete usage example, refer to the source code [examples/mybatisplus-generator](https://github.com/apache/iotdb-extras/tree/master/examples/mybatisplus-generator) + diff --git a/src/UserGuide/latest-Table/Ecosystem-Integration/MyBatisPlus-Generator.md b/src/UserGuide/latest-Table/Ecosystem-Integration/MyBatisPlus-Generator.md new file mode 100644 index 000000000..11eb273a7 --- /dev/null +++ b/src/UserGuide/latest-Table/Ecosystem-Integration/MyBatisPlus-Generator.md @@ -0,0 +1,318 @@ + + +# MyBatisPlus Generator + +## 1. Overview + +MyBatis-Plus Generator is a built-in code generation tool of the MyBatis-Plus framework. It automatically generates standardized entity classes, Mapper interfaces, Service layers, and Controller layer code based on the database table structure. It integrates MyBatis-Plus's general CRUD methods (such as `BaseMapper` built-in create, read, update, delete) and condition constructors (`QueryWrapper`), and supports extended annotations like Lombok and Swagger. Through simple configuration, it can quickly build persistent layer code that conforms to enterprise-level specifications, greatly reducing repetitive development work for single-table operations. It is suitable for quickly building background management systems or standardized data service modules. + +The following will introduce how to use Mybatis-Plus Generator to connect to IoTDB and generate entity classes, Mapper interfaces, Service layers, and Controller layer code files corresponding to database tables. + +## 2. Usage Steps + +### 2.1 Version Requirements + +- IoTDB: >=2.0.2-SNAPSHOT +- mybatisPlus: >=3.5.10 +- iotdb-jdbc:>=2.0.4-SNAPSHOT + +### 2.2 Operating Process + +#### 2.2.1 IoTDB Environment Setup + +1. Download, install, and start the IoTDB service. For details, refer to [QuickStart](../QuickStart/QuickStart.md) +2. Create the database database1 and tables table1 / table2. Relevant SQL statements can refer to [Sample-Data](../Reference/Sample-Data.md) + +#### 2.2.2 Create a Maven Project + +1. Create a Maven project +2. Add the following dependency configurations to the pom + +```XML + + 17 + 17 + UTF-8 + + + + + com.baomidou + mybatis-plus-spring-boot3-starter + 3.5.10 + + + com.baomidou + mybatis-plus-generator + 3.5.10 + + + com.github.jeffreyning + mybatisplus-plus + 1.7.5-RELEASE + + + org.apache.velocity + velocity-engine-core + 2.0 + + + org.apache.iotdb + iotdb-jdbc + 2.0.4-SNAPSHOT + + + org.springframework.boot + spring-boot-starter + 3.4.3 + + + org.slf4j + slf4j-api + + + commons-logging + commons-logging + + + + + org.springframework.boot + spring-boot-starter-web + 3.4.3 + + + org.slf4j + slf4j-api + + + commons-logging + commons-logging + + + + + io.springfox + springfox-swagger2 + 3.0.0 + + + io.springfox + springfox-swagger-ui + 3.0.0 + + + org.projectlombok + lombok + 1.18.36 + + + org.springframework.boot + spring-boot-starter-test + 3.4.3 + test + + + org.slf4j + slf4j-api + 2.0.13 + + + ch.qos.logback + logback-classic + 1.5.16 + + + ch.qos.logback + logback-core + 1.5.16 + + + + + + org.mybatis.generator + mybatis-generator-maven-plugin + 1.4.2 + + + org.apache.iotdb + mybatis-generator-plugin + 2.0.2-SNAPSHOT + + + + true + true + src/main/resources/generatorConfig.xml + + + + +``` +3. Create an execution file, modify the `url`/`username`/`password` of the target IoTDB, and the target file generation directory `outputDir`/`pathInfo` + +```Java +package org.apache.iotdb; + +import com.baomidou.mybatisplus.generator.FastAutoGenerator; +import com.baomidou.mybatisplus.generator.config.DataSourceConfig; +import com.baomidou.mybatisplus.generator.config.OutputFile; +import com.baomidou.mybatisplus.generator.config.rules.DateType; +import com.baomidou.mybatisplus.generator.config.rules.DbColumnType; +import org.apache.iotdb.jdbc.IoTDBDataSource; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +import java.sql.Types; +import java.util.Collections; + + +@SpringBootApplication +@MapperScan("org.apache.iotdb.mapper") +public class Main { + public static void main(String[] args) { + SpringApplication.run(Main.class, args); + IoTDBDataSource dataSource = new IoTDBDataSource(); + dataSource.setUrl("jdbc:iotdb://127.0.0.1:6667/database1?sql_dialect=table"); + dataSource.setUser("root"); + dataSource.setPassword("root"); + FastAutoGenerator generator = FastAutoGenerator.create(new DataSourceConfig.Builder(dataSource).driverClassName("org.apache.iotdb.jdbc.IoTDBDriver")); + generator + .globalConfig(builder -> { + builder.author("IoTDB") + .enableSwagger() + .dateType(DateType.ONLY_DATE) + .outputDir("src/main/java"); + }) + .packageConfig(builder -> { + builder.parent("org.apache.iotdb") + .mapper("mapper") + .pathInfo(Collections.singletonMap(OutputFile.xml, "src/main/java/org/apache/iotdb/xml")); + }) + .dataSourceConfig(builder -> { + builder.typeConvertHandler((globalConfig, typeRegistry, metaInfo) -> { + int typeCode = metaInfo.getJdbcType().TYPE_CODE; + switch (typeCode) { + case Types.FLOAT: + return DbColumnType.FLOAT; + default: + return typeRegistry.getColumnType(metaInfo); + } + }); + }) + .strategyConfig(builder -> { + builder.addInclude("table1"); + builder.entityBuilder() + .enableLombok() +// .addIgnoreColumns("create_time") + .enableFileOverride(); + builder.serviceBuilder() + .formatServiceFileName("%sService") + .formatServiceImplFileName("%sServiceImpl") + .convertServiceFileName((entityName -> entityName + "Service")) + .enableFileOverride(); + builder.controllerBuilder() + .enableRestStyle() + .enableFileOverride(); + }) + .strategyConfig(builder -> { + builder.addInclude("table2"); + builder.entityBuilder() + .enableLombok() +// .addIgnoreColumns("create_time") + .enableFileOverride(); + builder.serviceBuilder() + .formatServiceFileName("%sService") + .formatServiceImplFileName("%sServiceImpl") + .convertServiceFileName((entityName -> entityName + "Service")) + .enableFileOverride(); + builder.controllerBuilder() + .enableRestStyle() + .enableFileOverride(); + }) + .execute(); + } +} +``` + +#### 2.2.3 Generate Target Files + +1. Run Main.java +2. View the log output. The following indicates that the target files are generated + +```Java +16:10:08.943 [main] DEBUG com.baomidou.mybatisplus.generator.AutoGenerator -- ==========================File generation completed!!!========================== +``` + +#### 2.2.4 Generate Target Files + +```Plain +org/apache/iotdb/controller/Table1Controller.java +org/apache/iotdb/controller/Table2Controller.java +org/apache/iotdb/entity/Table1.java +org/apache/iotdb/mapper/Table2.xml +org/apache/iotdb/service/Table1Service.java +org/apache/iotdb/service/Table2Service.java +org/apache/iotdb/service/impl/Table1ServiceImpl.java +org/apache/iotdb/service/impl/Table2ServiceImpl.java +org/apache/iotdb/xml/Table1Mapper.xml +org/apache/iotdb/xml/Table2Mapper.xml +``` +![](/img/MyBatisPlus-Generator.png.png) + +#### 2.2.5 Modify Annotations + +Manually adjust the generated code `org/apache/iotdb/entity/Table1.java`, `org/apache/iotdb/entity/Table2.java` to support multi-primary key queries. + +```TypeScript +// Add new import +import com.github.jeffreyning.mybatisplus.anno.MppMultiId; + +// Add new annotation @MppMultiId +@MppMultiId +// Modify annotation @TableId() -->> @TableField() +@TableField("time") +private Date time; + +// Add new annotation @MppMultiId +@MppMultiId +// Modify annotation @TableId() -->> @TableField() +@TableField("region") +private String region; + +// Add new annotation @MppMultiId +@MppMultiId +// Modify annotation @TableId() -->> @TableField() +@TableField("plant_id") +private String plantId; + +// Add new annotation @MppMultiId +@MppMultiId +// Modify annotation @TableId() -->> @TableField() +@TableField("device_id") +private String deviceId; +``` + +## 3. Usage Example + +For a complete usage example, refer to the source code [examples/mybatisplus-generator](https://github.com/apache/iotdb-extras/tree/master/examples/mybatisplus-generator) + diff --git a/src/zh/UserGuide/Master/Table/Ecosystem-Integration/MyBatisPlus-Generator.md b/src/zh/UserGuide/Master/Table/Ecosystem-Integration/MyBatisPlus-Generator.md new file mode 100644 index 000000000..f70e52758 --- /dev/null +++ b/src/zh/UserGuide/Master/Table/Ecosystem-Integration/MyBatisPlus-Generator.md @@ -0,0 +1,318 @@ + + +# MyBatisPlus Generator + +## 1. 概述 + +MyBatis-Plus Generator 是 MyBatis-Plus 框架内置的代码生成工具,基于数据库表结构自动生成标准化的实体类、Mapper 接口、Service 层及 Controller 层代码,集成 MyBatis-Plus 的通用 CRUD 方法(如 `BaseMapper` 内置增删改查)和条件构造器(`QueryWrapper`),支持 Lombok、Swagger 等扩展注解,通过简单配置即可快速构建符合企业级规范的持久层代码,大幅减少单表操作的重复开发工作,适用于快速搭建后台管理系统或标准化数据服务模块。 + +下文将介绍如何使用 Mybatis-Plus Generator 连接 IoTDB ,并生成数据库表对应的实体类、Mapper 接口、Service 层及 Controller 层代码文件。 + +## 2. 使用步骤 + +### 2.1 版本要求 + +- IoTDB: >=2.0.2-SNAPSHOT +- mybatisPlus: >=3.5.10 +- iotdb-jdbc:>=2.0.4-SNAPSHOT + +### 2.2 操作流程 + +#### 2.2.1 IoTDB 环境搭建 + +1. 下载、安装并启动 IoTDB 服务,具体可参考[快速上手](../QuickStart/QuickStart.md) +2. 创建数据库 database1 及表 table1 / table2,相关 SQL 语句可参考[示例数据](../Reference/Sample-Data.md) + +#### 2.2.2 创建 Maven项目 + +1. 创建 Maven 项目 +2. 在 pom 中增加如下依赖配置 + +```XML + + 17 + 17 + UTF-8 + + + + + com.baomidou + mybatis-plus-spring-boot3-starter + 3.5.10 + + + com.baomidou + mybatis-plus-generator + 3.5.10 + + + com.github.jeffreyning + mybatisplus-plus + 1.7.5-RELEASE + + + org.apache.velocity + velocity-engine-core + 2.0 + + + org.apache.iotdb + iotdb-jdbc + 2.0.4-SNAPSHOT + + + org.springframework.boot + spring-boot-starter + 3.4.3 + + + org.slf4j + slf4j-api + + + commons-logging + commons-logging + + + + + org.springframework.boot + spring-boot-starter-web + 3.4.3 + + + org.slf4j + slf4j-api + + + commons-logging + commons-logging + + + + + io.springfox + springfox-swagger2 + 3.0.0 + + + io.springfox + springfox-swagger-ui + 3.0.0 + + + org.projectlombok + lombok + 1.18.36 + + + org.springframework.boot + spring-boot-starter-test + 3.4.3 + test + + + org.slf4j + slf4j-api + 2.0.13 + + + ch.qos.logback + logback-classic + 1.5.16 + + + ch.qos.logback + logback-core + 1.5.16 + + + + + + org.mybatis.generator + mybatis-generator-maven-plugin + 1.4.2 + + + org.apache.iotdb + mybatis-generator-plugin + 2.0.2-SNAPSHOT + + + + true + true + src/main/resources/generatorConfig.xml + + + + +``` +3. 新建执行文件,修改目标 IoTDB 的 `url`/ `username` / `password`,和目标文件生成目录 `outputDir`/`pathInfo` + +```Java +package org.apache.iotdb; + +import com.baomidou.mybatisplus.generator.FastAutoGenerator; +import com.baomidou.mybatisplus.generator.config.DataSourceConfig; +import com.baomidou.mybatisplus.generator.config.OutputFile; +import com.baomidou.mybatisplus.generator.config.rules.DateType; +import com.baomidou.mybatisplus.generator.config.rules.DbColumnType; +import org.apache.iotdb.jdbc.IoTDBDataSource; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +import java.sql.Types; +import java.util.Collections; + + +@SpringBootApplication +@MapperScan("org.apache.iotdb.mapper") +public class Main { + public static void main(String[] args) { + SpringApplication.run(Main.class, args); + IoTDBDataSource dataSource = new IoTDBDataSource(); + dataSource.setUrl("jdbc:iotdb://127.0.0.1:6667/database1?sql_dialect=table"); + dataSource.setUser("root"); + dataSource.setPassword("root"); + FastAutoGenerator generator = FastAutoGenerator.create(new DataSourceConfig.Builder(dataSource).driverClassName("org.apache.iotdb.jdbc.IoTDBDriver")); + generator + .globalConfig(builder -> { + builder.author("IoTDB") + .enableSwagger() + .dateType(DateType.ONLY_DATE) + .outputDir("src/main/java"); + }) + .packageConfig(builder -> { + builder.parent("org.apache.iotdb") + .mapper("mapper") + .pathInfo(Collections.singletonMap(OutputFile.xml, "src/main/java/org/apache/iotdb/xml")); + }) + .dataSourceConfig(builder -> { + builder.typeConvertHandler((globalConfig, typeRegistry, metaInfo) -> { + int typeCode = metaInfo.getJdbcType().TYPE_CODE; + switch (typeCode) { + case Types.FLOAT: + return DbColumnType.FLOAT; + default: + return typeRegistry.getColumnType(metaInfo); + } + }); + }) + .strategyConfig(builder -> { + builder.addInclude("table1"); + builder.entityBuilder() + .enableLombok() +// .addIgnoreColumns("create_time") + .enableFileOverride(); + builder.serviceBuilder() + .formatServiceFileName("%sService") + .formatServiceImplFileName("%sServiceImpl") + .convertServiceFileName((entityName -> entityName + "Service")) + .enableFileOverride(); + builder.controllerBuilder() + .enableRestStyle() + .enableFileOverride(); + }) + .strategyConfig(builder -> { + builder.addInclude("table2"); + builder.entityBuilder() + .enableLombok() +// .addIgnoreColumns("create_time") + .enableFileOverride(); + builder.serviceBuilder() + .formatServiceFileName("%sService") + .formatServiceImplFileName("%sServiceImpl") + .convertServiceFileName((entityName -> entityName + "Service")) + .enableFileOverride(); + builder.controllerBuilder() + .enableRestStyle() + .enableFileOverride(); + }) + .execute(); + } +} +``` + +#### 2.2.3 生成目标文件 + +1. 运行 Main.java +2. 查看日志输出,如下所示即生成目标文件 + +```Java +16:10:08.943 [main] DEBUG com.baomidou.mybatisplus.generator.AutoGenerator -- ==========================文件生成完成!!!========================== +``` + +#### 2.2.4 查看目标文件 + +```Plain +org/apache/iotdb/controller/Table1Controller.java +org/apache/iotdb/controller/Table2Controller.java +org/apache/iotdb/entity/Table1.java +org/apache/iotdb/mapper/Table2.xml +org/apache/iotdb/service/Table1Service.java +org/apache/iotdb/service/Table2Service.java +org/apache/iotdb/service/impl/Table1ServiceImpl.java +org/apache/iotdb/service/impl/Table2ServiceImpl.java +org/apache/iotdb/xml/Table1Mapper.xml +org/apache/iotdb/xml/Table2Mapper.xml +``` +![](/img/MyBatisPlus-Generator.png.png) + +#### 2.2.5 修改注释 + +手动调整生成的代码`org/apache/iotdb/entity/Table1.java`,`org/apache/iotdb/entity/Table2.java`使其支持多主键查询。 + +```TypeScript +// 新增 import +import com.github.jeffreyning.mybatisplus.anno.MppMultiId; + +// 新增注解 @MppMultiId +@MppMultiId +// 修改注解 @TableId() -->> @TableField() +@TableField("time") +private Date time; + +// 新增注解 @MppMultiId +@MppMultiId +// 修改注解 @TableId() -->> @TableField() +@TableField("region") +private String region; + +// 新增注解 @MppMultiId +@MppMultiId +// 修改注解 @TableId() -->> @TableField() +@TableField("plant_id") +private String plantId; + +// 新增注解 @MppMultiId +@MppMultiId +// 修改注解 @TableId() -->> @TableField() +@TableField("device_id") +private String deviceId; +``` + +## 3. 使用示例 + +完整的使用示例可参考源码 [examples/mybatisplus-generator](https://github.com/apache/iotdb-extras/tree/master/examples/mybatisplus-generator) + diff --git a/src/zh/UserGuide/latest-Table/Ecosystem-Integration/MyBatisPlus-Generator.md b/src/zh/UserGuide/latest-Table/Ecosystem-Integration/MyBatisPlus-Generator.md new file mode 100644 index 000000000..f70e52758 --- /dev/null +++ b/src/zh/UserGuide/latest-Table/Ecosystem-Integration/MyBatisPlus-Generator.md @@ -0,0 +1,318 @@ + + +# MyBatisPlus Generator + +## 1. 概述 + +MyBatis-Plus Generator 是 MyBatis-Plus 框架内置的代码生成工具,基于数据库表结构自动生成标准化的实体类、Mapper 接口、Service 层及 Controller 层代码,集成 MyBatis-Plus 的通用 CRUD 方法(如 `BaseMapper` 内置增删改查)和条件构造器(`QueryWrapper`),支持 Lombok、Swagger 等扩展注解,通过简单配置即可快速构建符合企业级规范的持久层代码,大幅减少单表操作的重复开发工作,适用于快速搭建后台管理系统或标准化数据服务模块。 + +下文将介绍如何使用 Mybatis-Plus Generator 连接 IoTDB ,并生成数据库表对应的实体类、Mapper 接口、Service 层及 Controller 层代码文件。 + +## 2. 使用步骤 + +### 2.1 版本要求 + +- IoTDB: >=2.0.2-SNAPSHOT +- mybatisPlus: >=3.5.10 +- iotdb-jdbc:>=2.0.4-SNAPSHOT + +### 2.2 操作流程 + +#### 2.2.1 IoTDB 环境搭建 + +1. 下载、安装并启动 IoTDB 服务,具体可参考[快速上手](../QuickStart/QuickStart.md) +2. 创建数据库 database1 及表 table1 / table2,相关 SQL 语句可参考[示例数据](../Reference/Sample-Data.md) + +#### 2.2.2 创建 Maven项目 + +1. 创建 Maven 项目 +2. 在 pom 中增加如下依赖配置 + +```XML + + 17 + 17 + UTF-8 + + + + + com.baomidou + mybatis-plus-spring-boot3-starter + 3.5.10 + + + com.baomidou + mybatis-plus-generator + 3.5.10 + + + com.github.jeffreyning + mybatisplus-plus + 1.7.5-RELEASE + + + org.apache.velocity + velocity-engine-core + 2.0 + + + org.apache.iotdb + iotdb-jdbc + 2.0.4-SNAPSHOT + + + org.springframework.boot + spring-boot-starter + 3.4.3 + + + org.slf4j + slf4j-api + + + commons-logging + commons-logging + + + + + org.springframework.boot + spring-boot-starter-web + 3.4.3 + + + org.slf4j + slf4j-api + + + commons-logging + commons-logging + + + + + io.springfox + springfox-swagger2 + 3.0.0 + + + io.springfox + springfox-swagger-ui + 3.0.0 + + + org.projectlombok + lombok + 1.18.36 + + + org.springframework.boot + spring-boot-starter-test + 3.4.3 + test + + + org.slf4j + slf4j-api + 2.0.13 + + + ch.qos.logback + logback-classic + 1.5.16 + + + ch.qos.logback + logback-core + 1.5.16 + + + + + + org.mybatis.generator + mybatis-generator-maven-plugin + 1.4.2 + + + org.apache.iotdb + mybatis-generator-plugin + 2.0.2-SNAPSHOT + + + + true + true + src/main/resources/generatorConfig.xml + + + + +``` +3. 新建执行文件,修改目标 IoTDB 的 `url`/ `username` / `password`,和目标文件生成目录 `outputDir`/`pathInfo` + +```Java +package org.apache.iotdb; + +import com.baomidou.mybatisplus.generator.FastAutoGenerator; +import com.baomidou.mybatisplus.generator.config.DataSourceConfig; +import com.baomidou.mybatisplus.generator.config.OutputFile; +import com.baomidou.mybatisplus.generator.config.rules.DateType; +import com.baomidou.mybatisplus.generator.config.rules.DbColumnType; +import org.apache.iotdb.jdbc.IoTDBDataSource; +import org.mybatis.spring.annotation.MapperScan; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +import java.sql.Types; +import java.util.Collections; + + +@SpringBootApplication +@MapperScan("org.apache.iotdb.mapper") +public class Main { + public static void main(String[] args) { + SpringApplication.run(Main.class, args); + IoTDBDataSource dataSource = new IoTDBDataSource(); + dataSource.setUrl("jdbc:iotdb://127.0.0.1:6667/database1?sql_dialect=table"); + dataSource.setUser("root"); + dataSource.setPassword("root"); + FastAutoGenerator generator = FastAutoGenerator.create(new DataSourceConfig.Builder(dataSource).driverClassName("org.apache.iotdb.jdbc.IoTDBDriver")); + generator + .globalConfig(builder -> { + builder.author("IoTDB") + .enableSwagger() + .dateType(DateType.ONLY_DATE) + .outputDir("src/main/java"); + }) + .packageConfig(builder -> { + builder.parent("org.apache.iotdb") + .mapper("mapper") + .pathInfo(Collections.singletonMap(OutputFile.xml, "src/main/java/org/apache/iotdb/xml")); + }) + .dataSourceConfig(builder -> { + builder.typeConvertHandler((globalConfig, typeRegistry, metaInfo) -> { + int typeCode = metaInfo.getJdbcType().TYPE_CODE; + switch (typeCode) { + case Types.FLOAT: + return DbColumnType.FLOAT; + default: + return typeRegistry.getColumnType(metaInfo); + } + }); + }) + .strategyConfig(builder -> { + builder.addInclude("table1"); + builder.entityBuilder() + .enableLombok() +// .addIgnoreColumns("create_time") + .enableFileOverride(); + builder.serviceBuilder() + .formatServiceFileName("%sService") + .formatServiceImplFileName("%sServiceImpl") + .convertServiceFileName((entityName -> entityName + "Service")) + .enableFileOverride(); + builder.controllerBuilder() + .enableRestStyle() + .enableFileOverride(); + }) + .strategyConfig(builder -> { + builder.addInclude("table2"); + builder.entityBuilder() + .enableLombok() +// .addIgnoreColumns("create_time") + .enableFileOverride(); + builder.serviceBuilder() + .formatServiceFileName("%sService") + .formatServiceImplFileName("%sServiceImpl") + .convertServiceFileName((entityName -> entityName + "Service")) + .enableFileOverride(); + builder.controllerBuilder() + .enableRestStyle() + .enableFileOverride(); + }) + .execute(); + } +} +``` + +#### 2.2.3 生成目标文件 + +1. 运行 Main.java +2. 查看日志输出,如下所示即生成目标文件 + +```Java +16:10:08.943 [main] DEBUG com.baomidou.mybatisplus.generator.AutoGenerator -- ==========================文件生成完成!!!========================== +``` + +#### 2.2.4 查看目标文件 + +```Plain +org/apache/iotdb/controller/Table1Controller.java +org/apache/iotdb/controller/Table2Controller.java +org/apache/iotdb/entity/Table1.java +org/apache/iotdb/mapper/Table2.xml +org/apache/iotdb/service/Table1Service.java +org/apache/iotdb/service/Table2Service.java +org/apache/iotdb/service/impl/Table1ServiceImpl.java +org/apache/iotdb/service/impl/Table2ServiceImpl.java +org/apache/iotdb/xml/Table1Mapper.xml +org/apache/iotdb/xml/Table2Mapper.xml +``` +![](/img/MyBatisPlus-Generator.png.png) + +#### 2.2.5 修改注释 + +手动调整生成的代码`org/apache/iotdb/entity/Table1.java`,`org/apache/iotdb/entity/Table2.java`使其支持多主键查询。 + +```TypeScript +// 新增 import +import com.github.jeffreyning.mybatisplus.anno.MppMultiId; + +// 新增注解 @MppMultiId +@MppMultiId +// 修改注解 @TableId() -->> @TableField() +@TableField("time") +private Date time; + +// 新增注解 @MppMultiId +@MppMultiId +// 修改注解 @TableId() -->> @TableField() +@TableField("region") +private String region; + +// 新增注解 @MppMultiId +@MppMultiId +// 修改注解 @TableId() -->> @TableField() +@TableField("plant_id") +private String plantId; + +// 新增注解 @MppMultiId +@MppMultiId +// 修改注解 @TableId() -->> @TableField() +@TableField("device_id") +private String deviceId; +``` + +## 3. 使用示例 + +完整的使用示例可参考源码 [examples/mybatisplus-generator](https://github.com/apache/iotdb-extras/tree/master/examples/mybatisplus-generator) + From 7945b3c6d0f0ae70c163a9da6acef49da33d2516 Mon Sep 17 00:00:00 2001 From: W1y1r <2730956796@qq.com> Date: Fri, 4 Jul 2025 14:43:42 +0800 Subject: [PATCH 2/2] add mybatisPlus to table ecosystem --- .../Master/Table/Ecosystem-Integration/MyBatisPlus-Generator.md | 2 +- .../latest-Table/Ecosystem-Integration/MyBatisPlus-Generator.md | 2 +- .../Master/Table/Ecosystem-Integration/MyBatisPlus-Generator.md | 2 +- .../latest-Table/Ecosystem-Integration/MyBatisPlus-Generator.md | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/UserGuide/Master/Table/Ecosystem-Integration/MyBatisPlus-Generator.md b/src/UserGuide/Master/Table/Ecosystem-Integration/MyBatisPlus-Generator.md index 11eb273a7..58968106d 100644 --- a/src/UserGuide/Master/Table/Ecosystem-Integration/MyBatisPlus-Generator.md +++ b/src/UserGuide/Master/Table/Ecosystem-Integration/MyBatisPlus-Generator.md @@ -277,7 +277,7 @@ org/apache/iotdb/service/impl/Table2ServiceImpl.java org/apache/iotdb/xml/Table1Mapper.xml org/apache/iotdb/xml/Table2Mapper.xml ``` -![](/img/MyBatisPlus-Generator.png.png) +![](/img/MyBatisPlus-Generator.png) #### 2.2.5 Modify Annotations diff --git a/src/UserGuide/latest-Table/Ecosystem-Integration/MyBatisPlus-Generator.md b/src/UserGuide/latest-Table/Ecosystem-Integration/MyBatisPlus-Generator.md index 11eb273a7..58968106d 100644 --- a/src/UserGuide/latest-Table/Ecosystem-Integration/MyBatisPlus-Generator.md +++ b/src/UserGuide/latest-Table/Ecosystem-Integration/MyBatisPlus-Generator.md @@ -277,7 +277,7 @@ org/apache/iotdb/service/impl/Table2ServiceImpl.java org/apache/iotdb/xml/Table1Mapper.xml org/apache/iotdb/xml/Table2Mapper.xml ``` -![](/img/MyBatisPlus-Generator.png.png) +![](/img/MyBatisPlus-Generator.png) #### 2.2.5 Modify Annotations diff --git a/src/zh/UserGuide/Master/Table/Ecosystem-Integration/MyBatisPlus-Generator.md b/src/zh/UserGuide/Master/Table/Ecosystem-Integration/MyBatisPlus-Generator.md index f70e52758..a80ea4306 100644 --- a/src/zh/UserGuide/Master/Table/Ecosystem-Integration/MyBatisPlus-Generator.md +++ b/src/zh/UserGuide/Master/Table/Ecosystem-Integration/MyBatisPlus-Generator.md @@ -277,7 +277,7 @@ org/apache/iotdb/service/impl/Table2ServiceImpl.java org/apache/iotdb/xml/Table1Mapper.xml org/apache/iotdb/xml/Table2Mapper.xml ``` -![](/img/MyBatisPlus-Generator.png.png) +![](/img/MyBatisPlus-Generator.png) #### 2.2.5 修改注释 diff --git a/src/zh/UserGuide/latest-Table/Ecosystem-Integration/MyBatisPlus-Generator.md b/src/zh/UserGuide/latest-Table/Ecosystem-Integration/MyBatisPlus-Generator.md index f70e52758..a80ea4306 100644 --- a/src/zh/UserGuide/latest-Table/Ecosystem-Integration/MyBatisPlus-Generator.md +++ b/src/zh/UserGuide/latest-Table/Ecosystem-Integration/MyBatisPlus-Generator.md @@ -277,7 +277,7 @@ org/apache/iotdb/service/impl/Table2ServiceImpl.java org/apache/iotdb/xml/Table1Mapper.xml org/apache/iotdb/xml/Table2Mapper.xml ``` -![](/img/MyBatisPlus-Generator.png.png) +![](/img/MyBatisPlus-Generator.png) #### 2.2.5 修改注释