在物聯網後台與服務模塊的開發過程中,複雜編碼與重複操作始終是開發團隊難以繞開的挑戰,不僅增加額外工作量,也抬高了系統的長期維護成本。
為有效緩解這一痛點,國產原生時序數據庫 IoTDB 實現了與代碼生成工具 MyBatisPlus 的深度集成,使開發者能夠藉助其強大的通用數據操作能力,以更簡潔、更符合工程習慣的方式,高效管理時序數據。
-
開箱即用,告別繁瑣:藉助 MyBatisPlus 的通用 Mapper,無需編寫基礎 CRUD 代碼,即可快速完成企業級增刪改查操作。
-
高度兼容,無縫融入:集成設計充分尊重原有開發習慣,現有 MyBatisPlus 項目可平滑引入 IoTDB,時序數據與業務數據可用同一套架構統一處理。
-
條件構造,靈活查詢:支持通過 Lambda 表達式構建複雜查詢條件,讓時序數據的篩選與統計像操作傳統數據庫一樣直觀方便。
歡迎查看用户手冊瞭解更多內容!
01 功能簡介
MyBatis-Plus Generator 是 MyBatis-Plus 框架內置的代碼生成工具,基於數據庫表結構自動生成標準化的實體類、Mapper 接口、Service 層及 Controller 層代碼,集成 MyBatis-Plus 的通用 CRUD 方法(如 BaseMapper 內置增刪改查)和條件構造器(QueryWrapper),支持 Lombok、Swagger 等擴展註解,通過簡單配置即可快速構建符合企業級規範的持久層代碼,大幅減少單表操作的重複開發工作,適用於快速搭建後台管理系統或標準化數據服務模塊。
下文將介紹如何使用 Mybatis-Plus Generator 連接 IoTDB,並生成數據庫表對應的實體類、Mapper 接口、Service 層及 Controller 層代碼文件。
02 使用步驟
(1) 版本要求
-
IoTDB:>= 2.0.2-SNAPSHOT
-
mybatisPlus:>= 3.5.10
-
iotdb-jdbc:>= 2.0.4-SNAPSHOT
(2) 操作流程
IoTDB 環境搭建
-
下載、安裝並啓動 IoTDB 服務,具體可參考官網快速上手頁面:https://www.timecho.com/docs/zh/UserGuide/latest-Table/QuickStart/QuickStart_timecho.html
-
創建數據庫 database1 及表 table1 / table2,相關 SQL 語句可參考官網示例數據:https://www.timecho.com/docs/zh/UserGuide/latest-Table/Reference/Sample-Data.html
創建 Maven 項目
-
創建 Maven 項目。
-
在 pom 中增加如下依賴配置:
<properties>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-spring-boot3-starter</artifactId>
<version>3.5.10</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.5.10</version>
</dependency>
<dependency>
<groupId>com.github.jeffreyning</groupId>
<artifactId>mybatisplus-plus</artifactId>
<version>1.7.5-RELEASE</version>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.0</version>
</dependency>
<dependency>
<groupId>org.apache.iotdb</groupId>
<artifactId>iotdb-jdbc</artifactId>
<version>2.0.4-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<version>3.4.3</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>3.4.3</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</exclusion>
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>3.0.0</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.36</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<version>3.4.3</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>2.0.13</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.5.16</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.5.16</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.4.2</version>
<dependencies>
<dependency>
<groupId>org.apache.iotdb</groupId>
<artifactId>mybatis-generator-plugin</artifactId>
<version>2.0.2-SNAPSHOT</version>
</dependency>
</dependencies>
<configuration>
<verbose>true</verbose>
<overwrite>true</overwrite>
<configurationFile>src/main/resources/generatorConfig.xml</configurationFile>
</configuration>
</plugin>
</plugins>
</build>
- 新建執行文件,修改目標 IoTDB 的 url/ username/password,和目標文件生成目錄 outputDir/pathInfo:
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();
}
}
生成目標文件
-
運行 Main.java。
-
查看日誌輸出,如下所示即生成目標文件:
16:10:08.943 [main] DEBUG com.baomidou.mybatisplus.generator.AutoGenerator -- ==========================文件生成完成!!!==========================
查看目標文件
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

修改註釋
手動調整生成的代碼 org/apache/iotdb/entity/Table1.java,org/apache/iotdb/entity/Table2.java 使其支持多主鍵查詢。
// 新增 import
import com.github.jeffreyning.mybatisplus.anno.MppMultiId;
// 新增註解 @MppMultiId
@MppMultiId
// 修改註解 @TableId() -->> @TableField()
@TableField("time")
privateDate time;
// 新增註解 @MppMultiId
@MppMultiId
// 修改註解 @TableId() -->> @TableField()
@TableField("region")
privateString region;
// 新增註解 @MppMultiId
@MppMultiId
// 修改註解 @TableId() -->> @TableField()
@TableField("plant_id")
privateString plantId;
// 新增註解 @MppMultiId
@MppMultiId
// 修改註解 @TableId() -->> @TableField()
@TableField("device_id")
privateString deviceId;
03 使用示例
完整的使用示例可參考 GitHub 源碼:https://github.com/apache/iotdb-extras/tree/master/examples/mybatisplus-generator