1、添加依赖
<!-- TDengine -->
<dependency>
<groupId>com.taosdata.jdbc</groupId>
<artifactId>taos-jdbcdriver</artifactId>
<version>3.8.1</version>
</dependency>
<!-- Druid 连接池 (可选,但推荐) -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.27</version>
</dependency>
2、修改配置文件
server:
port: 9201
# Spring
spring:
application:
# 应用名称
name: demo-boot
profiles:
# 环境配置
active: dev
datasource:
# 使用Druid连接池
type: com.alibaba.druid.pool.DruidDataSource
# TDengine的JDBC驱动类名
driver-class-name: com.taosdata.jdbc.ws.WebSocketDriver
# JDBC URL: jdbc:TAOS://{host}:{port}/{database_name}
url: jdbc:TAOS-WS://192.168.80.192:6041/demo?charset=UTF-8&locale=en_US.UTF-8&timezone=UTC-8
username: root
password: taosdata
# Druid连接池配置示例
druid:
initial-size: 5
min-idle: 5
max-active: 10
max-wait: 30000
# 验证连接是否有效的SQL (TDengine特定)
validation-query: select server_status()
test-while-idle: true
test-on-borrow: false
test-on-return: false
#配置json时间格式
jackson:
date-format: yyyy-MM-dd HH:mm:ss
time-zone: GMT+8
# MyBatis配置
mybatis:
# mapper XML文件的位置
mapper-locations: classpath:mapper/*.xml
# 实体类所在的包
type-aliases-package: com.shenmazong.entity
configuration:
# 开启驼峰命名自动转换
map-underscore-to-camel-case: true
# 日志 (方便调试SQL)
logging:
level:
com.shenmazong.mapper: debug
3、编写mapper
(1)mapper接口
package com.shenmazong.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.shenmazong.entity.VehiclePosition;
import org.apache.ibatis.annotations.Mapper;
import java.sql.Timestamp;
import java.util.List;
/**
* @author 军哥
* @version 1.0
* @description: TODO
* @date 2026/3/3 11:31
*/
@Mapper
public interface VehiclePositionMapper extends BaseMapper<VehiclePosition> {
int insertVehiclePosition(VehiclePosition record);
List<VehiclePosition> selectAllByVin(String vin, String beginTime, String endTime);
List<VehiclePosition> selectAllByImei(String imei, String beginTime, String endTime);
}
(2)mapper的xml文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.shenmazong.mapper.VehiclePositionMapper">
<insert id="insertVehiclePosition" parameterType="com.shenmazong.entity.VehiclePosition">
INSERT INTO demo.#{vin}
USING demo.vihicle_location
TAGS (
#{vin},
#{imei}
) VALUES (
NOW,
#{lon},
#{lat},
#{speed},
#{direction},
#{altitude}
);
</insert>
<select id="selectAllByVin" resultType="com.shenmazong.entity.VehiclePosition">
select * from demo.vihicle_location where vin=#{vin} and ts between #{beginTime} and #{endTime} order by ts
</select>
<select id="selectAllByImei" resultType="com.shenmazong.entity.VehiclePosition">
select * from demo.vihicle_location where imei= #{imei} and ts between #{beginTime} and #{endTime} order by ts
</select>
</mapper>
4、编写service
(1)service接口
package com.shenmazong.service;
import com.shenmazong.entity.VehiclePosition;
import java.sql.Timestamp;
import java.util.List;
/**
* @author 军哥
* @version 1.0
* @description: TODO
* @date 2026/3/3 11:25
*/
public interface IVehiclePositionService {
int insertVehiclePosition(VehiclePosition record);
List<VehiclePosition> selectAllByVin(String vin, String beginTime, String endTime);
List<VehiclePosition> selectAllByImei(String imei, String beginTime, String endTime);
}
(2)service实现类
package com.shenmazong.service.impl;
import com.shenmazong.entity.VehiclePosition;
import com.shenmazong.mapper.VehiclePositionMapper;
import com.shenmazong.service.IVehiclePositionService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.sql.Timestamp;
import java.util.List;
/**
* @author 军哥
* @version 1.0
* @description: TODO
* @date 2026/3/3 11:25
*/
@Service
public class VehiclePositionServiceImpl implements IVehiclePositionService {
@Autowired
VehiclePositionMapper vehiclePositionMapper;
@Override
public int insertVehiclePosition(VehiclePosition record) {
return vehiclePositionMapper.insertVehiclePosition(record);
}
@Override
public List<VehiclePosition> selectAllByVin(String vin, String beginTime, String endTime) {
List<VehiclePosition> vehiclePositions = vehiclePositionMapper.selectAllByVin(vin, beginTime, endTime);
return vehiclePositions;
}
@Override
public List<VehiclePosition> selectAllByImei(String imei, String beginTime, String endTime) {
List<VehiclePosition> vehiclePositions = vehiclePositionMapper.selectAllByImei(imei, beginTime, endTime);
return vehiclePositions;
}
}
5、编写controller
package com.shenmazong.controller;
import com.shenmazong.entity.VehiclePosition;
import com.shenmazong.service.IVehiclePositionService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.sql.Timestamp;
import java.util.Date;
import java.util.List;
/**
* @author 军哥
* @version 1.0
* @description: TODO
* @date 2026/3/4 10:50
*/
@RestController
@Slf4j
@RequestMapping("/boot")
public class BootController {
@Autowired
IVehiclePositionService vehiclePositionService;
@PostMapping("/add")
public Object add(@RequestBody VehiclePosition vehiclePosition) {
long time = new Date().getTime();
vehiclePosition.setTs(new Timestamp(time));
int i = vehiclePositionService.insertVehiclePosition(vehiclePosition);
return i > 0 ? "添加成功" : "添加失败";
}
@PostMapping(("/queryByVin"))
public Object queryByVin(@RequestParam("vin") String vin, @RequestParam("beginTime") String beginTime, @RequestParam("endTime") String endTime) {
List<VehiclePosition> vehiclePositions = vehiclePositionService.selectAllByVin(vin, beginTime, endTime);
return vehiclePositions;
}
@PostMapping(("/queryByImei"))
public Object queryByImei(@RequestParam("imei") String imei, @RequestParam("beginTime") String beginTime, @RequestParam("endTime") String endTime) {
List<VehiclePosition> vehiclePositions = vehiclePositionService.selectAllByImei(imei, beginTime, endTime);
return vehiclePositions;
}
}
6、操作效果
(1) 时序数据的添加接口

(2)根据标签和时间区间查询

