Springboot3.3 整合Cassandra 4.1.5

一、数据库搭建

-- 创建Keyspace
CREATE KEYSPACE school WITH replication = {'class':'SimpleStrategy', 'replication_factor' : 1};-- 创建表
CREATE TABLE student(id int PRIMARY KEY,  name text,  age int,  genders int,  address text ,interest set<text>,phone list<text>,education map<text, text>
);

二、引入依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-cassandra</artifactId>
</dependency><!-- hutool是下面多线程导入数据引入 -->
<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.26</version>
</dependency>

三、配置文件

spring:application:name: Spring-Cassandracassandra:keyspace-name: schoolcontact-points:- 192.168.204.131:9042port: 9042username: ***password: ******local-datacenter: datacenter1request:timeout: 60s

检查Cassandra的local-datacenter,可执行下面命令:

[root@localhost apache-cassandra]# bin/nodetool status

 四、创建一个实体类:

import lombok.Data;
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.io.Serializable;
import java.util.List;
import java.util.Map;
import java.util.Set;@Data
@Table(value="student")
public class Student implements Serializable {@PrimaryKeyprivate Integer id;@Column("name")private String name;@Column("age")private Integer age;@Column("genders")private Integer genders;@Column("address")private String address;@Column("interest")private Set<String> interest;@Column("phone")private List<String> phone;@Column("education")private Map<String, String> education;
}

五、创建一个Controller


private final StudentService studentService;@GetMapping("student")
public List<Student> getStudentByName(String name) {return studentService.getStudentByName(name);
}@GetMapping("count")
public Long count() {return studentService.count();
}@GetMapping("list")
public List<Student> list(String name) {Student student = new Student();student.setName(name);return studentService.list(student);
}@GetMapping("save")
public String sava() {for(int i = 0; i<100; i++) {try {Thread.sleep(200);} catch (InterruptedException e) {throw new RuntimeException(e);}int finalI = i;ThreadUtil.execute(() -> {System.out.println("线程"+ finalI +"运行");List<Student> list = Lists.newArrayList();for(int j=0; j<100; j++) {UUID uuid = UUID.randomUUID();int hash = uuid.toString().hashCode();int maxTenDigit = (int) Math.pow(10, 10) - 1; // 10位整数的最大值int modHash = Math.abs(hash % maxTenDigit);Student student = new Student();student.setId(modHash);int random = (int) (Math.random() * 100);student.setName("GG"+ random);student.setAge(random);student.setGenders(1);student.setAddress("China");list.add(student);
//                    studentService.save(student);}System.out.println("线程"+ finalI +"开始批量插入");studentService.batchSave(list);System.out.println("线程"+ finalI +"结束批量插入");});}System.out.println("线程结束");
//        ThreadUtil.waitForDie();return "success";
}

注意:Cassandra 本身不适合用来做数据分析统计,比如 count,是需要去遍历数据库的,分布式数据库,那么就要通通遍历一次。小数据还可以,数据量大会报查询超时错误。

六、编写service查询数据

service接口省略

1、JPA方式查询

service实现

private final StudentMapper studentMapper;@Override
public List<Student> getStudentByName(String name) {return studentMapper.getStudentByName(name);
}

mapper接口

@Query(value = "select id, address, age, genders, name, interest, phone, education from student where name = ?0 ALLOW filtering")
List<Student> getStudentByName(String name);

Allow filtering:

       如果你的查询条件里,有一个是根据索引查询,那其它非索引非主键字段,可以通过加一个ALLOW FILTERING来过滤实现;

  虽然查询非索引非主键字段,但是只要加了ALLOW FILTERING条件,它会先根据索引查出来的值,再对结果进行过滤;

    (如果不加ALLOW FILTERING,而又有非索引列,这样是不允许的; 加上ALLOW FILTERING,相当于在结果后再进行过滤。)

2、CassandraTemplate方式查询

private final CassandraTemplate cassandraTemplate;@Override
public List<Student> list(Student queryInfo) {Query query = Query.query(where("name").is(queryInfo.getName()));query = query.withAllowFiltering();query = query.columns(Columns.from("id", "name", "age", "address", "genders", "interest", "phone", "education"));System.out.println(query);return this.cassandraTemplate.select(query, Student.class);
}@Override
public void save(Student student) {this.cassandraTemplate.insert(student);
}/**
* 批量插入
*/
@Override
public void batchSave(List<Student> list) {CassandraBatchOperations batchOps = cassandraTemplate.batchOps();batchOps.insert(list);batchOps.execute();
}@Override
public Long count() {return cassandraTemplate.count(Student.class);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/857513.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C++】关于代码编译自动更新版本的问题

在写代码的时候&#xff0c;总是需要添加一个版本号&#xff0c;用于后续的版本管理 我常遇到的一个问题是&#xff0c;开发过程中&#xff0c;不一定会记得这件事情&#xff0c;导致有时候会出现同样的版本 于是希望有一个方式&#xff0c;能在编译代码的时候自动生成一个版…

【Proteus仿真】【Arduino单片机】汽车倒车报警系统设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真Arduinno单片机控制器&#xff0c;使用LCD1602液晶、按键、继电器电机模块、DS18B20温度传感器、蜂鸣器LED、HCSR04超声波等。 主要功能&#xff1a; 系统运行后&#xff0c;LCD16…

Maven Wrapper安装指令

开源项目SDK&#xff1a;https://github.com/mingyang66/spring-parent 个人文档&#xff1a;https://mingyang66.github.io/raccoon-docs/#/ Maven Wrapper是一个小脚本和库&#xff0c;它允许你再没有预装Maven的情况下构建Maven项目。通过Maven Wrapper项目的构建环境可以变…

C# 启动exe 程序

(1) publicbool Start () System.Diagnostics.Process process new System.Diagnostics.Process(); process.StartInfo.FileName "iexplore.exe"; //IE浏览器&#xff0c;可以更换 process.StartInfo.Arguments "http://www.baidu.com"; process.…

代理模式--cglib动态代理

1.介绍 cglib (Code Generation Library ) 是一个第三方代码生成类库&#xff0c;运行时在内存中动态生成一个子类对象从而实现对目标对象功能的扩展。cglib 为没有实现接口的类提供代理&#xff0c;为JDK的动态代理提供了很好的补充。 2.JDK动态代理与CGLIB动态代理对比 JDK…

【网络安全学习】漏洞扫描:-04- ZAP漏洞扫描工具

**ZAP(Zed Attack Proxy)**是一款由OWASP组织开发的免费且开源的安全测试工具。 ZAP支持认证、AJAX爬取、自动化扫描、强制浏览和动态SSL证书等功能。 1️⃣ 安装zap工具 现在的kali版本不一定会预装zap&#xff0c;我们可以自行安装&#xff0c;安装也十分简单。 apt-get …

下载nvm安装完成后使用命令无法连接网络的解决办法(环境变量中设置全局IP网络代理)

在cmd中输入 nvm ls available &#xff0c; 可以查看node.js的可用的版本号 但是半天没动静&#xff0c;然后显示连接超时&#xff1a; Could not retrieve https://nodejs.org/dist/index.json.Get "https://nodejs.org/dist/index.json": dial tcp 104.20.23.46:…

mybatis查询PostgreSQL报错:无法确定参数 $1 的数据类型

错误信息 ### Cause: org.postgresql.util.PSQLException: 错误: 无法确定参数 $1 的数据类型 ; bad SQL grammar []; nested exception is org.postgresql.util.PSQLException: 错误: 无法确定参数 $1 的数据类型] with root cause org.postgresql.util.PSQLException: 错误: …

30.Netty进阶-黏包半包解决方案-短链接

客户端发送一次完整的消息,然后就把与服务端的链接断开。服务端读到的结果就是-1。 服务器就知道 从链接建立到断开,发送的数据是一条完整的数据。 客户端代码 package com.xkj.nian;import io.netty.bootstrap.Bootstrap; import io.netty.buffer.ByteBuf; import io.net…

转让中字头无区域农业公司变更快包迁全国

国家局名称的公司不仅可以提升企业形象&#xff0c;还能展现公司的实力。由于国家总局核名的审核标准相对严格&#xff0c;能够通过核名的企业一般都具备一定的实力和资质。因此&#xff0c;选择国家局核名的企业往往能够在市场中获得更多信任和认可。详情致电咨询我或者来公司…

C# 实现draw一个简单的温度计

运行结果 概述&#xff1a; 代码分析 该控件主要包含以下几个部分&#xff1a; 属性定义&#xff1a; MinValue&#xff1a;最低温度值。 MaxValue&#xff1a;最高温度值。 CurrentValue&#xff1a;当前温度值。 构造函数&#xff1a; 设置了一些控件样式来提升绘制效果…

Flutter showModalBottomSheet用法

先搞一个DialogUtil工具类 import package:flutter/material.dart;class DialogUtil {static void showCommonBottomSheet(BuildContext context,Widget widget,{scrollControlledfalse}){showModalBottomSheet(context: context,enableDrag:false,builder: (BuildContext con…

【计算机网络体系结构】计算机网络体系结构实验-DHCP实验

服务器ip地址 2. 服务器地址池 3. 客户端ip 4. ping Ipconfig

sed的介绍及应用

sed 文本三剑客之一 sed是一种流编辑器&#xff0c;一次处理一行内行。 如果只是展示&#xff0c;会放在缓冲区&#xff08;模式空间&#xff09;&#xff0c;展示结束之后&#xff0c;会从模式空间把操作结果删除。 工作模式&#xff1a;一行一行处理&#xff0c;处理完当前…

PyTorch(二)张量

#c 总结 张量总结 该文档主要熟悉了「张量」的概念&#xff0c;理解了「张量」在深度学习中扮演的重要角色&#xff0c;如何判断代码中哪些属于张量。其次熟悉了张量的「四种初始化」&#xff0c;以及「张量属性」&#xff0c;「张量操作」 1 张量概念 #d 张量 「张量&…

解决Visual Studio Code在Ubuntu上崩溃的问题

解决Visual Studio Code在Ubuntu上崩溃的问题 我正在使用Ubuntu系统&#xff0c;每次打开Visual Studio Code时&#xff0c;只能短暂打开一秒钟&#xff0c;然后就会崩溃。当通过终端使用code --verbose命令启动Visual Studio Code时&#xff0c;出现以下错误信息&#xff1a;…

【计算机网络仿真】b站湖科大教书匠思科Packet Tracer——实验7 虚拟局域网VLAN

一、实验目的 1.学习如何划分VLAN&#xff1b; 2.验证划分VLAN的作用&#xff1b; 3.学习如何用命令行创建VLAN&#xff0c;将端口划分到VLAN&#xff0c;设置端口类型。 二、实验要求 1.使用Cisco Packet Tracer仿真平台&#xff1b; 2.观看B站湖科大教书匠仿真实验视频&am…

mysql、pg的sql请求处理流程

mysql的sql请求处理流程 连接器 客户端发起 SQL 查询请求时,首先会经过连接器模块。连接器模块负责管理客户端与服务器端之间的 TCP/IP 连接。它会验证用户身份,如果认证通过,就建立连接并分配相应的线程资源。 授权器 连接成功后,授权器模块会根据用户权限,检查当前用户是…

cmake和Make的安装及配置

cmake和Make的安装及配置 安装 make 工具的步骤取决于你使用的操作系统。以下是不同操作系统上安装 make 工具的指南: 在 Linux 上安装 make 对于大多数 Linux 发行版,可以使用包管理器来安装 make。以下是一些常见的 Linux 发行版的安装命令: Ubuntu/Debian sh 复制代码…

3d中模型显示黑色给不了材质---模大狮模型网

如果3D模型显示黑色&#xff0c;而且无法给它添加材质&#xff0c;可能有以下几种原因&#xff1a; 一&#xff1a;模型没有UV贴图 UV贴图是3D模型表面纹理的一种方式&#xff0c;如果模型没有正确的UV贴图&#xff0c;渲染时可能会显示黑色。在大多数3D建模软件中&#xff0c…