This is an automated email from the ASF dual-hosted git repository.
critas pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iotdb-extras.git
The following commit(s) were added to refs/heads/master by this push:
new 065ec4d Add mybatis-generator-plugin module (#46)
065ec4d is described below
commit 065ec4dec83403e4191dde35f021cb95717c6eee
Author: Summer <[email protected]>
AuthorDate: Mon Mar 17 17:07:02 2025 +0800
Add mybatis-generator-plugin module (#46)
* Add mybatis-generator-plugin module
* add module in pom
* spotless
* add example
* update version
* iotdb-spring-boot-starter
* rat
* rat +1
* rat +1
* remove chinese comment
* update README.md
* update example table name
* alignment IoTDB
* add package in distribution/
---------
Co-authored-by: 2b3c511 <[email protected]>
---
.gitignore | 5 +-
connectors/grafana-plugin/README.md | 2 +-
distributions/pom.xml | 2 +
.../src/assembly/iotdb-spring-boot-starter.xml | 41 +++++
.../src/assembly/mybatis-generator-plugin.xml | 41 +++++
examples/iotdb-spring-boot-start/pom.xml | 63 ++++++++
examples/iotdb-spring-boot-start/readme.md | 116 ++++++++++++++
.../IoTDBSpringBootStartApplication.java | 30 ++++
.../service/IoTDBService.java | 69 ++++++++
.../src/main/resources/application.properties | 26 +++
.../SpringBootIoTDBApplicationTests.java | 39 +++++
examples/mybatis-generator/pom.xml | 58 +++++++
examples/mybatis-generator/readme.md | 102 ++++++++++++
.../src/main/resources/generatorConfig.xml | 58 +++++++
examples/mybatisplus-generator/pom.xml | 86 ++++++++++
examples/mybatisplus-generator/readme.md | 128 +++++++++++++++
.../src/main/java/org/apache/iotdb/Main.java | 80 ++++++++++
examples/spark-table/README.md | 2 +-
iotdb-spring-boot-starter/README.md | 63 ++++++++
iotdb-spring-boot-starter/pom.xml | 62 ++++++++
.../iotdb/config/IoTDBSessionProperties.java | 174 +++++++++++++++++++++
.../org/apache/iotdb/session/IoTDBSessionPool.java | 95 +++++++++++
...rk.boot.autoconfigure.AutoConfiguration.imports | 19 +++
mybatis-generator/.gitignore | 7 +
mybatis-generator/README-zh.md | 55 +++++++
mybatis-generator/README.md | 55 +++++++
mybatis-generator/pom.xml | 27 ++++
.../iotdb/mybatis/plugin/BatchInsertPlugin.java | 133 ++++++++++++++++
.../apache/iotdb/mybatis/plugin/LombokPlugin.java | 64 ++++++++
.../iotdb/mybatis/plugin/SerializablePlugin.java | 141 +++++++++++++++++
.../plugin/generator/CNCommentGenerator.java | 129 +++++++++++++++
.../plugin/generator/SwaggerCommentGenerator.java | 150 ++++++++++++++++++
.../generator/resolver/IoTDBJavaTypeResolver.java | 98 ++++++++++++
.../resolver/JavaTypeResolverSelfImpl.java | 57 +++++++
.../apache/iotdb/mybatis/plugin/util/DateUtil.java | 29 ++++
.../src/main/resources/generatorConfig.xml | 58 +++++++
pom.xml | 1 +
37 files changed, 2362 insertions(+), 3 deletions(-)
diff --git a/.gitignore b/.gitignore
index dced3d9..e42f183 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,4 +7,7 @@ target/
*.iml
# log
-logs/
\ No newline at end of file
+logs/
+
+.DS_Store
+~/
\ No newline at end of file
diff --git a/connectors/grafana-plugin/README.md
b/connectors/grafana-plugin/README.md
index 4c52aa1..ce4f07b 100644
--- a/connectors/grafana-plugin/README.md
+++ b/connectors/grafana-plugin/README.md
@@ -26,7 +26,7 @@ Grafana is an open source volume metrics monitoring and
visualization tool, whic
We developed the Grafana-Plugin for IoTDB, using the IoTDB REST service to
present time series data and providing many visualization methods for time
series data.
-Iotdb grafana plugin supports grafana version 9.3.0 and above
+IoTDB grafana plugin supports grafana version 9.3.0 and above
### How to use Grafana-Plugin
diff --git a/distributions/pom.xml b/distributions/pom.xml
index a4f59d2..92e5be4 100644
--- a/distributions/pom.xml
+++ b/distributions/pom.xml
@@ -81,6 +81,8 @@
<descriptors>
<descriptor>src/assembly/spark-connector.xml</descriptor>
<descriptor>src/assembly/flink-sql-connector.xml</descriptor>
+
<descriptor>src/assembly/mybatis-generator-plugin.xml</descriptor>
+
<descriptor>src/assembly/iotdb-spring-boot-starter.xml</descriptor>
</descriptors>
<finalName>apache-iotdb-${project.version}</finalName>
</configuration>
diff --git a/distributions/src/assembly/iotdb-spring-boot-starter.xml
b/distributions/src/assembly/iotdb-spring-boot-starter.xml
new file mode 100644
index 0000000..266a498
--- /dev/null
+++ b/distributions/src/assembly/iotdb-spring-boot-starter.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+
+-->
+<assembly>
+ <id>spring-boot-starter-bin</id>
+ <formats>
+ <format>dir</format>
+ <format>zip</format>
+ </formats>
+
<baseDirectory>apache-iotdb-${project.version}-spring-boot-starter-bin</baseDirectory>
+ <fileSets>
+ <fileSet>
+
<directory>${maven.multiModuleProjectDirectory}/iotdb-spring-boot-starter/target/</directory>
+ <outputDirectory>${file.separator}</outputDirectory>
+ <includes>
+ <include>iotdb-spring-boot-starter-*.jar</include>
+ </includes>
+ </fileSet>
+ </fileSets>
+ <componentDescriptors>
+ <componentDescriptor>common-files.xml</componentDescriptor>
+ </componentDescriptors>
+</assembly>
diff --git a/distributions/src/assembly/mybatis-generator-plugin.xml
b/distributions/src/assembly/mybatis-generator-plugin.xml
new file mode 100644
index 0000000..271c084
--- /dev/null
+++ b/distributions/src/assembly/mybatis-generator-plugin.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+
+-->
+<assembly>
+ <id>mybatis-generator-plugin-bin</id>
+ <formats>
+ <format>dir</format>
+ <format>zip</format>
+ </formats>
+
<baseDirectory>apache-iotdb-${project.version}-mybatis-generator-plugin-bin</baseDirectory>
+ <fileSets>
+ <fileSet>
+
<directory>${maven.multiModuleProjectDirectory}/mybatis-generator/target/</directory>
+ <outputDirectory>${file.separator}</outputDirectory>
+ <includes>
+ <include>mybatis-generator-plugin-*.jar</include>
+ </includes>
+ </fileSet>
+ </fileSets>
+ <componentDescriptors>
+ <componentDescriptor>common-files.xml</componentDescriptor>
+ </componentDescriptors>
+</assembly>
diff --git a/examples/iotdb-spring-boot-start/pom.xml
b/examples/iotdb-spring-boot-start/pom.xml
new file mode 100644
index 0000000..919f52c
--- /dev/null
+++ b/examples/iotdb-spring-boot-start/pom.xml
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+
+-->
+<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>
+ <parent>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-parent</artifactId>
+ <version>3.4.3</version>
+ <relativePath/>
+ <!-- lookup parent from repository -->
+ </parent>
+ <groupId>org.apache.iotdb</groupId>
+ <artifactId>iotdb-spring-boot-start-example</artifactId>
+ <version>2.0.2-SNAPHOT</version>
+ <name>iotdb-spring-boot-start</name>
+ <description>iotdb-spring-boot-start</description>
+ <properties>
+ <java.version>17</java.version>
+ </properties>
+ <dependencies>
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-test</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.iotdb</groupId>
+ <artifactId>iotdb-spring-boot-starter</artifactId>
+ <version>2.0.2-SNAPSHOT</version>
+ </dependency>
+ </dependencies>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-maven-plugin</artifactId>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/examples/iotdb-spring-boot-start/readme.md
b/examples/iotdb-spring-boot-start/readme.md
new file mode 100644
index 0000000..ba43418
--- /dev/null
+++ b/examples/iotdb-spring-boot-start/readme.md
@@ -0,0 +1,116 @@
+<!--
+
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+
+-->
+# IoTDB-Spring-Boot-Starter Demo
+## Introduction
+
+ This demo shows how to use iotdb-spring-boot-starter
+
+### Version usage
+
+ IoTDB: 2.0.1-beta
+ iotdb-spring-boot-starter: 2.0.2-SNAPSHOT
+
+### 1. Install IoTDB
+
+ please refer to
[https://iotdb.apache.org/#/Download](https://iotdb.apache.org/#/Download)
+
+### 2. Startup IoTDB
+
+ please refer to [Quick
Start](http://iotdb.apache.org/UserGuide/Master/Get%20Started/QuickStart.html)
+
+ Then we need to create a database 'wind' by cli in table model
+ ```
+ create database wind;
+ use wind;
+ ```
+ Then we need to create a database 'table'
+ ```
+ CREATE TABLE table1 (
+ time TIMESTAMP TIME,
+ region STRING TAG,
+ plant_id STRING TAG,
+ device_id STRING TAG,
+ model_id STRING ATTRIBUTE,
+ maintenance STRING ATTRIBUTE,
+ temperature FLOAT FIELD,
+ humidity FLOAT FIELD,
+ status Boolean FIELD,
+ arrival_time TIMESTAMP FIELD
+ ) WITH (TTL=31536000000);
+ ```
+
+### 3. Build Dependencies with Maven in your Project
+
+ ```
+ <dependencies>
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-test</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.iotdb</groupId>
+ <artifactId>iotdb-spring-boot-starter</artifactId>
+ <version>2.0.2-SNAPSHOT</version>
+ </dependency>
+ </dependencies>
+ ```
+
+### 4、Use The target Bean with @Autowired
+
+ You can use the target Bean in your Project,like:
+ ```
+ @Autowired
+ private ITableSessionPool ioTDBSessionPool;
+ @Autowired
+ private SessionPool sessionPool;
+
+ public void queryTableSessionPool() throws IoTDBConnectionException,
StatementExecutionException {
+ ITableSession tableSession = ioTDBSessionPool.getSession();
+ final SessionDataSet sessionDataSet =
tableSession.executeQueryStatement("select * from power_data_set limit 10");
+ while (sessionDataSet.hasNext()) {
+ final RowRecord rowRecord = sessionDataSet.next();
+ final List<Field> fields = rowRecord.getFields();
+ for (Field field : fields) {
+ System.out.print(field.getStringValue());
+ }
+ System.out.println();
+ }
+ }
+
+ public void querySessionPool() throws IoTDBConnectionException,
StatementExecutionException {
+ final SessionDataSetWrapper sessionDataSetWrapper =
sessionPool.executeQueryStatement("show databases");
+ while (sessionDataSetWrapper.hasNext()) {
+ final RowRecord rowRecord = sessionDataSetWrapper.next();
+ final List<Field> fields = rowRecord.getFields();
+ for (Field field : fields) {
+ System.out.print(field.getStringValue());
+ }
+ System.out.println();
+ }
+ }
+
+ ```
diff --git
a/examples/iotdb-spring-boot-start/src/main/java/org/apache/iotdb/iotdbspringbootstartexample/IoTDBSpringBootStartApplication.java
b/examples/iotdb-spring-boot-start/src/main/java/org/apache/iotdb/iotdbspringbootstartexample/IoTDBSpringBootStartApplication.java
new file mode 100644
index 0000000..367fe3a
--- /dev/null
+++
b/examples/iotdb-spring-boot-start/src/main/java/org/apache/iotdb/iotdbspringbootstartexample/IoTDBSpringBootStartApplication.java
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.iotdb.iotdbspringbootstartexample;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class IoTDBSpringBootStartApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(IoTDBSpringBootStartApplication.class, args);
+ }
+
+}
diff --git
a/examples/iotdb-spring-boot-start/src/main/java/org/apache/iotdb/iotdbspringbootstartexample/service/IoTDBService.java
b/examples/iotdb-spring-boot-start/src/main/java/org/apache/iotdb/iotdbspringbootstartexample/service/IoTDBService.java
new file mode 100644
index 0000000..c9a5163
--- /dev/null
+++
b/examples/iotdb-spring-boot-start/src/main/java/org/apache/iotdb/iotdbspringbootstartexample/service/IoTDBService.java
@@ -0,0 +1,69 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.iotdb.iotdbspringbootstartexample.service;
+
+import org.apache.iotdb.isession.ITableSession;
+import org.apache.iotdb.isession.SessionDataSet;
+import org.apache.iotdb.isession.pool.ISessionPool;
+import org.apache.iotdb.isession.pool.ITableSessionPool;
+import org.apache.iotdb.isession.pool.SessionDataSetWrapper;
+import org.apache.iotdb.rpc.IoTDBConnectionException;
+import org.apache.iotdb.rpc.StatementExecutionException;
+import org.apache.iotdb.session.pool.SessionPool;
+import org.apache.tsfile.read.common.Field;
+import org.apache.tsfile.read.common.RowRecord;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class IoTDBService {
+
+ @Autowired
+ private ITableSessionPool ioTDBSessionPool;
+
+ @Autowired
+ private ISessionPool sessionPool;
+
+
+ public void queryTableSessionPool() throws IoTDBConnectionException,
StatementExecutionException {
+ ITableSession tableSession = ioTDBSessionPool.getSession();
+ final SessionDataSet sessionDataSet =
tableSession.executeQueryStatement("select * from power_data_set limit 10");
+ while (sessionDataSet.hasNext()) {
+ final RowRecord rowRecord = sessionDataSet.next();
+ final List<Field> fields = rowRecord.getFields();
+ for (Field field : fields) {
+ System.out.print(field.getStringValue());
+ }
+ System.out.println();
+ }
+ }
+
+ public void querySessionPool() throws IoTDBConnectionException,
StatementExecutionException {
+ final SessionDataSetWrapper sessionDataSetWrapper =
sessionPool.executeQueryStatement("show databases");
+ while (sessionDataSetWrapper.hasNext()) {
+ final RowRecord rowRecord = sessionDataSetWrapper.next();
+ final List<Field> fields = rowRecord.getFields();
+ for (Field field : fields) {
+ System.out.print(field.getStringValue());
+ }
+ System.out.println();
+ }
+ }
+}
diff --git
a/examples/iotdb-spring-boot-start/src/main/resources/application.properties
b/examples/iotdb-spring-boot-start/src/main/resources/application.properties
new file mode 100644
index 0000000..98953f1
--- /dev/null
+++ b/examples/iotdb-spring-boot-start/src/main/resources/application.properties
@@ -0,0 +1,26 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+spring.application.name=iotdb-spring-boot-start
+
+iotdb.session.url=172.20.31.56:6668
+iotdb.session.password=root
+iotdb.session.username=root
+iotdb.session.database=wind
+iotdb.session.sql-dialect=table
+iotdb.session.max-size=10
\ No newline at end of file
diff --git
a/examples/iotdb-spring-boot-start/src/test/java/org/apache/iotdb/iotdbspringbootstartexample/SpringBootIoTDBApplicationTests.java
b/examples/iotdb-spring-boot-start/src/test/java/org/apache/iotdb/iotdbspringbootstartexample/SpringBootIoTDBApplicationTests.java
new file mode 100644
index 0000000..0e98959
--- /dev/null
+++
b/examples/iotdb-spring-boot-start/src/test/java/org/apache/iotdb/iotdbspringbootstartexample/SpringBootIoTDBApplicationTests.java
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.iotdb.iotdbspringbootstartexample;
+
+import org.apache.iotdb.iotdbspringbootstartexample.service.IoTDBService;
+import org.apache.iotdb.rpc.IoTDBConnectionException;
+import org.apache.iotdb.rpc.StatementExecutionException;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+
+@SpringBootTest
+public class SpringBootIoTDBApplicationTests {
+
+ @Autowired
+ private IoTDBService iotdbService;
+
+ @Test
+ void contextLoads() throws IoTDBConnectionException,
StatementExecutionException {
+ iotdbService.querySessionPool();
+ iotdbService.queryTableSessionPool();
+ }
+
+}
\ No newline at end of file
diff --git a/examples/mybatis-generator/pom.xml
b/examples/mybatis-generator/pom.xml
new file mode 100644
index 0000000..83e2c72
--- /dev/null
+++ b/examples/mybatis-generator/pom.xml
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+
+-->
+<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
http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.iotdb</groupId>
+ <artifactId>iotdb-extras-parent</artifactId>
+ <version>2.0.2-SNAPSHOT</version>
+ <relativePath>../../pom.xml</relativePath>
+ </parent>
+ <artifactId>mybatis-generator-example</artifactId>
+ <version>2.0.2-SNAPHOT</version>
+ <properties>
+ <maven.compiler.source>21</maven.compiler.source>
+ <maven.compiler.target>21</maven.compiler.target>
+ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+ </properties>
+ <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>1.3.2</version>
+ </dependency>
+ </dependencies>
+ <configuration>
+ <verbose>true</verbose>
+ <overwrite>true</overwrite>
+
<configurationFile>src/main/resources/generatorConfig.xml</configurationFile>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/examples/mybatis-generator/readme.md
b/examples/mybatis-generator/readme.md
new file mode 100644
index 0000000..4c4e4fe
--- /dev/null
+++ b/examples/mybatis-generator/readme.md
@@ -0,0 +1,102 @@
+<!--
+
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+
+-->
+# Mybatis-Generator Demo
+## Introduction
+
+ This demo shows how to use IoTDB-Mybatis-Generator
+
+### Version usage
+
+ IoTDB: 2.0.2
+ mybatis-generator-plugin: 1.3.2
+
+### 1. Install IoTDB
+
+ please refer to
[https://iotdb.apache.org/#/Download](https://iotdb.apache.org/#/Download)
+
+### 2. Startup IoTDB
+
+ please refer to [Quick
Start](http://iotdb.apache.org/UserGuide/Master/Get%20Started/QuickStart.html)
+
+ Then we need to create a database 'test' by cli in table model
+ ```
+ create database test;
+ use test;
+ ```
+ Then we need to create a database 'table'
+ ```
+ CREATE TABLE mix3 (
+ time TIMESTAMP TIME,
+ region STRING TAG,
+ plant_id STRING TAG,
+ device_id STRING TAG,
+ model_id STRING ATTRIBUTE,
+ maintenance STRING ATTRIBUTE,
+ temperature FLOAT FIELD,
+ humidity FLOAT FIELD,
+ status Boolean FIELD,
+ arrival_time TIMESTAMP FIELD
+ ) WITH (TTL=31536000000);
+ ```
+
+### 3. Build Dependencies with Maven in your Project
+
+ ```
+ <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>1.3.2</version>
+ </dependency>
+ </dependencies>
+ <configuration>
+ <verbose>true</verbose>
+ <overwrite>true</overwrite>
+
<configurationFile>src/main/resources/generatorConfig.xml</configurationFile>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+ ```
+
+### 5. put The generatorConfig.xml in your project
+
+ The location of the ` configurationFile ` configuration ` generatorConfig.
xml ` file can be found in the ` src/main/resources ` template of this project
for reference` Copy its content and place it in the corresponding location
+
+### 6. exec 'mvn mybatis-generator:generate'
+
+ Execute the command at the location of the 'pom' in the project:` Mvn
mybatis generator: generate generates corresponding Java classes and mapper
files
+
+### 7、the target file location
+
+ You can see the target file in your Project
+ ```
+ org/apache/iotdb/mybatis/plugin/model/Mix.java
+ org/apache/iotdb/mybatis/plugin/mapper/MixMapper.java
+ org/apache/iotdb/mybatis/plugin/xml/MixMapper.xml
+
+ ```
diff --git a/examples/mybatis-generator/src/main/resources/generatorConfig.xml
b/examples/mybatis-generator/src/main/resources/generatorConfig.xml
new file mode 100644
index 0000000..530ff4f
--- /dev/null
+++ b/examples/mybatis-generator/src/main/resources/generatorConfig.xml
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE generatorConfiguration PUBLIC
"-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
+
+<!--
+
+ Licensed to the Apache Software Foundation (ASF) under one or more
+
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+
+ (the "License"); you may not use this file except in compliance with
+
+ the License. You may obtain a copy of the License at
+ http://www.apache.org/licenses/LICENSE-2.0
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+
+-->
+<generatorConfiguration>
+ <classPathEntry
location="/apache/iotdb/iotdb-client/jdbc/target/iotdb-jdbc-2.0.2-SNAPSHOT-jar-with-dependencies.jar"/>
+ <!-- mvn mybatis-generator:generate hierarchical/flat-->
+ <context id="myBatis3Simple" targetRuntime="MyBatis3Simple"
defaultModelType="flat">
+ <!-- <property name="suppressAllComments" value="true"/>-->
+ <!-- <property name="useActualColumnNames" value="false"/>-->
+ <!-- <property name="javaFormatter"
value="org.mybatis.generator.api.dom.DefaultJavaFormatter"/>-->
+ <!-- <property name="xmlFormatter"
value="org.mybatis.generator.api.dom.DefaultXmlFormatter"/>-->
+ <plugin type="org.apache.iotdb.mybatis.plugin.LombokPlugin"/>
+ <plugin type="org.apache.iotdb.mybatis.plugin.BatchInsertPlugin"/>
+ <!-- <plugin
type="org.apache.iotdb.mybatis.plugin.SerializablePlugin"/>-->
+ <plugin type="org.mybatis.generator.plugins.VirtualPrimaryKeyPlugin"/>
+ <!-- <commentGenerator
type="generator.org.apache.iotdb.mybatis.plugin.CNCommentGenerator">-->
+ <!-- <property name="suppressAllComments" value="true"/>-->
+ <!-- </commentGenerator>-->
+ <commentGenerator
type="org.apache.iotdb.mybatis.plugin.generator.SwaggerCommentGenerator">
+ <property name="suppressAllComments" value="true"/>
+ <property name="suppressDate" value="true"/>
+ <property name="addRemarkComments" value="true"/>
+ </commentGenerator>
+ <jdbcConnection driverClass="org.apache.iotdb.jdbc.IoTDBDriver"
connectionURL="jdbc:iotdb://127.0.0.1:6667/test?sql_dialect=table"
userId="root" password="root"/>
+ <javaTypeResolver
type="org.apache.iotdb.mybatis.plugin.generator.resolver.IoTDBJavaTypeResolver">
+ <property name="forceBigDecimals" value="false"/>
+ </javaTypeResolver>
+ <javaModelGenerator
targetPackage="org.apache.iotdb.mybatis.plugin.model"
targetProject="src/main/java">
+ <!-- <property name="enableSubPackages"
value="true"/>-->
+ <property name="trimStrings" value="true"/>
+ </javaModelGenerator>
+ <sqlMapGenerator targetPackage="org.apache.iotdb.mybatis.plugin.xml"
targetProject="src/main/java">
+ <!-- <property name="enableSubPackages"
value="true"/>-->
+ </sqlMapGenerator>
+ <javaClientGenerator type="XMLMAPPER"
targetPackage="org.apache.iotdb.mybatis.plugin.mapper"
targetProject="src/main/java">
+ <!-- <property name="enableSubPackages"
value="true"/>-->
+ </javaClientGenerator>
+ <table schema="test" tableName="mix" domainObjectName="Mix"
enableSelectByPrimaryKey="true" enableInsert="true"
enableDeleteByPrimaryKey="true">
+ <property name="virtualKeyColumns"
value="time,device_id,device_name,device_tag"/>
+ </table>
+ </context>
+</generatorConfiguration>
diff --git a/examples/mybatisplus-generator/pom.xml
b/examples/mybatisplus-generator/pom.xml
new file mode 100644
index 0000000..a24d947
--- /dev/null
+++ b/examples/mybatisplus-generator/pom.xml
@@ -0,0 +1,86 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+
+-->
+<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
http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.iotdb</groupId>
+ <artifactId>iotdb-extras-parent</artifactId>
+ <version>2.0.2-SNAPSHOT</version>
+ <relativePath>../../pom.xml</relativePath>
+ </parent>
+ <groupId>org.apache.iotdb</groupId>
+ <artifactId>mybatisplus-generator-example</artifactId>
+ <version>2.0.2-SNAPHOT</version>
+ <properties>
+ <mybatisplus.version>3.5.10</mybatisplus.version>
+ <maven.compiler.source>21</maven.compiler.source>
+ <maven.compiler.target>21</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>${mybatisplus.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>com.baomidou</groupId>
+ <artifactId>mybatis-plus-generator</artifactId>
+ <version>3.5.10</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.1-beta</version>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter</artifactId>
+ <version>3.4.3</version>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-web</artifactId>
+ <version>3.4.3</version>
+ </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>
+ </dependencies>
+</project>
diff --git a/examples/mybatisplus-generator/readme.md
b/examples/mybatisplus-generator/readme.md
new file mode 100644
index 0000000..457b93f
--- /dev/null
+++ b/examples/mybatisplus-generator/readme.md
@@ -0,0 +1,128 @@
+<!--
+
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+
+-->
+# Mybatis-Generator Demo
+## Introduction
+
+ This demo shows how to use IoTDB-Mybatis-Generator
+
+### Version usage
+
+ IoTDB: 2.0.1-beta
+ mybatisPlus: 3.5.10
+
+### 1. Install IoTDB
+
+ please refer to
[https://iotdb.apache.org/#/Download](https://iotdb.apache.org/#/Download)
+
+### 2. Startup IoTDB
+
+ please refer to [Quick
Start](http://iotdb.apache.org/UserGuide/Master/Get%20Started/QuickStart.html)
+
+ Then we need to create a database 'test' by cli in table model
+ ```
+ create database test;
+ use test;
+ ```
+ Then we need to create a database 'table'
+ ```
+ CREATE TABLE mix (
+ time TIMESTAMP TIME,
+ region STRING TAG,
+ plant_id STRING TAG,
+ device_id STRING TAG,
+ model_id STRING ATTRIBUTE,
+ maintenance STRING ATTRIBUTE,
+ temperature FLOAT FIELD,
+ humidity FLOAT FIELD,
+ status Boolean FIELD,
+ arrival_time TIMESTAMP FIELD
+ ) WITH (TTL=31536000000);
+ ```
+
+### 3. Build Dependencies with Maven in your Project
+
+ ```
+ <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>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.2</version>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter</artifactId>
+ <version>3.4.3</version>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-web</artifactId>
+ <version>3.4.3</version>
+ </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>
+ </dependencies>
+ ```
+
+### 5. Start the Main.java
+
+### 6、the target file location
+
+ You can see the target file in your Project
+ ```
+ org/apache/iotdb/controller/MixController.java
+ org/apache/iotdb/entity/Mix.java
+ org/apache/iotdb/mapper/MixMapper.xml
+ org/apache/iotdb/service/MixService.java
+ org/apache/iotdb/service/MixServiceImpl.java
+ org/apache/iotdb/MixMapper.xml
+
+ ```
diff --git
a/examples/mybatisplus-generator/src/main/java/org/apache/iotdb/Main.java
b/examples/mybatisplus-generator/src/main/java/org/apache/iotdb/Main.java
new file mode 100644
index 0000000..b8e19af
--- /dev/null
+++ b/examples/mybatisplus-generator/src/main/java/org/apache/iotdb/Main.java
@@ -0,0 +1,80 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+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 java.sql.Types;
+import java.util.Collections;
+
+
+public class Main {
+ public static void main(String[] args) {
+ IoTDBDataSource dataSource = new IoTDBDataSource();
+
dataSource.setUrl("jdbc:iotdb://127.0.0.1:6667/test?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("/apache/iotdb-extras/examples/mybatisplus-generator/src/main/java/");
+ })
+ .packageConfig(builder -> {
+ builder.parent("org.apache.iotdb")
+ .mapper("mapper")
+ .pathInfo(Collections.singletonMap(OutputFile.xml,
"/apache/iotdb-extras/examples/mybatisplus-generator/src/main/java/"));
+ })
+ .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("mix");
+ builder.entityBuilder()
+ .enableLombok()
+ .addIgnoreColumns("create_time")
+ .enableFileOverride();
+ builder.serviceBuilder()
+ .formatServiceFileName("%sService")
+ .formatServiceImplFileName("%sServiceImpl")
+ .convertServiceFileName((entityName -> entityName
+ "Service"))
+ .enableFileOverride();
+ builder.controllerBuilder()
+ .enableRestStyle()
+ .enableFileOverride();
+ })
+ .execute();
+ }
+}
diff --git a/examples/spark-table/README.md b/examples/spark-table/README.md
index b986b66..69b50ea 100644
--- a/examples/spark-table/README.md
+++ b/examples/spark-table/README.md
@@ -35,7 +35,7 @@ Import the IoTDB-Table-Spark-Connector dependency in your
project.
## Options
| Key | Default Value | Comment
| Required |
|----------------|----------------|-----------------------------------------------------------------------------------------------------------|----------|
-| iotdb.database | -- | The database name of Iotdb, which needs to
be a database that already exists in IoTDB | true |
+| iotdb.database | -- | The database name of IoTDB, which needs to
be a database that already exists in IoTDB | true |
| iotdb.table | -- | The table name in IoTDB needs to be a
table that already exists in IoTDB | true |
| iotdb.username | root | the username to access IoTDB
| false |
| iotdb.password | root | the password to access IoTDB
| false |
diff --git a/iotdb-spring-boot-starter/README.md
b/iotdb-spring-boot-starter/README.md
new file mode 100644
index 0000000..20860e1
--- /dev/null
+++ b/iotdb-spring-boot-starter/README.md
@@ -0,0 +1,63 @@
+<!--
+
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+
+-->
+# iotdb-spring-boot-starter
+
+* After 'clone' the project, execute 'mvn clean install'. This step is not
necessary as it has already been uploaded to the Maven central repository
+
+* Add the following configuration to the 'pom' file of the project to be
generated:
+
+```
+ <dependencies>
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-test</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.iotdb</groupId>
+ <artifactId>iotdb-spring-boot-starter</artifactId>
+ <version>2.0.2-SNAPSHOT</version>
+ </dependency>
+ </dependencies>
+```
+
+* Use The target Bean with @Autowired like:
+```java
+ @Autowired
+ private ITableSessionPool ioTDBSessionPool;
+
+ public void queryTableSessionPool() throws IoTDBConnectionException,
StatementExecutionException {
+ ITableSession tableSession = ioTDBSessionPool.getSession();
+ final SessionDataSet sessionDataSet =
tableSession.executeQueryStatement("select * from table1 limit 10");
+ while (sessionDataSet.hasNext()) {
+ final RowRecord rowRecord = sessionDataSet.next();
+ final List<Field> fields = rowRecord.getFields();
+ for (Field field : fields) {
+ System.out.print(field.getStringValue());
+ }
+ System.out.println();
+ }
+ }
+```
\ No newline at end of file
diff --git a/iotdb-spring-boot-starter/pom.xml
b/iotdb-spring-boot-starter/pom.xml
new file mode 100644
index 0000000..eb1607a
--- /dev/null
+++ b/iotdb-spring-boot-starter/pom.xml
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+
+-->
+<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
http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-parent</artifactId>
+ <version>3.4.3</version>
+ <relativePath/>
+ <!-- lookup parent from repository -->
+ </parent>
+ <groupId>org.apache.iotdb</groupId>
+ <artifactId>iotdb-spring-boot-starter</artifactId>
+ <version>2.0.2-SNAPSHOT</version>
+ <properties>
+ <maven.compiler.source>21</maven.compiler.source>
+ <maven.compiler.target>21</maven.compiler.target>
+ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+ <spring-boot3.version>3.1.4</spring-boot3.version>
+ </properties>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.iotdb</groupId>
+ <artifactId>iotdb-session</artifactId>
+ <version>2.0.1-beta</version>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter</artifactId>
+ <version>${spring-boot3.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-autoconfigure</artifactId>
+ <version>${spring-boot3.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-configuration-processor</artifactId>
+ <version>${spring-boot3.version}</version>
+ </dependency>
+ </dependencies>
+</project>
diff --git
a/iotdb-spring-boot-starter/src/main/java/org/apache/iotdb/config/IoTDBSessionProperties.java
b/iotdb-spring-boot-starter/src/main/java/org/apache/iotdb/config/IoTDBSessionProperties.java
new file mode 100644
index 0000000..b61ee8d
--- /dev/null
+++
b/iotdb-spring-boot-starter/src/main/java/org/apache/iotdb/config/IoTDBSessionProperties.java
@@ -0,0 +1,174 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.iotdb.config;
+
+import org.springframework.boot.context.properties.ConfigurationProperties;
+
+@ConfigurationProperties(prefix = "iotdb.session")
+public class IoTDBSessionProperties {
+ private String url;
+ private String username;
+ private String password;
+ private String database;
+ private String sql_dialect = "table";
+ private Integer max_size = 5;
+ private Integer fetch_size = 1024;
+ private long query_timeout_in_ms = 60000L;
+ private boolean enable_auto_fetch = true;
+ private boolean use_ssl = false;
+ private int max_retry_count = 60;
+ private long wait_to_get_session_timeout_in_msit = 60000L;
+ private boolean enable_compression = false;
+ private long retry_interval_in_ms = 500L;
+
+ public String getUrl() {
+ return url;
+ }
+
+ public void setUrl(String url) {
+ this.url = url;
+ }
+
+ public String getUsername() {
+ return username;
+ }
+
+ public void setUsername(String username) {
+ this.username = username;
+ }
+
+ public String getPassword() {
+ return password;
+ }
+
+ public void setPassword(String password) {
+ this.password = password;
+ }
+
+ public String getDatabase() {
+ return database;
+ }
+
+ public void setDatabase(String database) {
+ this.database = database;
+ }
+
+ public String getSql_dialect() {
+ return sql_dialect;
+ }
+
+ public void setSql_dialect(String sql_dialect) {
+ this.sql_dialect = sql_dialect;
+ }
+
+ public Integer getMax_size() {
+ return max_size;
+ }
+
+ public void setMax_size(Integer max_size) {
+ this.max_size = max_size;
+ }
+
+ public Integer getFetch_size() {
+ return fetch_size;
+ }
+
+ public void setFetch_size(Integer fetch_size) {
+ this.fetch_size = fetch_size;
+ }
+
+ public Long getQuery_timeout_in_ms() {
+ return query_timeout_in_ms;
+ }
+
+ public void setQuery_timeout_in_ms(Long query_timeout_in_ms) {
+ this.query_timeout_in_ms = query_timeout_in_ms;
+ }
+
+ public Boolean getEnable_auto_fetch() {
+ return enable_auto_fetch;
+ }
+
+ public void setEnable_auto_fetch(Boolean enable_auto_fetch) {
+ this.enable_auto_fetch = enable_auto_fetch;
+ }
+
+ public Boolean getUse_ssl() {
+ return use_ssl;
+ }
+
+ public void setUse_ssl(Boolean use_ssl) {
+ this.use_ssl = use_ssl;
+ }
+
+ public Integer getMax_retry_count() {
+ return max_retry_count;
+ }
+
+ public void setMax_retry_count(Integer max_retry_count) {
+ this.max_retry_count = max_retry_count;
+ }
+
+ public void setQuery_timeout_in_ms(long query_timeout_in_ms) {
+ this.query_timeout_in_ms = query_timeout_in_ms;
+ }
+
+ public boolean isEnable_auto_fetch() {
+ return enable_auto_fetch;
+ }
+
+ public void setEnable_auto_fetch(boolean enable_auto_fetch) {
+ this.enable_auto_fetch = enable_auto_fetch;
+ }
+
+ public boolean isUse_ssl() {
+ return use_ssl;
+ }
+
+ public void setUse_ssl(boolean use_ssl) {
+ this.use_ssl = use_ssl;
+ }
+
+ public void setMax_retry_count(int max_retry_count) {
+ this.max_retry_count = max_retry_count;
+ }
+
+ public long getWait_to_get_session_timeout_in_msit() {
+ return wait_to_get_session_timeout_in_msit;
+ }
+
+ public void setWait_to_get_session_timeout_in_msit(long
wait_to_get_session_timeout_in_msit) {
+ this.wait_to_get_session_timeout_in_msit =
wait_to_get_session_timeout_in_msit;
+ }
+
+ public boolean isEnable_compression() {
+ return enable_compression;
+ }
+
+ public void setEnable_compression(boolean enable_compression) {
+ this.enable_compression = enable_compression;
+ }
+
+ public long getRetry_interval_in_ms() {
+ return retry_interval_in_ms;
+ }
+
+ public void setRetry_interval_in_ms(long retry_interval_in_ms) {
+ this.retry_interval_in_ms = retry_interval_in_ms;
+ }
+}
\ No newline at end of file
diff --git
a/iotdb-spring-boot-starter/src/main/java/org/apache/iotdb/session/IoTDBSessionPool.java
b/iotdb-spring-boot-starter/src/main/java/org/apache/iotdb/session/IoTDBSessionPool.java
new file mode 100644
index 0000000..8914cdd
--- /dev/null
+++
b/iotdb-spring-boot-starter/src/main/java/org/apache/iotdb/session/IoTDBSessionPool.java
@@ -0,0 +1,95 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.iotdb.session;
+
+import org.apache.iotdb.config.IoTDBSessionProperties;
+import org.apache.iotdb.isession.pool.ISessionPool;
+import org.apache.iotdb.isession.pool.ITableSessionPool;
+import org.apache.iotdb.session.pool.SessionPool;
+import org.apache.iotdb.session.pool.TableSessionPoolBuilder;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
+import
org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import java.util.Arrays;
+
+@Configuration
+@ConditionalOnClass({IoTDBSessionProperties.class})
+@EnableConfigurationProperties(IoTDBSessionProperties.class)
+public class IoTDBSessionPool {
+
+ private final IoTDBSessionProperties properties;
+ private ITableSessionPool tableSessionPool;
+ private ISessionPool treeSessionPool;
+
+ public IoTDBSessionPool(IoTDBSessionProperties properties) {
+ this.properties = properties;
+ }
+
+ @Bean
+ public ITableSessionPool tableSessionPool() {
+ if(tableSessionPool == null) {
+ synchronized (IoTDBSessionPool.class) {
+ if(tableSessionPool == null) {
+ tableSessionPool = new TableSessionPoolBuilder().
+
nodeUrls(Arrays.asList(properties.getUrl().split(";"))).
+ user(properties.getUsername()).
+ password(properties.getPassword()).
+ database(properties.getDatabase()).
+ maxSize(properties.getMax_size()).
+ fetchSize(properties.getFetch_size()).
+ enableAutoFetch(properties.getEnable_auto_fetch()).
+ useSSL(properties.getUse_ssl()).
+
queryTimeoutInMs(properties.getQuery_timeout_in_ms()).
+ maxRetryCount(properties.getMax_retry_count()).
+
waitToGetSessionTimeoutInMs(properties.getQuery_timeout_in_ms()).
+
enableCompression(properties.isEnable_compression()).
+
retryIntervalInMs(properties.getRetry_interval_in_ms()).
+ build();
+ }
+ }
+ }
+ return tableSessionPool;
+ }
+
+ @Bean
+ public ISessionPool treeSessionPool() {
+ if(treeSessionPool == null) {
+ synchronized (IoTDBSessionPool.class) {
+ if(treeSessionPool == null) {
+ treeSessionPool = new SessionPool.Builder().
+
nodeUrls(Arrays.asList(properties.getUrl().split(";"))).
+ user(properties.getUsername()).
+ password(properties.getPassword()).
+ maxSize(properties.getMax_size()).
+ fetchSize(properties.getFetch_size()).
+ enableAutoFetch(properties.getEnable_auto_fetch()).
+ useSSL(properties.getUse_ssl()).
+
queryTimeoutInMs(properties.getQuery_timeout_in_ms()).
+ maxRetryCount(properties.getMax_retry_count()).
+
waitToGetSessionTimeoutInMs(properties.getQuery_timeout_in_ms()).
+
enableCompression(properties.isEnable_compression()).
+
retryIntervalInMs(properties.getRetry_interval_in_ms()).
+ build();
+ }
+ }
+ }
+ return treeSessionPool;
+ }
+}
diff --git
a/iotdb-spring-boot-starter/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
b/iotdb-spring-boot-starter/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
new file mode 100644
index 0000000..5195201
--- /dev/null
+++
b/iotdb-spring-boot-starter/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
@@ -0,0 +1,19 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+org.apache.iotdb.session.IoTDBSessionPool
\ No newline at end of file
diff --git a/mybatis-generator/.gitignore b/mybatis-generator/.gitignore
new file mode 100644
index 0000000..90c8f11
--- /dev/null
+++ b/mybatis-generator/.gitignore
@@ -0,0 +1,7 @@
+target/
+.settings/
+.classpath
+.project
+.idea/
+*.iml
+.DS_Store
diff --git a/mybatis-generator/README-zh.md b/mybatis-generator/README-zh.md
new file mode 100644
index 0000000..94eb875
--- /dev/null
+++ b/mybatis-generator/README-zh.md
@@ -0,0 +1,55 @@
+<!--
+
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+
+-->
+# mybatis-generator-plugin
+
+* 把该项目 `clone` 下来之后,在本地执行 `mvn clean install` 或者 `mvn clean deploy` (`deploy`
需要修改 `pom` 中的 `distributionManagement`)【已经上传 `Maven` 中央仓库,所以此步骤不在需要】
+
+* 在要生成的项目的 `pom` 文件中添加如下配置:
+
+```java
+ <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>
+```
+
+* `configurationFile` 配置 `generatorConfig.xml` 文件的位置,其内容在本项目的
`src/main/resources` 有一个模板供参考,`copy` 其内容放到相应的位置
+
+* 修改 `generatorConfig.xml` 中
想用的内容,主要是:`jdbcConnection`、`javaModelGenerator`、`sqlMapGenerator`、`javaClientGenerator`、`table`
+
+* 在项目的 `pom` 所在的地方执行命令:`mvn mybatis-generator:generate` 生成相应的 `Java` 类和
`mapper` 文件
\ No newline at end of file
diff --git a/mybatis-generator/README.md b/mybatis-generator/README.md
new file mode 100644
index 0000000..e8f848f
--- /dev/null
+++ b/mybatis-generator/README.md
@@ -0,0 +1,55 @@
+
+<!--
+
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+
+-->
+
+# iotdb-spring-boot-starter
+
+* After 'clone' the project, execute 'mvn clean install'. This step is not
necessary as it has already been uploaded to the Maven central repository
+
+```java
+ <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>iotdb-mybatis-generator</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>
+```
+
+* The location of the ` configurationFile ` configuration ` generatorConfig.
xml ` file can be found in the ` src/main/resources ` template of this project
for reference` Copy its content and place it in the corresponding location
+
+* Modify the content you want to use in 'generatorConfig. xml', mainly by:`
jdbcConnection`、`javaModelGenerator`、`sqlMapGenerator`、`javaClientGenerator`、`table`
+
+* Execute the command at the location of the 'pom' in the project:` Mvn
mybatis generator: generate generates corresponding Java classes and mapper
files
\ No newline at end of file
diff --git a/mybatis-generator/pom.xml b/mybatis-generator/pom.xml
new file mode 100644
index 0000000..43ec0e4
--- /dev/null
+++ b/mybatis-generator/pom.xml
@@ -0,0 +1,27 @@
+<?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
http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.iotdb</groupId>
+ <artifactId>iotdb-extras-parent</artifactId>
+ <version>2.0.2-SNAPSHOT</version>
+ </parent>
+ <groupId>org.apache.iotdb</groupId>
+ <artifactId>mybatis-generator-plugin</artifactId>
+ <version>2.0.2-SNAPSHOT</version>
+ <packaging>jar</packaging>
+ <licenses>
+ <license>
+ <name>The Apache Software License, Version 2.0</name>
+ <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
+ <distribution>repo</distribution>
+ </license>
+ </licenses>
+ <dependencies>
+ <dependency>
+ <groupId>org.mybatis.generator</groupId>
+ <artifactId>mybatis-generator-core</artifactId>
+ <version>1.4.2</version>
+ </dependency>
+ </dependencies>
+</project>
diff --git
a/mybatis-generator/src/main/java/org/apache/iotdb/mybatis/plugin/BatchInsertPlugin.java
b/mybatis-generator/src/main/java/org/apache/iotdb/mybatis/plugin/BatchInsertPlugin.java
new file mode 100644
index 0000000..cb24f3c
--- /dev/null
+++
b/mybatis-generator/src/main/java/org/apache/iotdb/mybatis/plugin/BatchInsertPlugin.java
@@ -0,0 +1,133 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.iotdb.mybatis.plugin;
+
+import org.mybatis.generator.api.IntrospectedColumn;
+import org.mybatis.generator.api.IntrospectedTable;
+import org.mybatis.generator.api.PluginAdapter;
+import org.mybatis.generator.api.dom.java.FullyQualifiedJavaType;
+import org.mybatis.generator.api.dom.java.Interface;
+import org.mybatis.generator.api.dom.java.JavaVisibility;
+import org.mybatis.generator.api.dom.java.Method;
+import org.mybatis.generator.api.dom.java.Parameter;
+import org.mybatis.generator.api.dom.xml.Attribute;
+import org.mybatis.generator.api.dom.xml.Document;
+import org.mybatis.generator.api.dom.xml.TextElement;
+import org.mybatis.generator.api.dom.xml.XmlElement;
+
+import java.util.List;
+import java.util.Set;
+import java.util.TreeSet;
+
+public class BatchInsertPlugin extends PluginAdapter {
+
+ @Override
+ public boolean clientGenerated(Interface interfaze, IntrospectedTable
introspectedTable) {
+ batchInsertMethod(interfaze, introspectedTable);
+
+ return super.clientGenerated(interfaze, introspectedTable);
+ }
+
+ @Override
+ public boolean sqlMapDocumentGenerated(Document document, IntrospectedTable
introspectedTable) {
+ addBatchInsertXml(document, introspectedTable);
+ return super.sqlMapDocumentGenerated(document, introspectedTable);
+ }
+
+ @Override
+ public boolean validate(List<String> list) {
+ return true;
+ }
+
+ private void batchInsertMethod(Interface interfaze, IntrospectedTable
introspectedTable) {
+ Set<FullyQualifiedJavaType> importedTypes = new TreeSet<>();
+ importedTypes.add(FullyQualifiedJavaType.getNewListInstance());
+ importedTypes.add(new
FullyQualifiedJavaType(introspectedTable.getBaseRecordType()));
+
+ Method ibsmethod = new Method("batchInsert");
+ ibsmethod.setVisibility(JavaVisibility.PUBLIC);
+ ibsmethod.setAbstract(true);
+
+ FullyQualifiedJavaType ibsReturnType =
FullyQualifiedJavaType.getIntInstance();
+
+ ibsmethod.setReturnType(ibsReturnType);
+
+ ibsmethod.setName("batchInsert");
+
+ FullyQualifiedJavaType paramType =
FullyQualifiedJavaType.getNewListInstance();
+ FullyQualifiedJavaType paramListType;
+ paramListType = new
FullyQualifiedJavaType(introspectedTable.getBaseRecordType());
+ paramType.addTypeArgument(paramListType);
+ ibsmethod.addParameter(new Parameter(paramType, "records",
"@Param(\"records\")"));
+ interfaze.addImportedTypes(importedTypes);
+
+ interfaze.addMethod(ibsmethod);
+ }
+
+ private void addBatchInsertXml(Document document, IntrospectedTable
introspectedTable) {
+ List<IntrospectedColumn> columns = introspectedTable.getAllColumns();
+ String incrementField =
+
introspectedTable.getTableConfiguration().getProperties().getProperty("incrementField");
+ if (incrementField != null) {
+ incrementField = incrementField.toUpperCase();
+ }
+
+ XmlElement insertBatchElement = new XmlElement("insert");
+ insertBatchElement.addAttribute(new Attribute("id", "batchInsert"));
+ insertBatchElement.addAttribute(new Attribute("parameterType",
"java.util.List"));
+
+ StringBuilder sqlElement = new StringBuilder();
+ StringBuilder javaPropertyAndDbType = new StringBuilder("(");
+ for (IntrospectedColumn introspectedColumn : columns) {
+ String columnName = introspectedColumn.getActualColumnName();
+ if (!columnName.toUpperCase().equals(incrementField)) {
+ sqlElement.append(columnName + ",\n ");
+ javaPropertyAndDbType.append(
+ "\n #{item."
+ + introspectedColumn.getJavaProperty()
+ + ",jdbcType="
+ + introspectedColumn.getJdbcTypeName()
+ + "},");
+ }
+ }
+
+ XmlElement foreachElement = new XmlElement("foreach");
+ foreachElement.addAttribute(new Attribute("collection", "records"));
+ foreachElement.addAttribute(new Attribute("index", "index"));
+ foreachElement.addAttribute(new Attribute("item", "item"));
+ foreachElement.addAttribute(new Attribute("separator", ","));
+ insertBatchElement.addElement(
+ new TextElement(
+ "insert into "
+ +
introspectedTable.getAliasedFullyQualifiedTableNameAtRuntime()
+ + " ("));
+ insertBatchElement.addElement(
+ new TextElement(
+ " " + sqlElement.delete(sqlElement.lastIndexOf(","),
sqlElement.length()).toString()));
+ insertBatchElement.addElement(new TextElement(") values "));
+ foreachElement.addElement(
+ new TextElement(
+ javaPropertyAndDbType
+ .delete(javaPropertyAndDbType.length() - 1,
javaPropertyAndDbType.length())
+ .append("\n )")
+ .toString()));
+ insertBatchElement.addElement(foreachElement);
+
+ document.getRootElement().addElement(insertBatchElement);
+ }
+}
diff --git
a/mybatis-generator/src/main/java/org/apache/iotdb/mybatis/plugin/LombokPlugin.java
b/mybatis-generator/src/main/java/org/apache/iotdb/mybatis/plugin/LombokPlugin.java
new file mode 100644
index 0000000..650d4ec
--- /dev/null
+++
b/mybatis-generator/src/main/java/org/apache/iotdb/mybatis/plugin/LombokPlugin.java
@@ -0,0 +1,64 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.iotdb.mybatis.plugin;
+
+import org.mybatis.generator.api.IntrospectedColumn;
+import org.mybatis.generator.api.IntrospectedTable;
+import org.mybatis.generator.api.PluginAdapter;
+import org.mybatis.generator.api.dom.java.Method;
+import org.mybatis.generator.api.dom.java.TopLevelClass;
+
+import java.util.List;
+
+public class LombokPlugin extends PluginAdapter {
+
+ @Override
+ public boolean validate(List<String> list) {
+ return true;
+ }
+
+ @Override
+ public boolean modelBaseRecordClassGenerated(
+ TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
+ topLevelClass.addImportedType("lombok.Data");
+
+ topLevelClass.addAnnotation("@Data");
+
+ return true;
+ }
+
+ @Override
+ public boolean modelSetterMethodGenerated(
+ Method method,
+ TopLevelClass topLevelClass,
+ IntrospectedColumn introspectedColumn,
+ IntrospectedTable introspectedTable,
+ ModelClassType modelClassType) {
+ return false;
+ }
+
+ @Override
+ public boolean modelGetterMethodGenerated(
+ Method method,
+ TopLevelClass topLevelClass,
+ IntrospectedColumn introspectedColumn,
+ IntrospectedTable introspectedTable,
+ ModelClassType modelClassType) {
+ return false;
+ }
+}
diff --git
a/mybatis-generator/src/main/java/org/apache/iotdb/mybatis/plugin/SerializablePlugin.java
b/mybatis-generator/src/main/java/org/apache/iotdb/mybatis/plugin/SerializablePlugin.java
new file mode 100644
index 0000000..31767c4
--- /dev/null
+++
b/mybatis-generator/src/main/java/org/apache/iotdb/mybatis/plugin/SerializablePlugin.java
@@ -0,0 +1,141 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.iotdb.mybatis.plugin;
+
+import org.mybatis.generator.api.IntrospectedTable;
+import org.mybatis.generator.api.PluginAdapter;
+import org.mybatis.generator.api.dom.java.Field;
+import org.mybatis.generator.api.dom.java.FullyQualifiedJavaType;
+import org.mybatis.generator.api.dom.java.InnerClass;
+import org.mybatis.generator.api.dom.java.JavaVisibility;
+import org.mybatis.generator.api.dom.java.TopLevelClass;
+
+import java.util.List;
+import java.util.Properties;
+
+public class SerializablePlugin extends PluginAdapter {
+
+ private FullyQualifiedJavaType serializable;
+ private FullyQualifiedJavaType gwtSerializable;
+ private boolean addGWTInterface;
+ private boolean suppressJavaInterface;
+
+ public SerializablePlugin() {
+ super();
+ serializable = new FullyQualifiedJavaType("java.io.Serializable");
+ gwtSerializable = new
FullyQualifiedJavaType("com.google.gwt.user.client.rpc.IsSerializable");
+ }
+
+ @Override
+ public boolean validate(List<String> warnings) {
+ // this plugin is always valid
+ return true;
+ }
+
+ @Override
+ public void setProperties(Properties properties) {
+ super.setProperties(properties);
+ addGWTInterface =
Boolean.valueOf(properties.getProperty("addGWTInterface"));
+ suppressJavaInterface =
Boolean.valueOf(properties.getProperty("suppressJavaInterface"));
+ }
+
+ @Override
+ public boolean modelBaseRecordClassGenerated(
+ TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
+ makeSerializable(topLevelClass, introspectedTable);
+ return true;
+ }
+
+ @Override
+ public boolean modelPrimaryKeyClassGenerated(
+ TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
+ makeSerializable(topLevelClass, introspectedTable);
+ return true;
+ }
+
+ @Override
+ public boolean modelRecordWithBLOBsClassGenerated(
+ TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
+ makeSerializable(topLevelClass, introspectedTable);
+ return true;
+ }
+
+ @Override
+ public boolean modelExampleClassGenerated(
+ TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
+
+ makeSerializable(topLevelClass, introspectedTable);
+
+ for (InnerClass innerClass : topLevelClass.getInnerClasses()) {
+ if ("GeneratedCriteria".equals(innerClass.getType().getShortName())) {
+ addSerialVersionUIDField(innerClass);
+ } else if ("Criteria".equals(innerClass.getType().getShortName())) {
+ addSerialVersionUIDField(innerClass);
+ } else if ("Criterion".equals(innerClass.getType().getShortName())) {
+ addSerialVersionUIDField(innerClass);
+ }
+ }
+
+ return true;
+ }
+
+ private void addSerialVersionUIDField(InnerClass innerClass) {
+ innerClass.addSuperInterface(serializable);
+ Field field = getSerialVersionUIDField();
+ innerClass.addField(field);
+ }
+
+ private Field getSerialVersionUIDField() {
+ final FullyQualifiedJavaType qualifiedJavaType = new
FullyQualifiedJavaType("long");
+ Field field = new Field("serialVersionUID", qualifiedJavaType);
+ field.setFinal(true);
+ field.setInitializationString("1L");
+ field.setName("serialVersionUID");
+ field.setStatic(true);
+ field.setType(qualifiedJavaType);
+ field.setVisibility(JavaVisibility.PRIVATE);
+ return field;
+ }
+
+ protected void makeSerializable(
+ TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
+ if (addGWTInterface) {
+ topLevelClass.addImportedType(gwtSerializable);
+ topLevelClass.addSuperInterface(gwtSerializable);
+ }
+
+ List<Field> fields = topLevelClass.getFields();
+ if (null != fields && fields.size() > 0) {
+ for (Field field : fields) {
+ if ("serialVersionUID".equals(field.getName())) {
+ return;
+ }
+ }
+ }
+
+ if (!suppressJavaInterface) {
+ topLevelClass.addImportedType(serializable);
+ topLevelClass.addSuperInterface(serializable);
+
+ Field field = getSerialVersionUIDField();
+ context.getCommentGenerator().addFieldComment(field, introspectedTable);
+
+ topLevelClass.addField(field);
+ }
+ }
+}
diff --git
a/mybatis-generator/src/main/java/org/apache/iotdb/mybatis/plugin/generator/CNCommentGenerator.java
b/mybatis-generator/src/main/java/org/apache/iotdb/mybatis/plugin/generator/CNCommentGenerator.java
new file mode 100644
index 0000000..3d16206
--- /dev/null
+++
b/mybatis-generator/src/main/java/org/apache/iotdb/mybatis/plugin/generator/CNCommentGenerator.java
@@ -0,0 +1,129 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.iotdb.mybatis.plugin.generator;
+
+import org.apache.iotdb.mybatis.plugin.util.DateUtil;
+
+import org.mybatis.generator.api.IntrospectedColumn;
+import org.mybatis.generator.api.IntrospectedTable;
+import org.mybatis.generator.api.dom.java.CompilationUnit;
+import org.mybatis.generator.api.dom.java.Field;
+import org.mybatis.generator.api.dom.java.FullyQualifiedJavaType;
+import org.mybatis.generator.api.dom.java.JavaVisibility;
+import org.mybatis.generator.api.dom.java.TopLevelClass;
+import org.mybatis.generator.internal.DefaultCommentGenerator;
+import org.mybatis.generator.internal.util.StringUtility;
+
+import java.util.Date;
+import java.util.Properties;
+
+public class CNCommentGenerator extends DefaultCommentGenerator {
+ private Properties properties;
+
+ @Override
+ public void addConfigurationProperties(Properties properties) {
+ super.addConfigurationProperties(properties);
+ this.properties = new Properties();
+ this.properties.putAll(properties);
+ }
+
+ @Override
+ public void addJavaFileComment(CompilationUnit compilationUnit) {
+ compilationUnit.addFileCommentLine("/**");
+
+ String copyright = " * Copyright From 2025. IoTDB.";
+ compilationUnit.addFileCommentLine(copyright);
+
+ compilationUnit.addFileCommentLine(" * ");
+ compilationUnit.addFileCommentLine(
+ " * " + compilationUnit.getType().getShortNameWithoutTypeArguments() +
".java");
+ compilationUnit.addFileCommentLine(" */");
+ }
+
+ @Override
+ public void addModelClassComment(
+ TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
+ StringBuilder sb = new StringBuilder();
+
+ topLevelClass.addJavaDocLine("/**");
+ topLevelClass.addJavaDocLine(" *");
+
+ String remarks = introspectedTable.getRemarks();
+ if (StringUtility.stringHasValue(remarks)) {
+ String[] remarkLines =
remarks.split(System.getProperty("line.separator"));
+ for (String remarkLine : remarkLines) {
+ topLevelClass.addJavaDocLine(" * " + remarkLine);
+ }
+ sb.append(" * ");
+ }
+
+ sb.append("table: ");
+ sb.append(introspectedTable.getFullyQualifiedTable());
+ sb.append(" of model class");
+ topLevelClass.addJavaDocLine(sb.toString());
+ topLevelClass.addJavaDocLine(" *");
+
+ String author = "IoTDB";
+ if (properties.containsKey("author")) {
+ author = properties.getProperty("author");
+ }
+
+ topLevelClass.addJavaDocLine(" * @author " + author);
+ topLevelClass.addJavaDocLine(" * @date " + DateUtil.date2Str(new Date()));
+ topLevelClass.addJavaDocLine(" */");
+ FullyQualifiedJavaType serializable = new
FullyQualifiedJavaType("java.io.Serializable");
+
+ topLevelClass.addImportedType(serializable);
+ topLevelClass.addSuperInterface(serializable);
+
+ final FullyQualifiedJavaType qualifiedJavaType = new
FullyQualifiedJavaType("long");
+ Field serialVersionUID = new Field("serialVersionUID", qualifiedJavaType);
+ serialVersionUID.setVisibility(JavaVisibility.PRIVATE);
+ serialVersionUID.setStatic(true);
+ serialVersionUID.setFinal(true);
+ serialVersionUID.setName("serialVersionUID");
+ serialVersionUID.setType(qualifiedJavaType);
+ serialVersionUID.setInitializationString("1L");
+ sb = new StringBuilder();
+ sb.append("/**\n ");
+ sb.append(" * class serial version id\n ");
+ sb.append(" */");
+ serialVersionUID.addJavaDocLine(sb.toString());
+
+ topLevelClass.addField(serialVersionUID);
+ }
+
+ @Override
+ public void addFieldComment(
+ Field field, IntrospectedTable introspectedTable, IntrospectedColumn
introspectedColumn) {
+ StringBuffer sb = new StringBuffer();
+
+ sb.append("/**\n ");
+ sb.append(" * field: ");
+ sb.append(introspectedColumn.getActualColumnName());
+
+ String remarks = introspectedColumn.getRemarks();
+ if (StringUtility.stringHasValue(remarks)) {
+ sb.append(",");
+ sb.append(remarks);
+ }
+
+ sb.append("\n */");
+ field.addJavaDocLine(sb.toString());
+ }
+}
diff --git
a/mybatis-generator/src/main/java/org/apache/iotdb/mybatis/plugin/generator/SwaggerCommentGenerator.java
b/mybatis-generator/src/main/java/org/apache/iotdb/mybatis/plugin/generator/SwaggerCommentGenerator.java
new file mode 100644
index 0000000..09a9c78
--- /dev/null
+++
b/mybatis-generator/src/main/java/org/apache/iotdb/mybatis/plugin/generator/SwaggerCommentGenerator.java
@@ -0,0 +1,150 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.iotdb.mybatis.plugin.generator;
+
+import org.apache.iotdb.mybatis.plugin.util.DateUtil;
+
+import org.mybatis.generator.api.IntrospectedColumn;
+import org.mybatis.generator.api.IntrospectedTable;
+import org.mybatis.generator.api.dom.java.CompilationUnit;
+import org.mybatis.generator.api.dom.java.Field;
+import org.mybatis.generator.api.dom.java.FullyQualifiedJavaType;
+import org.mybatis.generator.api.dom.java.JavaVisibility;
+import org.mybatis.generator.api.dom.java.TopLevelClass;
+import org.mybatis.generator.internal.DefaultCommentGenerator;
+import org.mybatis.generator.internal.util.StringUtility;
+
+import java.util.Date;
+import java.util.Properties;
+
+public class SwaggerCommentGenerator extends DefaultCommentGenerator {
+ private Properties properties;
+ private boolean addRemarkComments = false;
+ private static final String API_MODEL_FULL_CLASS_NAME =
+ "io.swagger.v3.oas.annotations.media.Schema";
+
+ @Override
+ public void addConfigurationProperties(Properties properties) {
+ super.addConfigurationProperties(properties);
+ this.addRemarkComments =
StringUtility.isTrue(properties.getProperty("addRemarkComments"));
+ this.properties = new Properties();
+ this.properties.putAll(properties);
+ }
+
+ @Override
+ public void addFieldComment(
+ Field field, IntrospectedTable introspectedTable, IntrospectedColumn
introspectedColumn) {
+ String remarks = introspectedColumn.getRemarks();
+ if (addRemarkComments && StringUtility.stringHasValue(remarks)) {
+ addFieldJavaDoc(field, introspectedColumn);
+ if (remarks.contains("\"")) {
+ remarks = remarks.replace("\"", "'");
+ }
+ field.addJavaDocLine("@Schema(title = \"" + remarks + "\")");
+ }
+ }
+
+ private void addFieldJavaDoc(Field field, IntrospectedColumn
introspectedColumn) {
+
+ StringBuffer sb = new StringBuffer();
+ sb.append("/**\n ");
+ sb.append(" * field: ");
+ sb.append(introspectedColumn.getActualColumnName());
+ String remarks = introspectedColumn.getRemarks();
+ if (StringUtility.stringHasValue(remarks)) {
+ sb.append(",");
+ sb.append(remarks);
+ }
+
+ sb.append("\n */");
+ field.addJavaDocLine(sb.toString());
+ }
+
+ @Override
+ public void addModelClassComment(
+ TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
+ StringBuilder sb = new StringBuilder();
+
+ topLevelClass.addJavaDocLine("/**");
+ topLevelClass.addJavaDocLine(" *");
+
+ String remarks = introspectedTable.getRemarks();
+ if (StringUtility.stringHasValue(remarks)) {
+ String[] remarkLines =
remarks.split(System.getProperty("line.separator"));
+ for (String remarkLine : remarkLines) {
+ topLevelClass.addJavaDocLine(" * " + remarkLine);
+ }
+ sb.append(" * ");
+ }
+
+ sb.append("table: ");
+ sb.append(introspectedTable.getFullyQualifiedTable());
+ sb.append(" of model class");
+ topLevelClass.addJavaDocLine(sb.toString());
+ topLevelClass.addJavaDocLine(" *");
+
+ String author = "IoTDB";
+ if (properties.containsKey("author")) {
+ author = properties.getProperty("author");
+ }
+
+ topLevelClass.addJavaDocLine(" * @author " + author);
+ topLevelClass.addJavaDocLine(" * @date " + DateUtil.date2Str(new Date()));
+ topLevelClass.addJavaDocLine(" */");
+ FullyQualifiedJavaType serializable = new
FullyQualifiedJavaType("java.io.Serializable");
+
+ topLevelClass.addImportedType(serializable);
+ topLevelClass.addSuperInterface(serializable);
+
+ final FullyQualifiedJavaType fullyQualifiedJavaType = new
FullyQualifiedJavaType("long");
+ Field serialVersionUID = new Field("serialVersionUID",
fullyQualifiedJavaType);
+ serialVersionUID.setVisibility(JavaVisibility.PRIVATE);
+ serialVersionUID.setStatic(true);
+ serialVersionUID.setFinal(true);
+ serialVersionUID.setName("serialVersionUID");
+ serialVersionUID.setType(fullyQualifiedJavaType);
+ serialVersionUID.setInitializationString("1L");
+ sb = new StringBuilder();
+ sb.append("/**\n ");
+ sb.append(" * class serial version id\n ");
+ sb.append(" */");
+ serialVersionUID.addJavaDocLine(sb.toString());
+
+ topLevelClass.addField(serialVersionUID);
+ topLevelClass.addImportedType(API_MODEL_FULL_CLASS_NAME);
+ topLevelClass.addAnnotation(
+ "@Schema(title = \""
+ + introspectedTable.getFullyQualifiedTable()
+ + "\", description = \""
+ + remarks
+ + "\")");
+ }
+
+ @Override
+ public void addJavaFileComment(CompilationUnit compilationUnit) {
+ compilationUnit.addFileCommentLine("/**");
+
+ String copyright = " * Copyright From 2025, IoTDB.";
+ compilationUnit.addFileCommentLine(copyright);
+
+ compilationUnit.addFileCommentLine(" * ");
+ compilationUnit.addFileCommentLine(
+ " * " + compilationUnit.getType().getShortNameWithoutTypeArguments() +
".java");
+ compilationUnit.addFileCommentLine(" */");
+ }
+}
diff --git
a/mybatis-generator/src/main/java/org/apache/iotdb/mybatis/plugin/generator/resolver/IoTDBJavaTypeResolver.java
b/mybatis-generator/src/main/java/org/apache/iotdb/mybatis/plugin/generator/resolver/IoTDBJavaTypeResolver.java
new file mode 100644
index 0000000..3aefc81
--- /dev/null
+++
b/mybatis-generator/src/main/java/org/apache/iotdb/mybatis/plugin/generator/resolver/IoTDBJavaTypeResolver.java
@@ -0,0 +1,98 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.iotdb.mybatis.plugin.generator.resolver;
+
+import org.mybatis.generator.api.IntrospectedColumn;
+import org.mybatis.generator.api.dom.java.FullyQualifiedJavaType;
+import org.mybatis.generator.internal.types.JavaTypeResolverDefaultImpl;
+
+import java.sql.Types;
+import java.util.HashMap;
+import java.util.Map;
+
+public class IoTDBJavaTypeResolver extends JavaTypeResolverDefaultImpl {
+ protected Map<String, Integer> typeExtMap;
+
+ public IoTDBJavaTypeResolver() {
+ super();
+ typeExtMap = new HashMap<>();
+ initTypeSet();
+ }
+
+ @Override
+ public FullyQualifiedJavaType calculateJavaType(IntrospectedColumn
introspectedColumn) {
+
+ for (String jdbcType : typeExtMap.keySet()) {
+
+ String value = properties.getProperty(jdbcType);
+
+ if (hasText(value)) {
+ typeMap.put(
+ typeExtMap.get(jdbcType),
+ new JdbcTypeInformation(
+ jdbcType.substring(jdbcType.indexOf(".") + 1), new
FullyQualifiedJavaType(value)));
+ }
+ }
+
+ return super.calculateJavaType(introspectedColumn);
+ }
+
+ private void initTypeSet() {
+ typeExtMap.put("jdbcType.ARRAY", Types.ARRAY);
+ typeExtMap.put("jdbcType.BIGINT", Types.BIGINT);
+ typeExtMap.put("jdbcType.BINARY", Types.BINARY);
+ typeExtMap.put("jdbcType.BIT", Types.BIT);
+ typeExtMap.put("jdbcType.BLOB", Types.BLOB);
+ typeExtMap.put("jdbcType.BOOLEAN", Types.BOOLEAN);
+ typeExtMap.put("jdbcType.CHAR", Types.CHAR);
+ typeExtMap.put("jdbcType.CLOB", Types.CLOB);
+ typeExtMap.put("jdbcType.DATALINK", Types.DATALINK);
+ typeExtMap.put("jdbcType.DATE", Types.DATE);
+ typeExtMap.put("jdbcType.DECIMAL", Types.DECIMAL);
+ typeExtMap.put("jdbcType.DISTINCT", Types.DISTINCT);
+ typeExtMap.put("jdbcType.DOUBLE", Types.DOUBLE);
+ typeExtMap.put("jdbcType.FLOAT", Types.FLOAT);
+ typeExtMap.put("jdbcType.INTEGER", Types.INTEGER);
+ typeExtMap.put("jdbcType.JAVA_OBJECT", Types.JAVA_OBJECT);
+ typeExtMap.put("jdbcType.LONGNVARCHAR", Types.LONGNVARCHAR);
+ typeExtMap.put("jdbcType.LONGVARBINARY", Types.LONGVARBINARY);
+ typeExtMap.put("jdbcType.LONGVARCHAR", Types.LONGVARCHAR);
+ typeExtMap.put("jdbcType.NCHAR", Types.NCHAR);
+ typeExtMap.put("jdbcType.NCLOB", Types.NCLOB);
+ typeExtMap.put("jdbcType.NVARCHAR", Types.NVARCHAR);
+ typeExtMap.put("jdbcType.NULL", Types.NULL);
+ typeExtMap.put("jdbcType.NUMERIC", Types.NUMERIC);
+ typeExtMap.put("jdbcType.OTHER", Types.OTHER);
+ typeExtMap.put("jdbcType.REAL", Types.REAL);
+ typeExtMap.put("jdbcType.REF", Types.REF);
+ typeExtMap.put("jdbcType.SMALLINT", Types.SMALLINT);
+ typeExtMap.put("jdbcType.STRUCT", Types.STRUCT);
+ typeExtMap.put("jdbcType.TIME", Types.TIME);
+ typeExtMap.put("jdbcType.TIMESTAMP", Types.TIMESTAMP);
+ typeExtMap.put("jdbcType.TINYINT", Types.TINYINT);
+ typeExtMap.put("jdbcType.VARBINARY", Types.VARBINARY);
+ typeExtMap.put("jdbcType.VARCHAR", Types.VARCHAR);
+ }
+
+ public static boolean hasText(String text) {
+ if (text != null && text.trim().length() > 0) {
+ return true;
+ }
+ return false;
+ }
+}
diff --git
a/mybatis-generator/src/main/java/org/apache/iotdb/mybatis/plugin/generator/resolver/JavaTypeResolverSelfImpl.java
b/mybatis-generator/src/main/java/org/apache/iotdb/mybatis/plugin/generator/resolver/JavaTypeResolverSelfImpl.java
new file mode 100644
index 0000000..ed841ff
--- /dev/null
+++
b/mybatis-generator/src/main/java/org/apache/iotdb/mybatis/plugin/generator/resolver/JavaTypeResolverSelfImpl.java
@@ -0,0 +1,57 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.iotdb.mybatis.plugin.generator.resolver;
+
+import org.mybatis.generator.api.IntrospectedColumn;
+import org.mybatis.generator.internal.types.JavaTypeResolverDefaultImpl;
+
+import java.sql.Types;
+
+public class JavaTypeResolverSelfImpl extends JavaTypeResolverDefaultImpl {
+
+ @Override
+ public String calculateJdbcTypeName(IntrospectedColumn introspectedColumn) {
+ String answer;
+ JdbcTypeInformation jdbcTypeInformation =
typeMap.get(introspectedColumn.getJdbcType());
+
+ if (jdbcTypeInformation == null) {
+ switch (introspectedColumn.getJdbcType()) {
+ case Types.DECIMAL:
+ answer = "DECIMAL";
+ break;
+ case Types.NUMERIC:
+ answer = "NUMERIC";
+ break;
+ case Types.DATE:
+ answer = "TIMESTAMP";
+ break;
+ default:
+ answer = null;
+ break;
+ }
+ } else {
+ if ("DATE".equals(jdbcTypeInformation.getJdbcTypeName())) {
+ answer = "TIMESTAMP";
+ } else {
+ answer = jdbcTypeInformation.getJdbcTypeName();
+ }
+ }
+
+ return answer;
+ }
+}
diff --git
a/mybatis-generator/src/main/java/org/apache/iotdb/mybatis/plugin/util/DateUtil.java
b/mybatis-generator/src/main/java/org/apache/iotdb/mybatis/plugin/util/DateUtil.java
new file mode 100644
index 0000000..327a919
--- /dev/null
+++
b/mybatis-generator/src/main/java/org/apache/iotdb/mybatis/plugin/util/DateUtil.java
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.iotdb.mybatis.plugin.util;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+public class DateUtil {
+
+ public static String date2Str(Date date) {
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ return sdf.format(date);
+ }
+}
diff --git a/mybatis-generator/src/main/resources/generatorConfig.xml
b/mybatis-generator/src/main/resources/generatorConfig.xml
new file mode 100644
index 0000000..67d17f1
--- /dev/null
+++ b/mybatis-generator/src/main/resources/generatorConfig.xml
@@ -0,0 +1,58 @@
+<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE generatorConfiguration PUBLIC
"-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
+
+<!--
+
+ Licensed to the Apache Software Foundation (ASF) under one or more
+
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+
+ (the "License"); you may not use this file except in compliance with
+
+ the License. You may obtain a copy of the License at
+ http://www.apache.org/licenses/LICENSE-2.0
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+
+-->
+<generatorConfiguration>
+ <classPathEntry
location="/apache/iotdb/iotdb-client/jdbc/target/iotdb-jdbc-2.0.2-SNAPSHOT-jar-with-dependencies.jar"/>
+ <!-- mvn mybatis-generator:generate hierarchical/flat-->
+ <context id="myBatis3Simple" targetRuntime="MyBatis3Simple"
defaultModelType="flat">
+ <!-- <property name="suppressAllComments" value="true"/>-->
+ <!-- <property name="useActualColumnNames" value="false"/>-->
+ <!-- <property name="javaFormatter"
value="org.mybatis.generator.api.dom.DefaultJavaFormatter"/>-->
+ <!-- <property name="xmlFormatter"
value="org.mybatis.generator.api.dom.DefaultXmlFormatter"/>-->
+ <plugin type="org.apache.iotdb.mybatis.plugin.LombokPlugin"/>
+ <plugin type="org.apache.iotdb.mybatis.plugin.BatchInsertPlugin"/>
+ <plugin type="org.apache.iotdb.mybatis.plugin.SerializablePlugin"/>
+ <plugin type="org.mybatis.generator.plugins.VirtualPrimaryKeyPlugin"/>
+ <!-- <commentGenerator
type="generator.org.apache.iotdb.mybatis.plugin.CNCommentGenerator">-->
+ <!-- <property name="suppressAllComments" value="true"/>-->
+ <!-- </commentGenerator>-->
+ <commentGenerator
type="org.apache.iotdb.mybatis.plugin.generator.SwaggerCommentGenerator">
+ <property name="suppressAllComments" value="true"/>
+ <property name="suppressDate" value="true"/>
+ <property name="addRemarkComments" value="true"/>
+ </commentGenerator>
+ <jdbcConnection driverClass="org.apache.iotdb.jdbc.IoTDBDriver"
connectionURL="jdbc:iotdb://127.0.0.1:6667/test?sql_dialect=table"
userId="root" password="root"/>
+ <javaTypeResolver
type="org.apache.iotdb.mybatis.plugin.generator.resolver.IoTDBJavaTypeResolver">
+ <property name="forceBigDecimals" value="false"/>
+ </javaTypeResolver>
+ <javaModelGenerator
targetPackage="org.apache.iotdb.mybatis.plugin.model" targetProject="iotdb">
+ <property name="enableSubPackages" value="true"/>
+ <property name="trimStrings" value="true"/>
+ </javaModelGenerator>
+ <sqlMapGenerator targetPackage="org.apache.iotdb.mybatis.plugin.xml"
targetProject="iotdb">
+ <property name="enableSubPackages" value="true"/>
+ </sqlMapGenerator>
+ <javaClientGenerator type="XMLMAPPER"
targetPackage="org.apache.iotdb.mybatis.plugin.mapper" targetProject="iotdb">
+ <property name="enableSubPackages" value="true"/>
+ </javaClientGenerator>
+ <table schema="test" tableName="mix" domainObjectName="Mix"
enableSelectByPrimaryKey="true" enableInsert="true"
enableDeleteByPrimaryKey="true">
+ <property name="virtualKeyColumns"
value="time,device_id,device_name,device_tag"/>
+ </table>
+ </context>
+</generatorConfiguration>
diff --git a/pom.xml b/pom.xml
index 4423708..e19571c 100644
--- a/pom.xml
+++ b/pom.xml
@@ -37,6 +37,7 @@
<module>distributions</module>
<module>examples</module>
<module>iotdb-collector</module>
+ <module>mybatis-generator</module>
</modules>
<properties>
<!-- Explicitly set a variable used by all dependencies to the IoTDB
dependencies, as the release plugin will not update these on a release -->