springboot repository,spring data repository
目录
一、一个属性、一个属性的存取二、使用杰克逊哈希默存取对象三、使用再储存库的对象操作通过集成弹簧-启动-启动器-数据-雷迪斯之后一共有三种存储散列数据操作方式可以供我们选择
一个属性、一个属性的存取使用杰克逊哈希默存取对象使用再储存库的对象操作(本节核心内容)
一、一个属性、一个属性的存取
这种方式在本专栏上一文章中的代码,已经得以体现。
@ test public void HashOperations(){ Person Person=新人(‘科比’,‘拜伦’);person.setAddress(新地址(洛杉矶,美国));//使用混杂的方法存储对象数据(一个属性一个属性的存,下节教大家简单的方法)hashoperations。put( hash : player , firstname ,person。获取名字());有希望。put( hash : player , lastname ,person。get姓氏());有希望。放( hash : player , address ,person。get address());String first name=(String)has hoperations。get(哈希:玩家,名字);System.out.println(名字);}数据在存储数据库里面存储结构是下面这样的
一个混杂代表一个对象的数据一个对象有多个属性关键、价值键值对数据,每一组键值对都可以单独存取
二、使用Jackson2HashMapper存取对象
上一小节我们操作混杂对象的时候是一个属性一个属性设置的,那我们有没有办法将对象一次性混杂入库呢?我们可以使用杰克逊哈斯操作和杰克逊哈希默
导入静态org。朱尼特。木星。API。断言。断言等于;@ spring boot test public class redisconfigtest 3 { @ Resource(name= redis template )private hashoperationstring,string,Object jacksonHashOperations//注意这里的假的,下文会讲解private HashMapperObject,String,Object Jackson 2 hashmapper=new Jackson 2 hashmapper(false);@ Test public void testHashPutAll(){ Person Person=新人(科比,科比);人。setid(‘科比’);person.setAddress(新地址(洛杉矶,美国));//将对象以混杂的形式放入存储数据库MapString,Object mapped hash=Jackson 2 hash mapper。散列(人);jacksonhashoperations。putall(玩家: 人。getid()、mapped hash);//将对象从数据库取出来MapString,Object loaded hash=jacksonhashoperations。参赛作品(玩家: 人。getid());对象映射=Jackson 2哈希映射器。from hash(加载的hash);Person getback=new ObjectMapper().convertValue(地图,人物。类);//Junit5,验证放进去的和取出来的数据一致断言等于(人。获取名字()、获取返回。获取名字());}}使用这种方式可以一
次性的存取java 对象为redis数据库的hash数据类型。需要注意的是:执行上面的测试用例,Person和Address一定要有public无参构造方法,在将map转换成Person或Address对象的时候用到,如果没有的话会报错。
当new Jackson2HashMapper(false)
,注意属性对象Address的存储格式(两张图对比观察)
当new Jackson2HashMapper(true)
,注意属性对象Address的存储格式(两张图对比观察)
需要注意的是:使用这种方法存储hash数据,需要多出一个键值对@class
说明该hash数据对应的java类。在反序列化的时候会使用到,用于将hash数据转换成java对象。
三、使用RedisRepository的对象操作
下面为大家介绍使用RedisRepository进行redis数据操作,它不只是能简单的存取数据,还可以做很多的CURD操作。使用起来和我们用JPA进行关系型数据库的单表操作,几乎是一样的。
首先,我们需要在需要操作的java实体类上面加上@RedisHash
注解,并使用@Id
为该实体类指定id。是不是和JPA挺像的?
@RedisHash("people") //注意这里的person,下文会说明public class Person { @Id String id; //其他和上一节代码一样}
然后写一个PersonRepository ,继承CrudRepository,是不是也和JPA差不多?
//泛型第二个参数是id的数据类型public interface PersonRepository extends CrudRepository<Person, String> { // 继承CrudRepository,获取基本的CRUD操作}
CrudRepository默认为我们提供了下面的这么多方法,我们直接调用就可以了。
在项目入口方法上加上注解@EnableRedisRepositories(笔者测试,在比较新的版本中这个注解已经不需要添加了,默认支持),然后进行下面的测试
@SpringBootTestpublic class RedisRepositoryTest { @Resource PersonRepository personRepository; @Test public void test(){ Person rand = new Person("zimug", "汉神"); rand.setAddress(new Address("杭州", "中国")); personRepository.save(rand); //存 Optional<Person> op = personRepository.findById(rand.getId()); //取 Person p2 = op.get(); personRepository.count(); //统计Person的数量 personRepository.delete(rand); //删除person对象rand }}
测试结果:需要注意的是RedisRepository在存取对象数据的时候,实际上使用了redis的2种数据类型
第一种是Set类型,用于保存每一个存入redis的对象(Person)的id。我们可以利用这个Set实现person对象集合类的操作,比如说:count()统计,统计redis数据库中一共保存了多少个person。注意:下图中set集合的key名称,就是通过上文代码中@RedisHash("people")
指定的。
第二种是Hash类型,是用来保存Java对象的,id是RedisRepository帮我们生成的,这个id和上图中set集合中保存的id是一致的。
到此这篇关于springboot使用RedisRepository操作数据的实现的文章就介绍到这了,更多相关springboot RedisRepository操作内容请搜索盛行IT以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。