SpringCloud(part10)Spring Data 与JPA,MongoDB,Redis
1.概述Spring Data
- 关于Spring Data
SpringCloud Data框架的目标是为数据的访问提供一个通过用的模型。对于程序员来说,不管访问数据库使用的是哪种技术,访问的是哪种数据库,使用了SpringData后,都可以用同样的方式,同样的代码风格来实现对它们的访问,这么数据库包括关系型数据库,非关系数据库。Spring Data 是以这些数据库访问技术进行封装,提供类似适配器功能,让我可以更加简单地访问数据库。
- Spring Data功能
- 提供数据与对象映射的抽象层,同一个对象可以映射为不同数据库的数据。
- 根据数据储存接口的方法名,自动实现数据查询。
- 为各个领域模型提供最基本的实现,例如像普通的增删改查功能。
- 可在原有的逻辑上,实现自定义的数据库操作逻辑
- Spring Data模块
Spring Data JPA :该模块提供了基本的数据操作功能,可减少数据访问层的开发工作量。
Spring Data MongoDB:使用该模块可轻松操作MongoDB
Spring Data Redis:使用该模块可操作Redis数据库。
2.利用SpringData JPA ,hibernate访问MySQL
- 简单demo
配置文件 yml:
server:port: 8081
spring:datasource:driver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql://localhost/springdatausername: rootpassword: 123456type: org.apache.commons.dbcp2.BasicDataSourcetomcat:max-idle: 10 # 设置最大等待连接数量,设0为没有限制max-active: 50 # 最大连接活动数max-wait: 10000 # 最大等待秒数 单位ms 超过时间会报错误信息initial-size: 5 # 数据库连接池初始化连接数
实体类(hibernate方式):
@Entity
@Table(name = "person")
public class Person implements Serializable {@Id@GeneratedValue(strategy = GenerationType.IDENTITY)private Integer pid;private String name;private Integer age;private String message;省略get和set方法
}
实现JpaRepository<Person,Integer>接口
public interface PersonRepository extends JpaRepository<Person,Integer> {
}
服务层:
@Service
public class PersonService {@Autowiredprivate PersonRepository personRepository;public List<Person> getPersons(){List<Person> personList=personRepository.findAll();return personList;}public Person save(String name){Person p=new Person();p.setName(name);p.setAge(21);p.setMessage("message");Person person=personRepository.save(p);return person;}
}
控制器:
@RestController
public class PersonController {@Autowiredprivate PersonService personService;@RequestMapping(value = "/getAll",method = RequestMethod.GET)public List<Person> getPersons(){List<Person> personList=personService.getPersons();return personList;}@RequestMapping("/addOne/{name}")public Person save(@PathVariable("name") String name){Person person=personService.save(name);return person;}
}
- 通过方法名查询
前面的Spring帮我们生成的代理类,虽然可以完成很多工作,但在实际应用开发时,不可避免要实现自己的逻辑存储逻辑。
public interface PersonRepository extends JpaRepository<Person,Integer>,PersonRepositoryCustom {// from person where name = ?List <Person> name(String name);// from person where name = ? and age =?List <Person> findByNameAndAge(String name,Integer age);}
- 自定义数据存储逻辑
//如果说以上的方法名也无法满足查询要求,可以编写原生的sql语句 @Query(value = "select name from person where pid=?1",nativeQuery = true) public String findNameById(Integer pid) ; //非原生 @Query(value = "select p.name from Person where p.age=?1",nativeQuery = true) public String findNameByAge(Integer age) ;
3.Spring Data JPA 访问Redis
- 添加依赖
<!--引入Spring Data Redis--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId><version>2.1.5.RELEASE</version> </dependency>
- 创建实体类
@RedisHash("PersonRedis") public class PersonRedis implements Serializable {@Idprivate Integer pid;@Indexed //为该字段建立索引private String name;private Integer age;
省略了set,get方法
}
- 定义接口
public interface PersonRepositoryRedis extends CrudRepository<PersonRedis,String> {//数据访问接口继承了CrudRepository,同样不需要任何的实现。//方法名的查询支持 And Or Is,Equals Top First等List<PersonRedis> findByName(String name); }
- 服务层访问
@Service public class PersonRedisService {@Autowiredprivate PersonRepositoryRedis repositoryRedis;public List<PersonRedis> getPersons(){Iterable<PersonRedis> persons=repositoryRedis.findAll();List<PersonRedis> datas=new ArrayList<PersonRedis>();for (Iterator<PersonRedis> it=persons.iterator();it.hasNext();){PersonRedis person=it.next();datas.add(person);}return datas;}public PersonRedis save(){PersonRedis personRedis=new PersonRedis();personRedis.setPid(1);personRedis.setName("redis");personRedis.setAge(21);return personRedis;} }
- 控制器调用
//查询Redis缓存数据库 @RequestMapping("/saveOne") public PersonRedis save(){PersonRedis personRedis= personRedisService.save();return personRedis; }
//此外还可以自定义Redis数据存储逻辑
SpringCloud(part10)Spring Data 与JPA,MongoDB,Redis相关推荐
- spring data使用操作mongodb数据库 springboot
在IDEA里面使用新建一个maven项目, 项目的结构是如图所示:(注意:springboot 项目中所有的组件必须位于application同级或者子包下才会被扫描到,不然就会报上面的错!) 导入相 ...
- 干货|一文读懂 Spring Data Jpa!
有很多读者留言希望松哥能好好聊聊 Spring Data Jpa!其实这个话题松哥以前零零散散的介绍过,在我的书里也有介绍过,但是在公众号中还没和大伙聊过,因此本文就和大家来仔细聊聊 Spring D ...
- 终于有人把Spring Data JPA 讲明白了!
01 什么是JPA? JPA的全称是 Java Persistence API , 中文的字面意思就是Java 的持久层 API , JPA 就是定义了一系列标准,让实体类和数据库中的表建立一个对应的 ...
- SpringBoot学习笔记:Spring Data Jpa的使用
更多请关注公众号 Spring Data Jpa 简介 JPA JPA(Java Persistence API)意即Java持久化API,是Sun官方在JDK5.0后提出的Java持久化规范(JSR ...
- 使用Spring访问Mongodb的方法大全——Spring Data MongoDB查询指南
1.概述 Spring Data MongoDB 是Spring框架访问mongodb的神器,借助它可以非常方便的读写mongo库.本文介绍使用Spring Data MongoDB来访问mongod ...
- hql实例 jpa_SpringBoot学习笔记九:Spring Data Jpa的使用
Spring Data Jpa 简介 JPA JPA(Java Persistence API)意即Java持久化API,是Sun官方在JDK5.0后提出的Java持久化规范(JSR 338,这些接口 ...
- Spring Data JPA - 参考文档-3
参考文档 4. JPA存储库 本章将指出JPA对知识库的支持.这建立在使用Spring Data Repositories中解释的核心存储库支持上.所以要确保你对这里解释的基本概念有一个很好的理解. ...
- Spring Data 什么是Spring Data 理解
介绍 Spring Data的使命是为数据访问提供熟悉且一致的基于Spring的编程模型,同时仍保留底层数据存储的特殊特性. 它使数据访问技术,关系数据库和非关系数据库,map-reduce框架和 ...
- Spring Data
目录 SpringData 开篇介绍 什么要用Spring Data(面试题) Spring Data特性和模块介绍 Spring Data介绍 Spring Data 主要模块 各模块使用率 Spr ...
- 使用PostgreSQL使用Spring Boot和JPA构建基本应用
"我喜欢编写身份验证和授权代码." 〜从来没有Java开发人员. 厌倦了一次又一次地建立相同的登录屏幕? 尝试使用Okta API进行托管身份验证,授权和多因素身份验证. 每个不平 ...
最新文章
- data lab 1(暂时只放题目)
- 栈----迷宫(Maze)
- Keras学习代码—github官网examples
- Hadoop Yarn容量调度器特点和分配算法介绍
- 你必须了解Spring的生态
- 如何在C#中使用反射获取集合元素类型
- Illustrator 教程,如何在 Illustrator 中锁定、分组和隐藏内容?
- Java多线程300毫秒_Java多线程小程序(输出每个线程的毫秒级时间)-Go语言中文社区...
- Silverlight入门
- 《商务与经济统计》学习笔记(一)---数据与统计资料
- mysql中文表头转为英文字名_中文名字转换英文名字
- 基于html的项目的选题报告,团队项目-选题报告
- 计算机芯片的形成和发展,计算机中将cpu集成在一块芯片上所形成的元器件是什么...
- 参考《机器学习实战》高清中文PDF+高清英文PDF+源代码
- 你了解函数调用过程吗?
- linux中apache与tomcat如何使用
- MySQL中利用经纬度计算两点之间的距离
- 网站另类推广玩法心得
- PTA---换硬币 (20 分)
- 通过存档数据和视频图像处理估计地铁留守乘客
热门文章
- 常用测试软件01——串口调试软件
- 苹果待处理订单要多久_一个订单管理系统帮你轻松应对复杂的生产订单管理
- BZOJ 1189 [HNOI2007]紧急疏散evacuate 二分+最大流
- 回归中的相关度和R平方值
- Ubuntu 15.10 x64 安装 Android SDK
- ICCV 2015 B-CNN细粒度分类
- Entry name ‘firebase-abt.properties‘ collided
- 数据湖统一存储在 OPPO 的实践
- css的盒子模型与定位机制解读随记
- 学习笔记-SNN用STDP法的MNIST数据集识别代码深入阅读