springboot使用Cassandra组合查询数据

  • 在application.yml中配置cassandra
  • pom中引入Cassandra
  • 封装Cassandra的通用类
  • 具体使用
  • 实现通用接口
  • 具体查询逻辑(最重要)
  • 使用

在application.yml中配置cassandra

 data:cassandra:contact-points: 192.168.0.122port: 9042   username: XXXpassword: XXkeyspace-name: XXX

pom中引入Cassandra

<!-- 引入cassandra-->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-cassandra</artifactId>
</dependency>

封装Cassandra的通用类

package com.wuzheng.vehicle.info.repository;import org.springframework.data.cassandra.core.query.Query;import java.io.Serializable;
import java.util.List;/*** @description:基础 仓储层* @author:twislyn* @date:Created in 2020/05/21* @modified By:* @version: 1.0*/
public interface BaseRepository<T> {/*** 按主键查询* @param id* @return*/T getById(Serializable id);/*** 按条件查询对象* @param query* @return*/T getObj(Query query);/*** 按条件查询列表* @param query* @return*/List<T> listObjs(Query query);//    /**
//     * 分页查询
//     * @param pagination
//     * @param query
//     * @return
//     */
//    Slice<T> pageObjs(Pagination pagination, Query query);
}

实现类:

package com.wuzheng.vehicle.info.repository.impl;import com.datastax.driver.core.PagingState;import com.wuzheng.vehicle.info.repository.BaseRepository;
import com.wuzheng.vehicle.info.utils.Pagination;
import org.springframework.data.cassandra.core.CassandraTemplate;
import org.springframework.data.cassandra.core.query.CassandraPageRequest;
import org.springframework.data.cassandra.core.query.Query;
import org.springframework.data.domain.Slice;import javax.annotation.Resource;
import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.util.List;/*** @description:基础 仓储实现层* @author:twislyn* @date:Created in 2020/05/21* @modified By:* @version: 1.0*/
public class BaseRepositoryImpl<T> implements BaseRepository<T> {@ResourceCassandraTemplate cassandraTemplate;protected Class<T> entityClass = currentModelClass();/*** 获取泛型类型** @return*/@SuppressWarnings("unchecked")protected Class<T> currentModelClass() {return (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];}@Overridepublic T getById(Serializable id) {return cassandraTemplate.selectOneById(id, entityClass);}@Overridepublic T getObj(Query query) {return cassandraTemplate.selectOne(query, entityClass);}@Overridepublic List<T> listObjs(Query query) {return cassandraTemplate.select(query, entityClass);}//    @Override
//    public Slice<T> pageObjs(Pagination pagination, Query query) {//        if (pagination.getPageSize() > 1) {//            CassandraPageRequest pageRequest = pagination.getPageRequest();
//            Slice<T> slice = cassandraTemplate.slice(query.pageRequest(pageRequest), entityClass);
//            for (int i = 1, len = pagination.getPageSize(); i < len; i++) {//                PagingState pagingState = ((CassandraPageRequest) slice.getPageable()).getPagingState();
//                if (pagingState == null) {//                    return slice;
//                }
//                pageRequest = CassandraPageRequest.of(slice.getPageable(), pagingState);
//                slice = cassandraTemplate.slice(query.pageRequest(pageRequest), entityClass);
//            }
//            return slice;
//        }
//        return cassandraTemplate.slice(query.pageRequest(pagination.getPageRequest()), entityClass);
//
//    }
}

具体使用

自定义对应Cassandra的数据库的实体

package com.wuzheng.vehicle.supervise.entity;import org.springframework.data.cassandra.core.mapping.Column;
import org.springframework.data.cassandra.core.mapping.PrimaryKey;
import org.springframework.data.cassandra.core.mapping.Table;import java.util.List;
import java.util.Map;/*** @description:燃油车辆实时数据* @author:twislyn* @date:Created in 2020/* 05/22* @modified By:* @version: 1.0*/
@Table("w_iot_fuelvehicle_realtime_base")
public class IotFuelVehicleRealtimeBase {@PrimaryKey("rowid")private String rowId;/*** 进气量*/@Column("airin")private Double airIn;/*** 大气压力*/@Column("atmp")private Double atmp;/*** 标定验证码*/@Column("cvn")private String cvn;@Column("dpf")private Double dpf;/*** 发动机冷却液温度*/@Column("ect")private Integer ect;/*** 发动机燃料流量*/@Column("eflow")private Double eflow;/*** 发动机转速*/@Column("espeed")private Double espeed;@Column("flist")private List flist;/*** 油箱液位*/@Column("flvl")private Double flvl;/*** 故障码数量*/@Column("fnum")private Integer fnum;/*** 摩擦扭矩(作为发动机最大基准扭矩的百分比)*/@Column("ftorq")private Integer ftorq;/*** 数据采集时间_登入*/@Column("gatime")private String gatime;/*** IUPR值*/@Column("iupr")private String iupr;/*** 纬度*/@Column("lat")private Double lat;/*** 经度*/@Column("lng")private Double lng;@Column("locs")private Map<String, Double> locs;/*** 定位状态*/@Column("locsts")private String locsts;/*** MIL状态*/@Column("milsts")private Integer milsts;/*** OBD诊断协议*/@Column("obddp")private Integer obddp;/*** 发动机净输出扭矩,或发动机实际扭矩/指示扭矩*/@Column("otorq")private Integer otorq;@Column("rdysts")private String rdysts;@Column("reiss")private Boolean reiss;@Column("remrg")private Double remrg;@Column("rfld")private Map rfld;@Column("scrdnnox")private Double scrdnnox;@Column("scrint")private Double scrint;@Column("scroutt")private Double scroutt;@Column("scrupnox")private Double scrupnox;/*** 车速*/@Column("speed")private Double speed;@Column("sstr")private String sstr;@Column("supsts")private String supsts;@Column("swareid")private String swareid;/*** 累计里程*/@Column("tmiles")private Double tmiles;/*** vin码*/@Column("vin")private String vin;public String getRowId() {return rowId;}public void setRowId(String rowId) {this.rowId = rowId;}public Double getAirIn() {return airIn;}public void setAirIn(Double airIn) {this.airIn = airIn;}public Double getAtmp() {return atmp;}public void setAtmp(Double atmp) {this.atmp = atmp;}public String getCvn() {return cvn;}public void setCvn(String cvn) {this.cvn = cvn;}public Double getDpf() {return dpf;}public void setDpf(Double dpf) {this.dpf = dpf;}public Integer getEct() {return ect;}public void setEct(Integer ect) {this.ect = ect;}public Double getEflow() {return eflow;}public void setEflow(Double eflow) {this.eflow = eflow;}public Double getEspeed() {return espeed;}public void setEspeed(Double espeed) {this.espeed = espeed;}public List getFlist() {return flist;}public void setFlist(List flist) {this.flist = flist;}public Double getFlvl() {return flvl;}public void setFlvl(Double flvl) {this.flvl = flvl;}public Integer getFnum() {return fnum;}public void setFnum(Integer fnum) {this.fnum = fnum;}public Integer getFtorq() {return ftorq;}public void setFtorq(Integer ftorq) {this.ftorq = ftorq;}public String getGatime() {return gatime;}public void setGatime(String gatime) {this.gatime = gatime;}public String getIupr() {return iupr;}public void setIupr(String iupr) {this.iupr = iupr;}public Double getLat() {return lat;}public void setLat(Double lat) {this.lat = lat;}public Double getLng() {return lng;}public void setLng(Double lng) {this.lng = lng;}public Map<String, Double> getLocs() {return locs;}public void setLocs(Map<String, Double> locs) {this.locs = locs;}public String getLocsts() {return locsts;}public void setLocsts(String locsts) {this.locsts = locsts;}public Integer getMilsts() {return milsts;}public void setMilsts(Integer milsts) {this.milsts = milsts;}public Integer getObddp() {return obddp;}public void setObddp(Integer obddp) {this.obddp = obddp;}public Integer getOtorq() {return otorq;}public void setOtorq(Integer otorq) {this.otorq = otorq;}public String getRdysts() {return rdysts;}public void setRdysts(String rdysts) {this.rdysts = rdysts;}public Boolean getReiss() {return reiss;}public void setReiss(Boolean reiss) {this.reiss = reiss;}public Double getRemrg() {return remrg;}public void setRemrg(Double remrg) {this.remrg = remrg;}public Map getRfld() {return rfld;}public void setRfld(Map rfld) {this.rfld = rfld;}public Double getScrdnnox() {return scrdnnox;}public void setScrdnnox(Double scrdnnox) {this.scrdnnox = scrdnnox;}public Double getScrint() {return scrint;}public void setScrint(Double scrint) {this.scrint = scrint;}public Double getScroutt() {return scroutt;}public void setScroutt(Double scroutt) {this.scroutt = scroutt;}public Double getScrupnox() {return scrupnox;}public void setScrupnox(Double scrupnox) {this.scrupnox = scrupnox;}public Double getSpeed() {return speed;}public void setSpeed(Double speed) {this.speed = speed;}public String getSstr() {return sstr;}public void setSstr(String sstr) {this.sstr = sstr;}public String getSupsts() {return supsts;}public void setSupsts(String supsts) {this.supsts = supsts;}public String getSwareid() {return swareid;}public void setSwareid(String swareid) {this.swareid = swareid;}public Double getTmiles() {return tmiles;}public void setTmiles(Double tmiles) {this.tmiles = tmiles;}public String getVin() {return vin;}public void setVin(String vin) {this.vin = vin;}
}

实现通用接口

package com.wuzheng.vehicle.info.repository;import com.wuzheng.vehicle.info.entity.ForwardExportMsgTask;
import com.wuzheng.vehicle.info.dto.excel.WIotElecvehicleRealtimeBase;import java.util.List;/*** 转发报文数据*/
public interface IotElecvehicleRealtimeBaseRepository extends BaseRepository<WIotElecvehicleRealtimeBase> {/*** 根据条件查询历史数据** @param queryInfo 查询条件* @return*/List<WIotElecvehicleRealtimeBase> list(ForwardExportMsgTask queryInfo);
}

具体查询逻辑(最重要)

package com.wuzheng.vehicle.info.repository.impl;import com.wuzheng.vehicle.info.entity.ForwardExportMsgTask;
import com.wuzheng.vehicle.info.dto.excel.WIotElecvehicleRealtimeBase;
import com.wuzheng.vehicle.info.repository.IotElecvehicleRealtimeBaseRepository;
import com.wuzheng.vehicle.info.utils.StringUtils;
import org.springframework.data.cassandra.core.query.Columns;
import org.springframework.data.cassandra.core.query.Query;
import org.springframework.stereotype.Repository;import java.util.List;import static org.springframework.data.cassandra.core.query.Criteria.where;@Repository
public class IotElecvehicleRealtimeBaseRepositoryImpl extends BaseRepositoryImpl<WIotElecvehicleRealtimeBase>implements IotElecvehicleRealtimeBaseRepository {@Overridepublic List<WIotElecvehicleRealtimeBase> list(ForwardExportMsgTask queryInfo) {Query query = Query.query(where("idcode").like(queryInfo.getTaskPlatIdCode())).and(where("vin").in(queryInfo.getTaskVin())).and(where("msgtype").is(queryInfo.getTaskMsgType() + ""));if (StringUtils.isNotBlank(queryInfo.getTaskStartTimeStr())) {query = query.and(where("gatime").gt(queryInfo.getTaskStartTimeStr()));}if (StringUtils.isNotBlank(queryInfo.getTaskEndTimeStr())) {query = query.and(where("gatime").lt(queryInfo.getTaskEndTimeStr()));}
//        query = query.sort(Sort.by("vin").descending()).withAllowFiltering();query = query.withAllowFiltering();query = query.columns(Columns.from("vin", "gatime", "sstr", "rectime", "fwdtime", "ressts", "restime", "idcode", "msgtype"));System.out.println(query);return this.cassandraTemplate.select(query, WIotElecvehicleRealtimeBase.class);}}

使用


springboot使用Cassandra组合查询数据相关推荐

  1. laravel 链式组合查询数据

    我们写项目的时候经常用到组合查询,例如对于一篇博客,你想根据一个著作的著作类别,编著形式,研究类别进行查询.这个时候,我们就可以链式组合查询.前台给我们后台什么类型,我们就根据这个类型去执行sql语句 ...

  2. 【ES】JavaAPI学习-07 组合查询 范围查询

    前言 本节主要实现条件查询中的组合查询,范围查询 实现 编写组合查询 ESTest_Doc_Cond_Query_Com.java package com.zwy.es;import org.apac ...

  3. MySQL 学习笔记(4)— 组合查询、子查询、插入数据、更新/删除表数据、增加/删除表中的列以及重命名表

    1. 组合查询 1.表的加减法 表的加法,即求 product 和 product2 的并集,UNION 运算会除去重复的记录 SELECT product_id, product_name FROM ...

  4. springboot项目中mybatis实现数据的基本查询

    SpringBoot项目中mybatis实现数据的基本查询 本章内容概述: mapper 查询 xml 文件基本使用 通过 mybatis 实现一条数据的查询 1 用户数据表 2 用户信息对应的实体类 ...

  5. 《MySQL数据操作与查询》- 维护学生信息、老师信息和成绩信息 支持按多种条件组合查询学生信息和成绩信息

    综合项目需求 一.系统整体功能 系统需支持以下功能: 维护学生信息.老师信息和成绩信息 支持按多种条件组合查询学生信息和成绩信息 学生 Student(id,班级id,学号,姓名,性别,电话,地址,出 ...

  6. 关系数据库SQL之高级数据查询:去重复、组合查询、连接查询、虚拟表

    前言 接上一篇关系数据库SQL之基本数据查询:子查询.分组查询.模糊查询,主要是关系型数据库基本数据查询.包括子查询.分组查询.聚合函数查询.模糊查询,本文是介绍一下关系型数据库几种高级数据查询SQL ...

  7. 页面多条件组合查询功能 代码 如何写效率高_Jeecg Boot 2.2 首个里程碑版本发布,低代码平台

    项目介绍 JeecgBoot是一款基于代码生成器的低代码开发平台,开源界"小普元"超越传统商业企业开发平台!采用前后端分离架构:SpringBoot 2.x,Ant Design& ...

  8. 实战:隐藏SpringBoot中的私密数据!

    这几天公司在排查内部数据账号泄漏,原因是发现某些实习生小可爱居然连带着账号.密码将源码私传到GitHub上,导致核心数据外漏,孩子还是没挨过社会毒打,这种事的后果可大可小. 说起这个我是比较有感触的, ...

  9. SpringBoot + xxl-job 多数据源异构数据增量同步

    SpringBoot + xxl-job 多数据源异构数据增量同步 文章目录 SpringBoot + xxl-job 多数据源异构数据增量同步 一.概述 二.实现步骤 2.1 项目搭建 2.2 接口 ...

最新文章

  1. s-systemtap工具使用图谱(持续更新)
  2. 成为优秀高级程序员的10个要点(转)
  3. PHP用户输入安全过滤和注入攻击检测
  4. 基于Springboot实现的固废物管理系统
  5. python字典随时添加元素和值
  6. html5网页自动滚动,Html5 滚动穿透的方法
  7. ()IT 职场经验)一位10年Java工作经验的架构师的经验分享,感觉很受用。
  8. 苹果或推中国特色版 iPhone;小米回应萌拍抄袭苹果事件;微软停止审核发布 Windows Phone 8.x | 极客头条...
  9. 讨论下怎么能实现保证新闻时效性推荐算法机制
  10. HDU 3341 Lost's revenge (AC自动机 + DP + 变进制/hash)题解
  11. 帆软FineMobile 自适应
  12. 易能变频器说明书故障代码_易能变频器报警报故障代码维修技术指导
  13. 终极成语接龙,谁能继续往下接,哈哈!!!
  14. 读《摄影测量与遥感概论》有感
  15. 信息系统管理工程师记忆口诀
  16. 计算机无法外接投影,电脑连不上投影仪怎么办
  17. Xtts v4 xttdriver.pl xtt.properties
  18. Android开发:设置启动页面
  19. 【Books系列】之第一本书:大冰《好吗好的》读书笔记和读后感
  20. 女性和少数族裔,正成为无监督预训练模型偏见的“受害者”

热门文章

  1. IOS UIView详解
  2. 深入浅出WPF——XAML的优点
  3. 设计一个互联网交换设备的SNMP MIB库“X-MIB”
  4. 汉语中的词频及笔画数分布规律探析
  5. Python培训课程怎么学
  6. 在linux中关闭防火墙
  7. 如何选择优化器 optimizer
  8. Exchange-获取主、所有SMTP地址
  9. select下拉框选择触发事件
  10. springboot工程中限流方式