首頁
>
資源
>
產(chǎn)品發(fā)布

時序數(shù)據(jù)庫 IoTDB 集成 MyBatisPlus,告別復雜編碼,簡化時序數(shù)據(jù) ORM 開發(fā)

在物聯(lián)網(wǎng)后臺與服務模塊的開發(fā)過程中,復雜編碼與重復操作始終是開發(fā)團隊難以繞開的挑戰(zhàn),不僅增加額外工作量,也抬高了系統(tǒng)的長期維護成本。

為有效緩解這一痛點,國產(chǎn)原生時序數(shù)據(jù)庫 IoTDB 實現(xiàn)了與代碼生成工具 MyBatisPlus 的深度集成,使開發(fā)者能夠借助其強大的通用數(shù)據(jù)操作能力,以更簡潔、更符合工程習慣的方式,高效管理時序數(shù)據(jù)。

  • 開箱即用,告別繁瑣:借助 MyBatisPlus 的通用 Mapper,無需編寫基礎 CRUD 代碼,即可快速完成企業(yè)級增刪改查操作。

  • 高度兼容,無縫融入:集成設計充分尊重原有開發(fā)習慣,現(xiàn)有 MyBatisPlus 項目可平滑引入 IoTDB,時序數(shù)據(jù)與業(yè)務數(shù)據(jù)可用同一套架構統(tǒng)一處理。

  • 條件構造,靈活查詢:支持通過 Lambda 表達式構建復雜查詢條件,讓時序數(shù)據(jù)的篩選與統(tǒng)計像操作傳統(tǒng)數(shù)據(jù)庫一樣直觀方便。

歡迎查看用戶手冊了解更多內容!

01 功能簡介

MyBatis-Plus Generator 是 MyBatis-Plus 框架內置的代碼生成工具,基于數(shù)據(jù)庫表結構自動生成標準化的實體類、Mapper 接口、Service 層及 Controller 層代碼,集成 MyBatis-Plus 的通用 CRUD 方法(如 BaseMapper 內置增刪改查)和條件構造器(QueryWrapper),支持 Lombok、Swagger 等擴展注解,通過簡單配置即可快速構建符合企業(yè)級規(guī)范的持久層代碼,大幅減少單表操作的重復開發(fā)工作,適用于快速搭建后臺管理系統(tǒng)或標準化數(shù)據(jù)服務模塊。

下文將介紹如何使用 Mybatis-Plus Generator 連接 IoTDB,并生成數(shù)據(jù)庫表對應的實體類、Mapper 接口、Service 層及 Controller 層代碼文件。

02 使用步驟

(1) 版本要求

  • IoTDB:>= 2.0.2-SNAPSHOT

  • mybatisPlus:>= 3.5.10

  • iotdb-jdbc:>= 2.0.4-SNAPSHOT

(2) 操作流程

IoTDB 環(huán)境搭建

1. 下載、安裝并啟動 IoTDB 服務,具體可參考官網(wǎng)快速上手頁面:http://www.israel-stamps.com/docs/zh/UserGuide/latest-Table/QuickStart/QuickStart_timecho.html

2. 創(chuàng)建數(shù)據(jù)庫 database1 及表 table1 / table2,相關 SQL 語句可參考官網(wǎng)示例數(shù)據(jù):http://www.israel-stamps.com/docs/zh/UserGuide/latest-Table/Reference/Sample-Data.html

創(chuàng)建 Maven 項目

1. 創(chuàng)建 Maven 項目。

2. 在 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>

3. 新建執(zhí)行文件,修改目標 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();
    }
}

生成目標文件

1. 運行 Main.java

2. 查看日志輸出,如下所示即生成目標文件:

16:10:08.943 [main] DEBUG com.baomidou.mybatisplus.generator.AutoGenerator -- ==========================文件生成完成!!!==========================

查看目標文件

org/apache/iotdb/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

MyBatisPlus 集成文章圖1-20251110.png

修改注釋

手動調整生成的代碼 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")
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;

03 使用示例

完整的使用示例可參考 GitHub 源碼:https://github.com/apache/iotdb-extras/tree/master/examples/mybatisplus-generator

更多內容推薦:

下載時序數(shù)據(jù)庫 IoTDB 開源版

了解如何使用 MyBatisPlus-IoTDB 集成