今天,我有一篇简短的文章,内容涉及在Spring Data Cassandra中使用Prepared Statements。 Spring为您提供了一些实用程序,使您可以更轻松地使用“预备语句”,而不必依靠自己使用Datastax Java驱动程序手动注册查询。 Spring代码提供了一个缓存来存储经常使用的准备好的语句。 允许您通过缓存执行查询,缓存可以从缓存中检索准备好的查询,也可以在执行之前添加一个新查询。

为了简短起见,我们可能应该开始看一些代码。

依存关系

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.5.RELEASE</version>
</parent><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-cassandra</artifactId></dependency>
</dependencies>

使用Spring Boot 2.0.5.RELEASE将拉入Spring Data Cassandra的2.0.10.RELEASE

使用准备好的语句

让我们直接进入:

@Repository
public class PersonRepository extends SimpleCassandraRepository<Person, PersonKey> {private final Session session;private final CassandraOperations cassandraTemplate;private final PreparedStatementCache cache = PreparedStatementCache.create();public PersonRepository(Session session,CassandraEntityInformation entityInformation,CassandraOperations cassandraTemplate) {super(entityInformation, cassandraTemplate);this.session = session;this.cassandraTemplate = cassandraTemplate;}// using ORMpublic List<Person> findByFirstNameAndDateOfBirth(String firstName, LocalDate dateOfBirth) {return cassandraTemplate.getCqlOperations().query(findByFirstNameAndDateOfBirthQuery(firstName, dateOfBirth),(row, rowNum) -> cassandraTemplate.getConverter().read(Person.class, row));}private BoundStatement findByFirstNameAndDateOfBirthQuery(String firstName, LocalDate dateOfBirth) {return CachedPreparedStatementCreator.of(cache,select().all().from("people_by_first_name").where(eq("first_name", bindMarker("first_name"))).and(eq("date_of_birth", bindMarker("date_of_birth")))).createPreparedStatement(session).bind().setString("first_name", firstName).setDate("date_of_birth", toCqlDate(dateOfBirth));}private com.datastax.driver.core.LocalDate toCqlDate(LocalDate date) {return com.datastax.driver.core.LocalDate.fromYearMonthDay(date.getYear(), date.getMonth().getValue(), date.getDayOfMonth());}// without ORMpublic List<Person> findByFirstNameAndDateOfBirthWithoutORM(String firstName, LocalDate dateOfBirth) {return cassandraTemplate.getCqlOperations().query(findByFirstNameAndDateOfBirthQuery(firstName, dateOfBirth),(row, rowNum) -> convert(row));}private Person convert(Row row) {return new Person(new PersonKey(row.getString("first_name"),toLocalDate(row.getDate("date_of_birth")),row.getUUID("person_id")),row.getString("last_name"),row.getDouble("salary"));}private LocalDate toLocalDate(com.datastax.driver.core.LocalDate date) {return LocalDate.of(date.getYear(), date.getMonth(), date.getDay());}
}

这里有相当数量的样板代码,因此我们可以访问Spring Data的ORM。 我还提供了代码来演示如何在不使用ORM的情况下实现相同的目标(无论如何,直接将查询直接映射到对象)。

让我们更仔细地研究一种方法:

public List<Person> findByFirstNameAndDateOfBirth(String firstName, LocalDate dateOfBirth) {return cassandraTemplate.getCqlOperations().query(findByFirstNameAndDateOfBirthQuery(firstName, dateOfBirth),(row, rowNum) -> cassandraTemplate.getConverter().read(Person.class, row));
}private BoundStatement findByFirstNameAndDateOfBirthQuery(String firstName, LocalDate dateOfBirth) {return CachedPreparedStatementCreator.of(cache,select().all().from("people_by_first_name").where(eq("first_name", bindMarker("first_name"))).and(eq("date_of_birth", bindMarker("date_of_birth")))).createPreparedStatement(session).bind().setString("first_name", firstName).setDate("date_of_birth", toCqlDate(dateOfBirth));
}

CachedPreparedStatementCreator完全按照其说的进行操作...它创建缓存的Prepared Statements。 of方法采用实例化Bean时定义的cache ,并创建第二个参数定义的新查询。 如果查询是最近已经注册的查询,即它已经在缓存中。 然后,从那里开始查询,而不是完成注册新语句的整个过程。

传入的查询是一个RegularStatement ,可以通过调用createPreparedStatement将它转换为PreparedStatement (我猜是吧)。 现在,我们可以将值绑定到查询,因此它实际上可以做一些有用的事情。

就缓存Prepared Statements而言,这就是您要做的全部。 还有其他方法可以执行此操作,例如,您可以手动使用PreparedStatementCache或定义自己的缓存实现。 无论您的船浮在水上。

您现在已经到了这篇简短文章的结尾,希望它实际上包含了足够有用的信息……

在本文中,我们介绍了如何使用CachedPreparedStatementCreator创建和将Prepared Statements放入高速缓存中,以便在以后更快地执行。 使用Spring Data提供的类,我们可以减少需要编写的代码量。

这篇文章中使用的代码可以在我的GitHub上找到 。

如果您认为这篇文章有帮助,可以在Twitter上@LankyDanDev关注我,以跟上我的新文章。

翻译自: https://www.javacodegeeks.com/2018/10/cached-prepared-statements-cassandra.html

使用Spring Data Cassandra缓存的预备语句相关推荐

  1. cassandra使用心得_使用Spring Data Cassandra缓存的预备语句

    cassandra使用心得 今天,我有一篇简短的文章,内容涉及在Spring Data Cassandra中使用Prepared Statements. Spring为您提供了一些实用程序,使您可以更 ...

  2. cassandra可视化_容器化Spring Data Cassandra应用程序

    cassandra可视化 我正在继续学习Docker的旅程. 在这一点上,我仍然保持简单. 这次,我将解决将Spring和Cassandra应用程序转换为使用容器而不是在主机上本地运行的问题. 更确切 ...

  3. 容器化Spring Data Cassandra应用程序

    我正在继续学习Docker的旅程. 在这一点上,我仍然保持简单. 这次,我将解决将Spring和Cassandra应用程序转换为使用容器而不是在主机上本地运行的问题. 更准确地说,使用Spring D ...

  4. mysql jpa 批注 视图_通过JPA注解映射视图的实体类 jpa 视图 无主键 @Query注解的用法(Spring Data JPA) jpa 使用sql语句...

    参考: https://blog.csdn.net/qq465235530/article/details/68064074 https://www.cnblogs.com/zj0208/p/6008 ...

  5. Spring Data JPA自定义SELECT查询语句,自定义UPDATE修改语句

    查询语句: 1. 在@Query 注解里设置value ,?1.?2 分别代表第一第二个参数, nativeQuery=true  表示是否是原生SQL @Query(value = "se ...

  6. Spring Data对Cassandra 3的支持

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

  7. 使用Spring Data Redis进行缓存

    在下面的示例中,我将向您展示如何使用Spring Data – Redis项目作为Spring 3.1中引入的Spring Cache Abstraction的缓存提供程序. 我对如何使用Spring ...

  8. Spring Web-Flux – Cassandra后端的功能样式

    在上一篇文章中,我介绍了Spring Web-Flux的基础知识,它表示Spring框架的Web层中的响应式支持. 我已经展示了使用Spring Data Cassandra并在Spring Web ...

  9. SpringBoot23-spingboot数据访问-Spring Data REST

    一,点睛Spring Data REST 1,什么是Spring Data REST Spring Data JPA是基于Spring Data的repository之上,可以将repository自 ...

最新文章

  1. Java接收多台设备发送消息_FCM(Firebase Cloud 消息传递)发送到多个设备
  2. Java提高——多线程(二)join、sleep、yield
  3. 划痕麻点检测程序_精密外观检测机设计
  4. 包云岗:伯克利科研模式的启发
  5. C语言学习笔记---C库排序函数qsort()
  6. 大数据有哪些特点和作用
  7. Go语言构建高并发分布式系统实践
  8. 基于Python的卷积神经网络和特征提取(Theano)
  9. 免费smtp服务器地址参数
  10. 康奈尔大学做笔记方式
  11. HTML爱心网页制作[樱花+爱心]
  12. 城市智慧灯杆解决方案
  13. 魔兽争霸III显示器设置分辨率 修改注册表单实现
  14. 2021秋软工实践第一次个人编程作业
  15. 梅兰商城案例代码编写(自己练习,纯手写,最后附有结果图以及精灵图)
  16. ML1.1 机器学习误差分析
  17. Java数字转中文数字
  18. 概率论与数理统计张宇9讲 第七讲 大数定律与中心极限定理
  19. “网红”白鸦创立6年的有赞,为何不敌同样诞生于微信生态3年的拼多多?
  20. 生成与获取token

热门文章

  1. 【最短路】【Dijkstra】【图论】最小花费(jzoj 2125)
  2. 【动态规划】石子合并
  3. Hadoop生态Flume(四)拦截器(Interceptor)介绍与使用(2)
  4. 汇编语言(三十)之多模块求和
  5. Spring 获取 request 的几种方法及其线程安全性分析
  6. vue实现下拉列表远程搜索示例(根据关键词模糊搜索)
  7. java人脸识别更新:摄像头支持360、火狐和谷歌浏览器
  8. 整合Druid---SpringBoot
  9. 修改Sublime Text3 的侧边栏字体大小
  10. java path 注解_@PathVariable注解的使用和@Requestparam