diff --git a/docs/en/07-develop/01-connect.md b/docs/en/07-develop/01-connect.md
index a1fd6136fe..4086f15193 100644
--- a/docs/en/07-develop/01-connect.md
+++ b/docs/en/07-develop/01-connect.md
@@ -94,7 +94,7 @@ If you are using Maven to manage the project, simply add the following dependenc
com.taosdata.jdbc
taos-jdbcdriver
- 3.3.3
+ 3.4.0
```
diff --git a/docs/en/14-reference/05-connector/14-java.mdx b/docs/en/14-reference/05-connector/14-java.mdx
index 7302348f2e..29f919b5cf 100644
--- a/docs/en/14-reference/05-connector/14-java.mdx
+++ b/docs/en/14-reference/05-connector/14-java.mdx
@@ -35,6 +35,8 @@ REST connections are supported on all platforms that can run Java.
| taos-jdbcdriver Version | Major Changes | TDengine Version |
| :----------------------: | :-------------------------------------------------------------------------------------------------------------------------------------------------------: | :-------------------: |
+| 3.4.0 | 1. Replace the fastjson library with the Jackson library; 2. WebSocket connection protocal uses independent identification; 3. Optimize the use of backend pull threads to avoid user misuse leading to timeouts.| - |
+| 3.3.4 | 1. Fixed getInt error when data type is float| - |
| 3.3.3 | 1. Fixed memory leak caused by closing WebSocket statement | - |
| 3.3.2 | 1. Optimized parameter binding performance under WebSocket connections; 2. Improved support for MyBatis | - |
| 3.3.0 | 1. Optimized data transmission performance under WebSocket connections; 2. Supported skipping SSL verification, turned off by default | 3.3.2.0 and above |
diff --git a/docs/examples/JDBC/mybatisplus-demo/pom.xml b/docs/examples/JDBC/mybatisplus-demo/pom.xml
index f792946c96..2077e31d8d 100644
--- a/docs/examples/JDBC/mybatisplus-demo/pom.xml
+++ b/docs/examples/JDBC/mybatisplus-demo/pom.xml
@@ -47,7 +47,7 @@
com.taosdata.jdbc
taos-jdbcdriver
- 3.2.4
+ 3.4.0
diff --git a/docs/examples/JDBC/mybatisplus-demo/src/main/java/com/taosdata/example/mybatisplusdemo/domain/Meters.java b/docs/examples/JDBC/mybatisplus-demo/src/main/java/com/taosdata/example/mybatisplusdemo/domain/Meters.java
new file mode 100644
index 0000000000..e886e56269
--- /dev/null
+++ b/docs/examples/JDBC/mybatisplus-demo/src/main/java/com/taosdata/example/mybatisplusdemo/domain/Meters.java
@@ -0,0 +1,16 @@
+package com.taosdata.example.mybatisplusdemo.domain;
+
+import lombok.Data;
+
+import java.sql.Timestamp;
+
+@Data
+public class Meters {
+ private String tbname;
+ private Timestamp ts;
+ private float current;
+ private int voltage;
+ private float phase;
+ private int groupid;
+ private byte[] location;
+}
diff --git a/docs/examples/JDBC/mybatisplus-demo/src/main/java/com/taosdata/example/mybatisplusdemo/mapper/MetersMapper.java b/docs/examples/JDBC/mybatisplus-demo/src/main/java/com/taosdata/example/mybatisplusdemo/mapper/MetersMapper.java
new file mode 100644
index 0000000000..441c340886
--- /dev/null
+++ b/docs/examples/JDBC/mybatisplus-demo/src/main/java/com/taosdata/example/mybatisplusdemo/mapper/MetersMapper.java
@@ -0,0 +1,31 @@
+package com.taosdata.example.mybatisplusdemo.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.taosdata.example.mybatisplusdemo.domain.Meters;
+import org.apache.ibatis.annotations.Insert;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Update;
+
+import java.util.List;
+
+public interface MetersMapper extends BaseMapper {
+
+ @Update("CREATE STABLE IF NOT EXISTS meters (ts TIMESTAMP, current FLOAT, voltage INT, phase FLOAT) TAGS (groupId INT, location BINARY(24))")
+ int createTable();
+
+ @Insert("insert into meters (tbname, ts, groupid, location, current, voltage, phase) values(#{tbname}, #{ts}, #{groupid}, #{location}, #{current}, #{voltage}, #{phase})")
+ int insertOne(Meters one);
+
+ @Insert({
+ ""
+ })
+ int insertBatch(@Param("list") List metersList);
+
+ @Update("drop stable if exists meters")
+ void dropTable();
+}
diff --git a/docs/examples/JDBC/mybatisplus-demo/src/main/resources/application.yml b/docs/examples/JDBC/mybatisplus-demo/src/main/resources/application.yml
index 985ed1675e..e9855bf011 100644
--- a/docs/examples/JDBC/mybatisplus-demo/src/main/resources/application.yml
+++ b/docs/examples/JDBC/mybatisplus-demo/src/main/resources/application.yml
@@ -1,7 +1,7 @@
spring:
datasource:
- driver-class-name: com.taosdata.jdbc.TSDBDriver
- url: jdbc:TAOS://localhost:6030/mp_test?charset=UTF-8&locale=en_US.UTF-8&timezone=UTC-8
+ driver-class-name: com.taosdata.jdbc.ws.WebSocketDriver
+ url: jdbc:TAOS-WS://localhost:6041/mp_test?charset=UTF-8&locale=en_US.UTF-8&timezone=UTC-8
username: root
password: taosdata
diff --git a/docs/examples/JDBC/mybatisplus-demo/src/test/java/com/taosdata/example/mybatisplusdemo/mapper/MetersMapperTest.java b/docs/examples/JDBC/mybatisplus-demo/src/test/java/com/taosdata/example/mybatisplusdemo/mapper/MetersMapperTest.java
new file mode 100644
index 0000000000..2d8458e9d9
--- /dev/null
+++ b/docs/examples/JDBC/mybatisplus-demo/src/test/java/com/taosdata/example/mybatisplusdemo/mapper/MetersMapperTest.java
@@ -0,0 +1,112 @@
+package com.taosdata.example.mybatisplusdemo.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.taosdata.example.mybatisplusdemo.domain.Meters;
+import com.taosdata.example.mybatisplusdemo.domain.Weather;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+
+import java.sql.Timestamp;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Random;
+
+@RunWith(SpringJUnit4ClassRunner.class)
+@SpringBootTest
+public class MetersMapperTest {
+
+ private static Random random = new Random(System.currentTimeMillis());
+
+ @Autowired
+ private MetersMapper mapper;
+
+ @Before
+ public void createTable(){
+ mapper.dropTable();
+ mapper.createTable();
+ Meters one = new Meters();
+ one.setTbname("test_10001");
+ one.setGroupid(10001);
+ one.setCurrent(random.nextFloat());
+ one.setPhase(random.nextFloat());
+ one.setCurrent(12345);
+ one.setTs(new Timestamp(1605024000000l));
+ one.setLocation("望京".getBytes());
+ mapper.insertOne(one);
+ }
+
+ @Test
+ public void testSelectList() {
+ List meters = mapper.selectList(null);
+ meters.forEach(System.out::println);
+ }
+
+ @Test
+ public void testInsertBatch() {
+ List metersList = new LinkedList<>();
+ for (int i = 0; i < 100; i++){
+ Meters one = new Meters();
+ one.setTbname("tb_" + i);
+ one.setGroupid(i);
+ one.setCurrent(random.nextFloat());
+ one.setPhase(random.nextFloat());
+ one.setCurrent(random.nextInt());
+ one.setTs(new Timestamp(1605024000000l + i));
+ one.setLocation(("望京" + i).getBytes());
+ metersList.add(one);
+
+ }
+ int affectRows = mapper.insertBatch(metersList);
+ Assert.assertEquals(100, affectRows);
+ }
+
+ @Test
+ public void testSelectOne() {
+ QueryWrapper wrapper = new QueryWrapper<>();
+ wrapper.eq("location", "望京".getBytes());
+ Meters one = mapper.selectOne(wrapper);
+ System.out.println(one);
+ Assert.assertEquals(12345, one.getCurrent(), 0.00f);
+ Assert.assertArrayEquals("望京".getBytes(), one.getLocation());
+ }
+
+ // @Test
+ // public void testSelectByMap() {
+ // Map map = new HashMap<>();
+ // map.put("location", "beijing");
+ // List weathers = mapper.selectByMap(map);
+ // Assert.assertEquals(1, weathers.size());
+ // }
+
+ @Test
+ public void testSelectObjs() {
+ List