我是靠谱客的博主 苗条高跟鞋,最近开发中收集的这篇文章主要介绍Spring中用Mybatis查询Apache IoTDB,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

公司现在用的是postgresql + mybatis,现在想换成iotdb,iotdb是阿里开发的一个非关系型数据库

具有这些特点,具体的内容可以参考 https://iotdb.apache.org/zh/UserGuide/V0.12.x/IoTDB-Introduction/Features.html

  • 灵活的部署方式
    • 云端一键部署
    • 终端解压即用
    • 终端-云端无缝连接(数据云端同步工具)
  • 低硬件成本的存储解决方案
    • 高压缩比的磁盘存储(10亿数据点硬盘成本低于1.4元)
  • 目录结构的时间序列组织管理方式
    • 支持复杂结构的智能网联设备的时间序列组织
    • 支持大量同类物联网设备的时间序列组织
    • 可用模糊方式对海量复杂的时间序列目录结构进行检索
  • 高通量的时间序列数据读写
    • 支持百万级低功耗强连接设备数据接入(海量)
    • 支持智能网联设备数据高速读写(高速)
    • 以及同时具备上述特点的混合负载
  • 面向时间序列的丰富查询语义
    • 跨设备、跨传感器的时间序列时间对齐
    • 面向时序数据特征的计算
    • 提供面向时间维度的丰富聚合函数支持
  • 极低的学习门槛
    • 支持类SQL的数据操作
    • 提供JDBC的编程接口
    • 完善的导入导出工具
  • 完美对接开源生态环境
    • 支持开源数据分析生态系统:Hadoop、Spark
    • 支持开源可视化工具对接:Grafana

首先是我用到的框架版本:

Spring 5.3.3,Mybatis 3.5,iotdb 0.12.5

  1.  maven里要引用jar包,如果不想自己实现数据库交互工具可以不用引用iotdb session这个jar
    <!-- iotdb CRUD原生会话,如果不用iotdb session访问可以不引用 -->
    <dependency>
       <groupId>org.apache.iotdb</groupId>
       <artifactId>iotdb-session</artifactId>
       <version>0.12.5</version>
    </dependency>
    <!-- iotdb JDBC -->
    <dependency>
       <groupId>org.apache.iotdb</groupId>
       <artifactId>iotdb-jdbc</artifactId>
       <version>0.12.5</version>
    </dependency>

 2.  创建mapper里的查询语句

/*table_name要换成具体的time_series, 比如root.group.ln
列名需要注意的是,要标注上别名,不然注入不上
*/
 <select id="getDeviceData" parameterType="map"  resultMap="deviceData">
        SELECT code as code,value as value
        FROM table_name
        WHERE
        code=#{code}
        and time &gt; ${startTime}
        and time &lt; ${endTime}
    </select>

创建 entity,dao这些跟平时创建关系型数据库时的一样


@Data
public class DeviceData {
    String code;

    /**
     * 海拔
     */
    double altitude;

    /**
     * 纬度
     */
    double latitude;

    /**
     * 插入时间
     */
    long insertTime;

    /**
     * 检测值
     */
    String value;

    /**
     * 经度
     */
    double longitude;

    /**
     * 质量
     */
    String quality;

}
public interface DeviceDataDao extends IQueryDao {

    List<DeviceData> getDeviceData( String code,  String startTime,  String endTime);
}

这里有几个点需要注意一下:

  • mapper里写查询语句的时候table_name要换成具体的time_series, 比如root.group.ln
    列名需要标注上别名,不然查询出来的列名是root.group.ln.code这样的,注入不到resultmap里去
  • startTime和endTime我用的是$取值,mybatis里#和$是有区别的,用#取值mybatis会自动根据你传参类型处理后赋值,比如是字符串会加上单引号',而$不做处理直接将传参替换,测试中我发现iotdb按time字段查询是不支持字符串型的时间查询的,所以这里暂时这么传值,以后有时间了在研究

 最后,就是配置数据源,建议配置成动态数据源,根据业务查询需要动态切换数据源。

<dataSource>
        <name>iotdb</name>
        <alias>dataSource_iotdb</alias>

        <dbType>iotdb</dbType>
        <driver>org.apache.iotdb.jdbc.IoTDBDriver</driver>
        <driverUrl>jdbc:iotdb://localhost:6667/</driverUrl>
        <user>root</user>
        <password>123456</password>

        <status>actived</status>
        <isDefault>false</isDefault>
        <variables>
            <testOnBorrow>false</testOnBorrow>
            <testWhileIdle>true</testWhileIdle>
            <validationQuery>select 1 from root;</validationQuery>
                          
 
<maxPoolPreparedStatementPerConnectionSize>20</maxPoolPreparedStatementPerConnectionSize>
            <removeAbandonedTimeout>1800</removeAbandonedTimeout>
            <testOnReturn>false</testOnReturn>
            <maxActive>20</maxActive>
            <logAbandoned>true</logAbandoned>
            <poolPreparedStatements>true</poolPreparedStatements>
            <minIdle>3</minIdle>
            <maxWait>3600000</maxWait>
            <removeAbandoned>true</removeAbandoned>
            <timeBetweenEvictionRunsMillis>3600000</timeBetweenEvictionRunsMillis>
            <minEvictableIdleTimeMillis>300000</minEvictableIdleTimeMillis>
            <initialSize>3</initialSize>
            <filters>stat</filters>
        </variables>
    </dataSource>

启动项目就查询出来了,这里我省略了altitude等几个列

 

 跟用命令查出来的结果一样

 

最后

以上就是苗条高跟鞋为你收集整理的Spring中用Mybatis查询Apache IoTDB的全部内容,希望文章能够帮你解决Spring中用Mybatis查询Apache IoTDB所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部