Spring Data提供了一种统一而简单的方法来访问不同类型的持久性存储,关系数据库系统和NoSQL数据存储。 它位于JPA之上,添加了另一层抽象并定义了基于标准的设计以在Spring上下文中支持持久层。

Apache Ignite IgniteRepository实现了Spring Data CrudRepository接口并扩展了CrudRepository的基本功能,该功能又支持:

  1. 特定类型存储库上的基本CRUD操作。
  2. 通过Spring Data API访问Apache Ignite SQL网格。

使用Spring Data的存储库,您只需要编写一个带有finder方法的接口来查询对象。 用于处理对象的所有CRUD方法将自动提供。 举个例子:

@RepositoryConfig(cacheName = "DogCache")
public interface DogRepository extends IgniteRepository<Dog, Long> {List<Dog> getDogByName(String name);Dog getDogById (Long id);
}

在本文中,我们将介绍以下主题:

  • 从头开始创建一个Maven项目,以将Spring Data与Apache Ignite Grid一起使用。
  • 通过Spring Data框架将一些实体持久保存到Ignite缓存中。

在开始之前,让我们在沙盒中介绍项目的先决条件:

  1. Java JDK 1.8
  2. 点燃2.0版
  3. Apache Maven版本> 3.0.3

步骤1

让我们先设置沙箱。 创建一个Maven项目或从GitHub存储库克隆该项目。

mvn archetype:create -DgroupId=com.blu.imdg -DartifactId=spring-data

修改pom.xml,添加以下Maven依赖项:

<dependency><groupId>org.apache.ignite</groupId><artifactId>ignite-core</artifactId><version>2.0.0</version>
</dependency>
<dependency><groupId>org.apache.ignite</groupId><artifactId>ignite-spring</artifactId><version>2.0.0</version>
</dependency>
<dependency><groupId>org.apache.ignite</groupId><artifactId>ignite-spring-data</artifactId><version>2.0.0</version>
</dependency>
<dependency><groupId>org.apache.ignite</groupId><artifactId>ignite-indexing</artifactId><version>2.0.0</version>
</dependency>
<dependency><groupId>com.h2database</groupId><artifactId>h2</artifactId><version>1.4.195</version>
</dependency>

注意,maven h2依赖关系是可选的。 如果遇到类似“ org.h2.result.RowFactory”的错误,请显式添加依赖项。

我们的示例域模型由两个不同的实体组成:Breed和Dog。

品种和狗之间的关联是ManyToOne 。 一只狗只能有一个品种。

现在,让我们通过创建Java类并用所需的元信息注释它们来映射域模型。 让我们从Breed类开始。

package com.blu.imdg.model;import org.apache.ignite.cache.query.annotations.QuerySqlField;import java.io.Serializable;public class Breed implements Serializable {@QuerySqlField(index = true)private Long id;@QuerySqlField(index = true)private String name;public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic String toString() {return "Breed{" +"id='" + id + '\'' +", name='" + name + '\'' +'}';}
}

请注意,@ QuerySqlField批注启用用于SQL查询的字段。

创建另一个名为Dog的类,并向其中添加以下内容。

package com.blu.imdg.model;import org.apache.ignite.cache.query.annotations.QuerySqlField;import java.io.Serializable;
import java.sql.Date;public class Dog implements Serializable {@QuerySqlField(index = true)private Long id;@QuerySqlField(index = true)private String name;@QuerySqlField(index = true)private Long breedid;@QuerySqlField(index = true)private Date birthdate;public Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Long getBreedid() {return breedid;}public void setBreedid(Long breedid) {this.breedid = breedid;}public Date getBirthdate() {return birthdate;}public void setBirthdate(Date birthdate) {this.birthdate = birthdate;}@Overridepublic String toString() {return "Dog{" +"id=" + id +", name='" + name + '\'' +", breedid=" + breedid +", birthdate=" + birthdate +'}';}
}

现在,让我们为之前创建的所有pojo创建Spring存储库。

package com.blu.imdg.repositories;import com.blu.imdg.model.Dog;
import org.apache.ignite.springdata.repository.IgniteRepository;
import org.apache.ignite.springdata.repository.config.RepositoryConfig;import java.util.List;@RepositoryConfig(cacheName = "DogCache")
public interface DogRepository extends IgniteRepository<Dog, Long> {List<Dog> getDogByName(String name);Dog getDogById (Long id);
}

应该指定@RepositoryConfig批注以将存储库映射到分布式缓存。 另外,我们有两个查找器方法getDogByName和getDogById用于查询缓存。

让我们为Breed域添加一个类似的存储库,如下所示:

package com.blu.imdg.repositories;import com.blu.imdg.model.Breed;
import org.apache.ignite.springdata.repository.IgniteRepository;
import org.apache.ignite.springdata.repository.config.Query;
import org.apache.ignite.springdata.repository.config.RepositoryConfig;
import org.springframework.data.domain.Pageable;import java.util.List;@RepositoryConfig(cacheName = "BreedCache")
public interface BreedRepository extends IgniteRepository<Breed, Long> {List<Breed> getAllBreedsByName (String name);@Query("SELECT id FROM Breed WHERE id = ?")List<Long> getById (long id, Pageable pageable);
}

在上面的BreedRepository接口中,我们还使用@Query(queryString)批注,如果由于方法调用而需要执行具体的SQL查询,则可以使用该批注。

第5步

让我们创建缓存配置类。 创建一个Ignite缓存配置类,并使用@EnableIgniteRepositories批注标记应用程序配置,如下所示:

package com.blu.imdg.repositories;import com.blu.imdg.model.Breed;
import com.blu.imdg.model.Dog;
import org.apache.ignite.Ignite;
import org.apache.ignite.Ignition;
import org.apache.ignite.configuration.CacheConfiguration;
import org.apache.ignite.configuration.IgniteConfiguration;
import org.apache.ignite.springdata.repository.config.EnableIgniteRepositories;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
@EnableIgniteRepositories
public class SpringAppConfig {@Beanpublic Ignite igniteInstance() {IgniteConfiguration cfg = new IgniteConfiguration();// Setting some custom name for the node.cfg.setIgniteInstanceName("springDataNode");// Enabling peer-class loading feature.cfg.setPeerClassLoadingEnabled(true);// Defining and creating a new cache to be used by Ignite Spring Data// repository.CacheConfiguration ccfgDog = new CacheConfiguration("DogCache");CacheConfiguration ccfgBreed = new CacheConfiguration("BreedCache");// Setting SQL schema for the cache.ccfgBreed.setIndexedTypes(Long.class, Breed.class);ccfgDog.setIndexedTypes(Long.class, Dog.class);cfg.setCacheConfiguration(new CacheConfiguration[]{ccfgDog, ccfgBreed});return Ignition.start(cfg);}
}

请注意,我们为Breed和Dog缓存使用了两个单独的CacheConfiguration。 另外,设置缓存的SQL模式。

一旦准备好使用所有配置和存储库,我们只需要在Spring应用程序上下文中注册配置即可。

package com.blu.imdg;import com.blu.imdg.model.Breed;
import com.blu.imdg.model.Dog;
import com.blu.imdg.repositories.BreedRepository;
import com.blu.imdg.repositories.DogRepository;
import com.blu.imdg.repositories.SpringAppConfig;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;import java.sql.Date;
import java.util.List;/*** Hello world!**/
public class App
{private static AnnotationConfigApplicationContext ctx;private static BreedRepository breedRepository;private static DogRepository dogRepository;public static void main( String[] args ){System.out.println( "Spring Data Example!" );ctx = new AnnotationConfigApplicationContext();ctx.register(SpringAppConfig.class);ctx.refresh();breedRepository = ctx.getBean(BreedRepository.class);dogRepository = ctx.getBean(DogRepository.class);//fill the repository with data and SaveBreed collie = new Breed();collie.setId(1L);collie.setName("collie");//save Breed with name colliebreedRepository.save(1L, collie);System.out.println("Add one breed in the repository!");// Query the breedList<Breed> getAllBreeds = breedRepository.getAllBreedsByName("collie");for(Breed breed : getAllBreeds){System.out.println("Breed:" + breed);}//Add some dogsDog dina = new Dog();dina.setName("dina");dina.setId(1L);dina.setBreedid(1L);dina.setBirthdate(new Date(System.currentTimeMillis()));//Save DinadogRepository.save(2L,dina);System.out.println("Dog dina save into the cache!");//Query the Dog DinaList<Dog> dogs = dogRepository.getDogByName("dina");for(Dog dog : dogs){System.out.println("Dog:"+ dog);}}
}

上面的代码片段非常简单。 首先,我们创建一个Spring注释的上下文并注册我们的存储库。 接下来,我们获得对BreedRepository和DogRepository的引用以插入一些数据。 要查询数据,我们使用基本的CRUD操作或方法,这些操作或方法将自动转换为Apache Ignite SQL查询:

List<Dog> dogs = dogRepository.getDogByName("dina");
for(Dog dog : dogs){System.out.println("Dog:"+ dog);
}

让我们构建并运行该应用程序。 执行以下命令。

mvn clean install
mvn exec:java -Dexec.mainClass=com.blu.imdg.App

您应该在控制台中找到许多日志消息。

日志消息确认两个条目(dina和colle-collie)已刷新到Ignite缓存中,并从缓存中检索了狗Dina 。 让我们通过Ignite Visor探索缓存。

为实体创建了两个不同的缓存:“品种”和“狗”。 如果我们扫描Dog缓存的缓存条目,则应在其上找到以下实体。

实体Dina已使用Breed牧羊犬的钥匙保存在缓存中。

如果要了解有关Apache Ignite的更多信息(使用JPA,Hibernate或MyBatis),请参阅《 使用Apache Ignite进行高性能内存计算 》一书。

翻译自: https://www.javacodegeeks.com/2017/07/apache-ignite-spring-data.html

使用Spring Data的Apache Ignite相关推荐

  1. apache ignite_使用Spring Data的Apache Ignite

    apache ignite Spring Data提供了一种统一而简便的方法来访问不同类型的持久性存储,关系数据库系统和NoSQL数据存储. 它位于JPA之上,添加了另一层抽象并定义了基于标准的设计以 ...

  2. 01 | Spring Data JPA 初识

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

  3. Spring Boot————Spring Data JPA简介

    引言 JPA是Java 持久化API的缩写,是一套Java数据持久化的规范, Spring Data Spring Data项目的目的是为了简化构建基于Spring 框架应用的数据访问技术,包括对关系 ...

  4. Spring Data JPA 实战

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

  5. Spring Data Neumann RC2, Moore SR7, and Lovelace SR17

    Releases Mark Paluch April 28, 2020 On behalf of the team, I'm pleased to announce Spring Data relea ...

  6. Spring Data Lovelace 正式发布

    Spring Data的项目开发者Mark Paluch在博客宣布了Spring Data Lovelace 正式发布,本次大版本一共关闭了936个问题单.这个版本的火车构建在刚刚发布的Spring ...

  7. Spring Data 什么是Spring Data 理解

    介绍 Spring Data的使命是为数据访问提供熟悉且一致的基于Spring的编程模型,同时仍保留底层数据存储的特​​殊特性. 它使数据访问技术,关系数据库和非关系数据库,map-reduce框架和 ...

  8. Spring Data(一)|什么是Spring Data 理解

    介绍 Spring Data的使命是为数据访问提供熟悉且一致的基于Spring的编程模型,同时仍保留底层数据存储的特​​殊特性. 它使数据访问技术,关系数据库和非关系数据库,map-reduce框架和 ...

  9. apache ignite_Kubernetes集群上的Apache Ignite和Spring第1部分:Spring Boot应用程序

    apache ignite 在之前的一系列博客中,我们在Kubernetes集群上启动了一个Ignite集群. 在本教程中,我们将使用先前在Spring Boot Application上创建的Ign ...

最新文章

  1. python3.7导入gevent模块报错的解决方案
  2. 爬虫爬评书吧_python scrapy+Mongodb爬取蜻蜓FM,酷我及懒人听书
  3. cocos2d-x 中的create函数的实现
  4. 设计模式(9)——模板方法模式
  5. Silverlight 2 中简单的2.5D控件
  6. DB2sql关键字——ALTER TABLE ....ACTIVATE NOT LOGGED INITIALLY WITH EMPTY TABLE
  7. QT Critical error detected c0000374
  8. Android中的三级缓存机制
  9. python在windows与linux下读取doc文件
  10. 论文 PPT 画图导出 PDF 注意事项
  11. c语言调用win10麦克风,Win10系统麦克风如何开启?Win10系统开启麦克风的方法
  12. 项目组内个角色的职责说明,仅针对当前项目组,其他项目组慎用,呵呵
  13. JAVA基础-Object类(简单说明),String类,.equals()方法
  14. 深入浅出WPF——XAML的优点
  15. 嵌入式Linux系统移植的四大步骤
  16. 微观经济学知识点(九)
  17. 《权力的游戏》蕴含的管理经
  18. GR-Fusion:强鲁棒低漂移的多传感器融合系统(IROS2021)
  19. java毕业设计软件S2SH人力资源管理系统|人事薪资招聘oa人力请假考勤工资[包运行成功]
  20. 东华OJ 基础 49修理牛棚

热门文章

  1. Jsoup代码解读之二-DOM相关对象
  2. javaWeb服务详解(含源代码,测试通过,注释)
  3. Math中的常用方法
  4. mybatisplus 强制制空 空覆盖原来的字符串
  5. 服务器复制不了文档,服务器复制粘贴不了
  6. 反射和配置文件的实际应用
  7. 基本数据类型与字符串的转换
  8. eclipse运行报java.lang.OutOfMemoryError: PermGen space解决方法
  9. sqlserver安装教程
  10. 两个时间之间是多少小时_那是两个小时我不会回来