什么是Spring Data?
(这与“学生计划”有关,稍后我将重新讨论该主题。)
Spring Data在最近的几次采访中获得通过。 什么是Spring Data ?
为了回答这个问题,让我们考虑持久性的标准方法–所有访问都是通过数据访问对象 (DAO)进行的。 这将系统的其余部分与持久性机制的特定细节完全隔离开来。 这听起来很容易,但是任何曾经做过一个不平凡的项目的人都知道这是一个很大的麻烦。
DAO代码很无聊。
它是单调的,它具有很多非常相似的代码,并且轻微的错误可能会导致很多损坏。 更糟糕的是,它违反了“ 不要自己重复” (DRY)的原则,因为大多数信息已在JPA批注中捕获。
这是一个很大的问题,已经有多年的代码生成工具了。 从理论上讲,他们解决了问题,但在实践中,他们介绍了自己的问题。 例如,需要自定义配置文件或注释。
将接口用作DRY合同
Java世界中最终的DRY合同是什么? 这很简单–它是一个接口。 给定一个接口和一个模板,我们可以使用CGLib在应用程序启动过程中即时生成必要的类。 虽然性能略有下降,但与优点相比还是比较适中的。
学生.java
@Entity
public class Student {private Integer id;private String uuid;private String name;private String emailAddress;private Integer creditHours;@Idpublic Integer getId() { return id; }public void setId(Integer id) { this.id = id; }@Column(unique=true)public String getUuid() { return uuid; }public void setUuid(String uuid) { this.uuid = uuid; }@Columnpublic String getName() { return name; }public void setName(String name) { this.name = name; }@Column(unique=true)public String getEmailAddress() { return emailAddress; }public void setEmailAddress(String emailAddress) { this.emailAddress; }@Columnpublic Integer getCreditHours() { return creditHours; }public void setCreditHours(Integer creditHours) { this.creditHours = creditHours; }
}
我们的界面会是什么样?
仓库/StudentRepository.java
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;@Repository
public interface StudentRepository extends CrudRepository<Student, Integer> {// this could also be getByUuid() or fetchByUuid() - all are recognizedStudent findStudentByUuid(String uuid);Student findStudentByEmailAddress(String emailAddress);List<Student> findStudentsByNameLike(String pattern);// we can use a custom query@Query("select s from Student s where s.creditHours < 15")List<Student> findFreshmen();
}
等等。 总共有15个谓词可以单独使用或组合使用。
- 和
- 要么
- 之间
- 少于
- 比...更棒
- 一片空白
- IsNotNull
- 不为空
- 喜欢
- 不喜欢
- 按订单
- 不
- 在
- 不在
- 忽略大小写
注意,没有必要实现此接口! CGLib为我们解决了这一问题。
定制方法
有时我们需要编写我们自己的DAO方法。 它们很容易集成到生成的代码中。
public interface StudentExtras {Student flogStudent(Student student);
}@Repository
public interface StudentRepository extends CrudRepository<Student, Integer>, <em>StudentExtras</em> { }// this class does NOT implement StudentRepository!
public class StudentRepositoryImpl implements StudentExtras {public Student flogStudent(Student student) { ... }
}
自定义方法必须是特定的类(由于按约定进行配置),但不受其他限制。
NoSQL
Spring Data还透明地支持NoSQL数据库:Mondo(文档),Neo4j(图形),Redis(键值),Hadoop(映射减少)和GemFire。
分页
最后,我们有分页的问题。 用户界面通常仅查看可用信息的子集,例如25个项目的页面。 分页并不困难,只是无聊且容易出错。
Spring Data通过扩展PagingAndSortingRepository接口而不是CrudRepository接口来支持分页。
翻译自: https://www.javacodegeeks.com/2013/12/what-is-spring-data.html
什么是Spring Data?相关推荐
- Spring Boot整合Spring Data JPA操作数据
一. Sping Data JPA 简介 Spring Data JPA 是 Spring 基于 ORM 框架.JPA 规范的基础上封装的一套 JPA 应用框架,底层使用了 Hibernate 的 J ...
- Spring Data JPA 五分钟快速入门和实践
Spring Data JPA(类似于Java Web 中的 DAO) 操作声明持久层的接口(Repository) 三个核心接口: CrudRepository PagingAndSortingRe ...
- java 整合solr_SpringBoot整合Spring Data Solr
此文不讲solr相关,只讲整合,内容清单如下 1. maven依赖坐标 2. application.properties配置 3. Java Config配置 1. maven坐标 org.spri ...
- Spring Data JPA(官方文档翻译)
关于本书 介绍 关于这本指南 第一章 前言 第二章 新增及注意点 第三章 项目依赖 第四章 使用Spring Data Repositories 4.1 核心概念 4.2 查询方法 4.3 定义rep ...
- Hibernate、JPA、Spring Data JPA,傻傻分不清
国庆假期接近尾声,明天最后一天了,要开始收收心啦- 今天讲讲一个初学者(或许一些老手)可能没去搞懂的几个概念:Hibernate.JPA.Spring Data JPA 之间的关联. 嘿嘿,前段时间有 ...
- Spring Data JPA 与 MyBatis 对比,你喜欢用哪个?
来源:jianshu.com/p/3927c2b6acc0 概述 Spring Data JPA是Spring Data的子模块.使用Spring Data,使得基于"repositorie ...
- elasticsearch之hello(spring data整合)
1.书写pom.xml文件 <dependencies><dependency><groupId>org.springframework.data</grou ...
- Spring Boot 、Spring Data JPA、Hibernate集成
###什么是JPA JPA是用于管理Java EE 和Java SE环境中的持久化,以及对象/关系映射的JAVA API 最新规范为"JSR 338:Java Persistence 2.1 ...
- Spring Data JPA例子[基于Spring Boot、Mysql]
关于Spring Data Spring社区的一个顶级工程,主要用于简化数据(关系型&非关系型)访问,如果我们使用Spring Data来开发程序的话,那么可以省去很多低级别的数据访问操作,如 ...
- 一步步学习 Spring Data 系列之JPA(一)
2019独角兽企业重金招聘Python工程师标准>>> 大概有半年多没有写博客了,主要是最近忙于工作,也没来得及与大家分享技术.当然现在的技术大多都有人写其博客分享了,也找不到合适写 ...
最新文章
- ORM是进化还是倒退?
- 6款强大的jQuery插件 创建和加强网站布局
- 战棋类中实现的移动范围
- 在互联网公司工作是种怎样的体验?
- 第十一届蓝桥杯省赛C++组试题 第3题 求阴影面积
- 如何抓取所有域用户的hash(win2008--win2012)
- 苹果或已放弃3月发布廉价新iPhone;贾跃亭回应家人巨额索赔;微软不再继续开发 Visual Basic | 极客头条...
- java并发编程(7)-- 线程 自旋锁
- 国内的商业与开源 CMS
- ideaIU-2017安装破解及汉化全包
- IOS 中json解析异常Domain=NSCocoaErrorDomain Code=3840之诡异事件
- GTK开发(二)控件和布局
- Occupancy Flow: 4D Reconstruction by Learning Particle Dynamics(1)
- 用户日活月活怎么统计 - Redis HyperLogLog 详解
- 联想笔记本Ideapad300S-14ISK安装固态硬盘和win10
- 链路聚合技术及其配置
- 如何使用gcore以及viewcore排查问题
- 日文输入常见问题解决
- Android Studio Chipmunk | 2021.2.1 JNI
- 免费空间/硬盘/相册的集合。。。
热门文章
- anroid 内存溢出 Bitmap OutOfMemoryError
- oracle中join另一个表后会查询不出一些数据_面试必备 | 8个Hive数据仓工具面试题锦集!...
- 网络——连接到server
- 知识复习(LDT+TSS+GATE+INTERRUPT)
- Java Springboot应用部署
- drill apache_Apache Drill:如何创建新功能?
- apache camel_带有调试器的Apache Camel Eclipse工具
- jpa 实体映射视图_JPA教程:实体映射-第2部分
- HTTP方法:幂等性和安全性
- visualvm远程jvm_如何使用VisualVM监视服务器上的多个JVM