名为Ingalls的新Spring Data发布火车的发布引起了我的关注,其中之一是Spring Data Cassandra最终支持Cassandra 3+。 因此,我回顾了我的一个旧样本,并尝试了较新版本的Cassandra。

安装Cassandra

第一步是安装本地版本的Cassandra,我继续发现ccm工具在能够启动和拆除小型集群方面非常出色。 这是我正在运行的命令,用于启动一个基于3个节点的Apache Cassandra 3.9集群。

ccm create test -v 3.9 -n 3 -s --vnodes

创建模式

连接到集群中的节点:

ccm node1 cqlshCREATE KEYSPACE IF NOT EXISTS sample WITH replication = {'class':'SimpleStrategy', 'replication_factor':1};

接下来,我需要创建表来保存数据。 卡桑德拉(Cassandra)的一般建议是根据查询模式对表进行建模-鉴于此,我首先定义一个表来保存基本的“旅馆”信息:

CREATE TABLE IF NOT EXISTS  sample.hotels (id UUID,name varchar,address varchar,state varchar,zip varchar,primary key((id), name)
);

假设我必须支持两种查询模式–基于说第一个字母的酒店检索和按州检索酒店,我有一个“ hotels_by_letter”非规范化表来支持按“第一个字母”检索:

CREATE TABLE IF NOT EXISTS  sample.hotels_by_letter (first_letter varchar,hotel_name varchar,hotel_id UUID,address varchar,state varchar,zip varchar,primary key((first_letter), hotel_name, hotel_id)
);

仅针对各种情况,就可以使用“ hotels_by_state”实例化视图来支持按酒店所在的州进行检索:

CREATE MATERIALIZED VIEW sample.hotels_by_state ASSELECT id, name, address, state, zip FROM hotelsWHERE state IS NOT NULL AND id IS NOT NULL AND name IS NOT NULLPRIMARY KEY ((state), name, id)WITH CLUSTERING ORDER BY (name DESC)

编码库

在Java方面,由于我要持久存储并查询一个称为“ Hotel”的简单域类型,因此如下所示:

@Table("hotels")
public class Hotel implements Serializable {@PrimaryKeyprivate UUID id;private String name;private String address;private String state;private String zip;...
}

现在,要能够对该实体执行基本的CRUD操作,所需的就是一个存储库接口 ,如以下代码所示:

import cass.domain.Hotel;
import org.springframework.data.repository.CrudRepository;import java.util.UUID;public interface HotelRepository extends CrudRepository<Hotel, UUID>, HotelRepositoryCustom {}

此存储库还从HotelRepositoryCustom接口继承,该接口将提供自定义查找器以支持按名字和状态进行检索。

现在要保留一个酒店实体,我要做的就是调用存储库方法:

hotelRepository.save(hotel);

实例化视图中的数据由Cassandra自动同步和维护,但是“ hotels_by_letter”表中的数据必须通过代码进行管理,因此我定义了另一个存储库来维护该表中的数据:

public interface HotelByLetterRepository extends CrudRepository<HotelByLetter, HotelByLetterKey>, HotelByLetterRepositoryCustom {}

自定义界面及其实现是为了方便根据酒店名称的首字母在查询中搜索此表,并通过
Spring数据Cassandra的自定义存储库实现功能。

import com.datastax.driver.core.querybuilder.QueryBuilder;
import com.datastax.driver.core.querybuilder.Select;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.cassandra.core.CassandraTemplate;
import org.springframework.stereotype.Repository;import java.util.List;@Repository
public class HotelRepositoryImpl implements HotelRepositoryCustom {private final CassandraTemplate cassandraTemplate;@Autowiredpublic HotelRepositoryImpl(CassandraTemplate cassandraTemplate) {this.cassandraTemplate = cassandraTemplate;}@Overridepublic List<Hotel> findByState(String state) {Select select = QueryBuilder.select().from("hotels_by_state");select.where(QueryBuilder.eq("state", state));return this.cassandraTemplate.select(select, Hotel.class);}
}@Repository
public class HotelByLetterRepositoryImpl implements HotelByLetterRepositoryCustom {private final CassandraTemplate cassandraTemplate;public HotelByLetterRepositoryImpl(CassandraTemplate cassandraTemplate) {this.cassandraTemplate = cassandraTemplate;}@Overridepublic List<HotelByLetter> findByFirstLetter(String letter) {Select select = QueryBuilder.select().from("hotels_by_letter");select.where(QueryBuilder.eq("first_letter", letter));return this.cassandraTemplate.select(select, HotelByLetter.class);}}

给定这些存储库类,提供查询支持的自定义存储库,其余的代码是将Spring Boot的Cassandra Auto Configuration所促进的所有工作联系在一起。

本质上就是全部, Spring Data Cassandra使与Cassandra 3+的交互变得非常简单。

我相信,一个完整的工作项目可以更好地熟悉这个出色的库,并且我的github仓库中也提供了这样的示例– https://github.com/bijukunjummen/sample-boot-with-cassandra

翻译自: https://www.javacodegeeks.com/2017/01/spring-data-support-cassandra-3.html

Spring Data对Cassandra 3的支持相关推荐

  1. 01 | Spring Data JPA 初识

    课程正式开始了,这里我会以一个案例的形式来和你讲解如何通过 Spring Boot 结合 Spring Data JPA 快速启动一个项目.如何使用 UserRepository 完成对 User 表 ...

  2. Spring Data JPA 原理与实战第二天 掌握Repoitory和DQM

    02 Spring Data Common 之 Repoitory 如何全面掌握? 通过上一课时,我们知道了 Spring Data 对整个数据操作做了很好的封装,其中 Spring Data Com ...

  3. Spring Data JPA 实战

    课程介绍 <Spring Data JPA 实战>内容是基于作者学习和工作中实践的总结和升华,有一句经典的话:"现在的开发人员是站在巨人的肩上,弯道超车".因现在框架越 ...

  4. Spring Data JPA 从入门到精通~查询结果的处理

    参数选择(Sort/Pageable)分页和排序 特定类型的参数,Pageable 并动态 Sort 地将分页和排序应用于查询 案例:在查询方法中使用 Pageable.Slice 和 Sort. P ...

  5. Spring Data JPA简单学习

    从一个简单的 JPA 示例开始 本文主要讲述 Spring Data JPA,但是为了不至于给 JPA 和 Spring 的初学者造成较大的学习曲线,我们首先从 JPA 开始,简单介绍一个 JPA 示 ...

  6. Spring Data JPA使用

    2019独角兽企业重金招聘Python工程师标准>>> 前言 自 JPA 伴随 Java EE 5 发布以来,受到了各大厂商及开源社区的追捧,各种商用的和开源的 JPA 框架如雨后春 ...

  7. Spring Data Redis 多源

    完整代码:Ciiiiing/springboot_multi_redis 最近需要在同一个项目中访问多个 redis 而 spring data redis 默认是只支持一个数据源的,那就需要我们自己 ...

  8. Spring Data Commons 官方文档学习

    Spring Data Commons 官方文档学习   -by LarryZeal Version 1.12.6.Release, 2017-07-27 为知笔记版本在这里,带格式. Table o ...

  9. spring data jpa使用详解(推荐)

    使用Spring data JPA开发已经有一段时间了,这期间学习了一些东西,也遇到了一些问题,在这里和大家分享一下. 前言: Spring data简介: Spring Data是一个用于简化数据库 ...

最新文章

  1. 张江男的逆袭,我如何使用leangoo提升团队效率
  2. Unity3D TestTool Part _1
  3. SpringBoot底层注解-@ConfigurationProperties配置绑定
  4. 全国计算机等级考试题库二级C操作题100套(第40套)
  5. ctf up怎么写 write_软件测试工程师要不要写工具?
  6. 熊猫read_csv()–将CSV文件读取到DataFrame
  7. mysql 查询 45 道题
  8. JavaScript实现监听移动端上下左右滑动事件
  9. 租房软件隐私保护如同虚设
  10. iis信息服务器win8,win8配置iis服务器
  11. R语言入门——画密度曲线
  12. 医学图像处理与深度学习入门
  13. 从别人那copy点学习资料
  14. Arduino连接pH计
  15. KDD2022推荐系统论文集锦
  16. 《跟我一起写makefile》读书笔记
  17. win7 安装双系统centos7
  18. 机器学习实战:Kaggle泰坦尼克号生存预测 利用决策树进行预测
  19. 【风力发电机模型】风力涡轮机模型包括叶片、机舱、变桨和偏航驱动、发电机和控制系统(MatlabSimulink)
  20. ADC学习系列(二):ADC参数详解

热门文章

  1. JavaFX UI控件教程(二十二)之Titled Pane和Accordion
  2. art-template入门(三)之语法
  3. Tomcat 的 Server 文件配置详解
  4. 并发场景下MySQL存在的问题及解决思路
  5. Spring的IoC与DI差异
  6. 04-插入操作更新操作删除操作
  7. C/C++输入输出流
  8. 《白鹿原》金句摘抄(五)
  9. React中的方法调用
  10. JSON 和 JavaScript 对象互转