[Spring Data Repositories]学习笔记--使用现有的repository

以下内容是在学习Spring-Data-mongoDB中的Spring Data Repositories时做的一些笔记。备忘!

感觉学习还是看官方的资料比较透彻一些。

Spring Data Repositories目的:减少重复的持久化代码。

常用的几个repository interface,

Repository <-- CurdRepository <-- PagingAndSortingRepository

最后一个主要是用来做分页和排序用的。

Repository使用步骤

1. 定义接口

public Interface PersonRepository extends Repository<User,Long>{...}

如果我们不想暴漏从Repository继承来的所有方法,可以用@NoRepositoryBean来进行标记。

@NoRepositoryBean
Interface MyBaseRepository<T,ID extends Serializable> extends Repository<T,ID>{
T findOne(ID id);
T save(T entity);
}

Interface UserRepository extends MyBaseRepository<User,Long>{
User findByEmailAddress(EmailAddress emailAddress);
}

这样UserRepository里面就只有3个方法。

2. 为上面定义的接口定义方法

List<Person> findByLastname(String lastname);

Spring可以根据方法的名字来进行查找

public interface PersonRepository extends Repository<User,Long>{

List<Person> findByEmailAddressAndLastname(EmailAddress emailAddress, String lastname);

List<Person> findDistinctPeopleByLastnameOrFirstname(String lastname, String firstname);

List<Person> findByLastnameAndFirstnameAllIgnoreCase(String lastname, String firstname);

List<Person> findByLastnameOrderByFirstnameAsc(String lastname);
}
  • AND, OR, Between, LessThan, GreaterThan, 哪些操作符可用与所用的数据库有关。
  • IgnoreCase and AllIgnoreCase
  • OrderBy (Asc or Desc)

支持多级属性,比如根据x.address.zipCode进行搜索, 可用

List<Person> findByAddressZipCode(ZipCode zipCode);

或者

List<Person> findByAddress_ZipCode(ZipCode zipCode);

注意:如果你的属性名称中包含_,比如first_name,需要用两个_来代表是下划线。

3. 为接口配置Spring(只列出xml, base-package是接口所在的包名)

<jpa:repositories base-package="com.acme.repositories"/>

可以用include-filter/exclude-filter来对接口进行过滤

<repositories base-package="com.acme.repositories">
<context:exclude-filter type="regex" expression=".*SomeRepository"/>
</repositories>

4. 通过注入方式获得repository的实例,进行使用

public class SomeClient {

@Autowired
private PersonRepository repository;

public void doSomething(){
List<Person> persons = repository.findByLastname("Matthews");
}
}

[Spring Data Repositories]学习笔记--使用现有的repository

时间: 2024-10-09 05:37:28

[Spring Data Repositories]学习笔记--使用现有的repository的相关文章

[Spring Data Repositories]学习笔记--为repository添加通用的方法

如果想把一个方法加到所有的repository中,用前一篇提到的方法就不合适了. 英文原版,请看 http://docs.spring.io/spring-data/data-mongo/docs/1.5.2.RELEASE/reference/html/repositories.html#repositories.custom-behaviour-for-all-repositories 1. 定义自己的repository,要从基础的repository进行继承. public interf

[Spring Data Repositories]学习笔记--定义自己的repository

有时,我们会需要用到自己定义的一些查询方法,可以按照下面几步进行. 1. 定义一个包含该方法的接口 Interface UserRepositoryCustom { public void someCustomMethod(User user); } 2. 定义实现 class UserRepositoryImpl implements UserRepositoryCustom { public void someCustomMethod(User user){ //Your custom im

Spring In Action 4 学习笔记(一)Spring概览

Spring的核心概念就是DI和AOP,是Spring实现所有复杂华丽框架的基石. 相对于EJB等重型框架,Spring更加轻量化,可以强化普通的POJO对象. 1.简化JAVA开发 为了尽可能简化Java的开发,Spring遵循如下4个策略: Lightweight and minimally invasive development with POJOs 使用POJO类进行轻量化低侵入式的开发 Loose coupling through DI and interface orientati

Spring in Action 4th 学习笔记 之 AOP

先说说为什么需要AOP 最简单的一个例子就是日志记录,如果想记录一些方法的执行情况,最笨的办法就是修改每一个需要记录的方法.但这,真的很笨... 好的方法,应该是通过反射获取方法,然后去匹配,如果需要记录日志,那就调用日志方法即可. 这就是AOP 的Weaving,俗称编织.织入,就是将需要添加的功能编织到现有功能中,而不需要修改现有代码. 另一个例子,不那么大众的需求:我想给一个对象添加方法,怎么实现? 如果有学过js.Python等动态语言,你肯定知道它们支持给对象添加方法,直接添加即可.

Spring+SpringMVC+MyBatis集成学习笔记【一】

一,首先要清楚,SpringMVC其实就是Spring的一个组件       例如我们知道Spring中有类似于,AOP TX等等类似的组件,所以SpringMVC其实就是Spring的一个组件,是Spring框架的一部分,千万不要把SpringMVC当成是另一种框架!       所以在配置上,还是按照配置Spring的套路来,该配置监听,配置监听,该配置配置文件,配置配置文件,一切照旧 二,Spring在Web.xml中的配置       在Web.xml中配置Spring大致可以分为两点

[Big Data - Kafka] kafka学习笔记:知识点整理

一.为什么需要消息系统 1.解耦: 允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束. 2.冗余: 消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险.许多消息队列所采用的"插入-获取-删除"范式中,在把一个消息从队列中删除之前,需要你的处理系统明确的指出该消息已经被处理完毕,从而确保你的数据被安全的保存直到你使用完毕. 3.扩展性: 因为消息队列解耦了你的处理过程,所以增大消息入队和处理的频率是很容易的,只要另外增加处理过程即可. 4.

《Spring技术内幕》学习笔记

读源码之前先学习这本书,事半功倍!

《Python For Data Analysis》学习笔记-1

在引言章节里,介绍了MovieLens 1M数据集的处理示例.书中介绍该数据集来自GroupLens Research(http://www.groupLens.org/node/73),该地址会直接跳转到https://grouplens.org/datasets/movielens/,这里面提供了来自MovieLens网站的各种评估数据集,可以下载相应的压缩包,我们需要的MovieLens 1M数据集也在里面. 下载解压后的文件夹如下: 这三个dat表都会在示例中用到,但是我所阅读的<Pyt

Spring in Action 4th 学习笔记

约定: 一.@Xxx Class 表示被@Xxx注解的类.同理还有@Xxx注解的字段或方法. 例如:@Bean Method. 二.@Component Class 同时代指 @Controller.@Service.@Repository. All beans in a Spring application context are given an ID. -- 如果不指明,也会给定一个默认的ID:类名,首字母小写.[]上面这句,不适合XML方式,因为XML方式的默认ID是全路径再加上#{n}