TDengine 入门教程⑨——基于SpringBoot 框架和Druid 连接池的TDengine Demo示例

一、前文

TDengine 入门教程——导读

二、JDBC Demo下载

TDengine 官方提供的示例程序源码位于TDengine / TDengineTDengine/examples/JDBC下:

  • JDBCDemo:JDBC 最简单的demo。
  • connectionPools:HikariCP, Druid, dbcp, c3p0 等连接池中使用 taos-jdbcdriver。
  • SpringJdbcTemplate:Spring JdbcTemplate 中使用 taos-jdbcdriver。
  • mybatisplus-demo:Mybatis 中使用 taos-jdbcdriver。
  • springbootdemo:Springboot 中使用 taos-jdbcdriver。

三、最简单的Demo 浅析

  • pom.xml添加依赖
    <dependencies>
        <dependency>
            <groupId>com.taosdata.jdbc</groupId>
            <artifactId>taos-jdbcdriver</artifactId>
            <version>3.0.0</version>
        </dependency>
    </dependencies>
  • 通过urlproperties连接数据库
  • 执行SQL语句
    • drop database if exists test:如果test数据库存在,则删除test数据库
    • create database if not exists test:如果test数据库不存在,则新建test数据库
    • use test:切换到test数据库
    • create table test.weather(ts timestamp, temperature float) tags(location nchar(64)):创建weather表
    • insert into t2 using test.weather tags('厦门') values(now, 17.2):往t2子表插入数据
    • select * from t2:查询t2子表
  • 关闭连接
public class JdbcRestfulDemo {
    private static final String host = "localhost";
    private static final String dbname = "test";
    private static final String user = "root";
    private static final String password = "taosdata";

    public static void main(String[] args) {
        try {
            String url = "jdbc:TAOS-RS://" + host + ":6041/?user=" + user + "&password=" + password;

            Properties properties = new Properties();
            properties.setProperty("charset", "UTF-8");
            properties.setProperty("locale", "en_US.UTF-8");
            properties.setProperty("timezone", "UTC-8");

            Connection conn = DriverManager.getConnection(url, properties);
            Statement stmt = conn.createStatement();

            stmt.execute("drop database if exists " + dbname);
            stmt.execute("create database if not exists " + dbname);
            stmt.execute("use " + dbname);
            stmt.execute("create table " + dbname + ".weather(ts timestamp, temperature float) tags(location nchar(64))");
            stmt.executeUpdate("insert into t2 using " + dbname + ".weather tags('厦门') values(now, 17.2)");
//            ResultSet rs = stmt.executeQuery("select * from " + dbname + ".weather");
//            ResultSet rs = stmt.executeQuery("select temperature,location from t2");
            ResultSet rs = stmt.executeQuery("select * from t2");
            ResultSetMetaData meta = rs.getMetaData();
            while (rs.next()) {
                for (int i = 1; i <= meta.getColumnCount(); i++) {
                    System.out.print(meta.getColumnLabel(i) + ": " + rs.getString(i) + "\t");
                }
                System.out.println();
            }

            rs.close();
            stmt.close();
            conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}
  • IDEA启动配置
    在这里插入图片描述
  • 打印输出
    在这里插入图片描述

五、数据库连接池

最简单的JDBC demo已经能实现基本功能,但是细节上并不完善。

因为其每次执行数据库读写,都需要打开和关闭数据库连接。一旦短时间内有成千上万请求,就会:

  • 浪费大量的网络时间;
  • 大量的数据库连接,加重数据库的负载;
  • 临时对象较多,内存无法及时释放,不必要的系统开销;

所以,常见的数据库操作通常都会用到数据库连接池,常见的数据库连接池有哪些:

  • proxool:性能不错,稳定性稍差,并发较高的情况下会出错;
  • dbcp:apache上的一个 java 连接池项目,也是 tomcat 使用的连接池组件;
  • druid:alibba出品,功能比较全面,且扩展性较好的数据库连接池,比较方便对jdbc接口进行监控跟踪等;
  • HikariCP:性能强劲,稳定性也不差。目前被SpringBoot2官方推荐使用的数据库连接池;

就性能而言,HikariCP最强,但是我们选择druid,因为druid最为全面,没有短板。

四、基于SpringBoot的Demo浅析

除了需要Druid连接池之外,我们还需要Mybatis持久层框架。

4.1 pom依赖

       <dependency>
           <groupId>org.mybatis.spring.boot</groupId>
           <artifactId>mybatis-spring-boot-starter</artifactId>
           <version>2.1.1</version>
       </dependency>
       <dependency>
           <groupId>com.taosdata.jdbc</groupId>
           <artifactId>taos-jdbcdriver</artifactId>
           <version>3.0.0</version>
       </dependency>
       <dependency>
           <groupId>com.alibaba</groupId>
           <artifactId>druid-spring-boot-starter</artifactId>
           <version>1.1.17</version>
       </dependency>

4.2 properties配置

# datasource config
spring.datasource.driver-class-name=com.taosdata.jdbc.TSDBDriver
spring.datasource.url=jdbc:TAOS://127.0.0.1:6030/test
spring.datasource.username=root
spring.datasource.password=taosdata

spring.datasource.druid.initial-size=5
spring.datasource.druid.min-idle=5
spring.datasource.druid.max-active=5
# max wait time for get connection, ms
spring.datasource.druid.max-wait=60000

spring.datasource.druid.validation-query=select server_status();
spring.datasource.druid.validation-query-timeout=5000
spring.datasource.druid.test-on-borrow=false
spring.datasource.druid.test-on-return=false
spring.datasource.druid.test-while-idle=true
spring.datasource.druid.time-between-eviction-runs-millis=60000
spring.datasource.druid.min-evictable-idle-time-millis=600000
spring.datasource.druid.max-evictable-idle-time-millis=900000

# mybatis
mybatis.mapper-locations=classpath:mapper/*.xml

# log 
logging.level.com.taosdata.jdbc.springbootdemo.dao=debug

4.3 框架浅析

  • Controller控制层,负责请求和响应控制。
  • Service服务层,负责业务逻辑代码的处理。
  • Dao持久层,负责数据库的增删改查。
Controller控制层
Service服务层
Dao持久层

所以,如下图,简而言之:

  • 功能逻辑代码主要在WeatherService.java
  • TDengine数据库的SQL操作主要在WeatherMapper.xml

在这里插入图片描述

4.4 运行调试

  • application.properties配置文件修改ok后,即可运行启动。

  • 通过ApiPost6工具请求接口

  • init接口,初始化数据库,随机插入20条数据
    在这里插入图片描述

  • count接口,查询当前数据库有多少条数据
    在这里插入图片描述

  • save接口,数据库数据写入。
    在这里插入图片描述

以此接口为例,浅谈程序源码
WeatherController.java

    @PostMapping("/{temperature}/{humidity}")
    public int saveWeather(@PathVariable float temperature, @PathVariable float humidity) {
        return weatherService.save(temperature, humidity);
    }

WeatherService.java

    public int save(float temperature, float humidity) {
        Weather weather = new Weather();
        weather.setTs(new Timestamp(new Date().getTime()));
        weather.setTemperature(temperature);
        weather.setHumidity(humidity);
        weather.setLocation("厦门");
        weather.setNote("save测试");
        weather.setGroupId(30);

        weatherMapper.createTable(weather);
        return weatherMapper.insert(weather);
    }

WeatherMapper.xml

    <insert id="insert" parameterType="com.taosdata.example.springbootdemo.domain.Weather">
        insert into test.t#{groupId} (ts, temperature, humidity, note)
        values (#{ts}, ${temperature}, ${humidity}, #{note})
    </insert>
  • lastOne接口,数据库数据查询

在这里插入图片描述

觉得好,就一键三连呗(点赞+收藏+关注)

  • 6
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小康师兄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值