以下内容是在学习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的更多相关文章

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

    如果想把一个方法加到所有的repository中,用前一篇提到的方法就不合适了. 英文原版,请看 http://docs.spring.io/spring-data/data-mongo/docs/1 ...

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

    有时,我们会需要用到自己定义的一些查询方法,可以按照下面几步进行. 1. 定义一个包含该方法的接口 Interface UserRepositoryCustom { public void someC ...

  3. 031 Spring Data Elasticsearch学习笔记---重点掌握第5节高级查询和第6节聚合部分

    Elasticsearch提供的Java客户端有一些不太方便的地方: 很多地方需要拼接Json字符串,在java中拼接字符串有多恐怖你应该懂的 需要自己把对象序列化为json存储 查询到结果也需要自己 ...

  4. [Spring Data MongoDB]学习笔记--MongoTemplate查询操作

    查询操作主要用到两个类:Query, Criteria 所有的find方法都需要一个query的object. 1. 直接通过json来查找,不过这种方式在代码中是不推荐的. BasicQuery q ...

  5. spring data jpa 学习笔记

    springboot 集成 springData Jpa 1.在pom.xml添加依赖 <!-- SpringData-Jpa依赖--> <dependency <groupI ...

  6. [Spring Data MongoDB]学习笔记--MongoTemplate插入修改操作

    插入操作: 直接给个例子 import static org.springframework.data.mongodb.core.query.Criteria.where; import static ...

  7. [Spring Data MongoDB]学习笔记--_id和类型映射

    _id字段的映射: MongoDB要求所有的document都要有一个_id的字段. 如果我们在使用中没有传入_id字段,它会自己创建一个ObjectId. { , "accounts&qu ...

  8. [Spring Data MongoDB]学习笔记--牛逼的MongoTemplate

    MongoTemplate是数据库和代码之间的接口,对数据库的操作都在它里面. 注:MongoTemplate是线程安全的. MongoTemplate实现了interface MongoOperat ...

  9. [Spring Data MongoDB]学习笔记--建立数据库的连接

    1. 有了上一篇的Mongo后,连接数据库我们还需要更多的信息,比如数据库名字,用户名和密码等. 我们可以继续来配置MongoDbFactory的实例. public interface MongoD ...

随机推荐

  1. C# 中 in,out,ref 的作用与区别

    In:过程不会改写In的内容 Out和out:传入的值不会被过程所读取,但过程可以写 ref:传入的值,过程会读,也会写 就象你把布料送到裁缝的一个收料箱(裁缝用这个区别是哪家客户) IN:这块布料, ...

  2. 各版本JDK1.5-1.8新特性

    概述 一jdk15新特性 泛型 foreach 自动拆箱装箱 枚举 静态导入Static import 元数据Metadata 线程池 Java Generics 二jdk16新特性 Desktop类 ...

  3. XYWi-Fi v2.0 简单的笔记本无线热点分享工具【Win】

    [软件名称]XYWi-Fi [版本号]v2.0 [适用系统]Windows 7/8/8.1/10 [功能特性]简单的笔记本无线热点分享工具 [下载地址]pan.baidu.com/s/1mgmOpJi ...

  4. EMQ ---100万线连接测试说明

    注解 EMQ 2.0 消息服务器默认设置,允许最大客户端连接是512,因为大部分操作系统 ‘ulimit -n’ 限制为1024. EMQ 消息服务器1.1.3版本,连接压力测试到130万线,8核心/ ...

  5. php常见的类库-文件操作类

    工作中经常用php操作文件,因此把常用文件操作整理出来: class hylaz_file{ /** * Read file * @param string $pathname * @return s ...

  6. Creating Dialogbased Windows Application (1) / 创建基于对话框的Windows应用程序(一)新建窗体 / VC++, Windows

    创建基于对话框的Windows应用程序(一) —— 新建窗体 1.新建一个Visual C++的Empty Project.  2.在Solution Explorer中右键Add New Item, ...

  7. deepin linux下eclipse c/c++ 调试开源代码

    1.deepin linux 下使用eclipse c/c++ 调试2. 编译选项,-g3 -O0,-g3表示输出调试信息,-O0不优化代码(第一个字母o的大写,第二个是数字0) 3.必备环境: gd ...

  8. 收集别人的一些第三方(MARK)

    本文是恢复数据,数据丢失前,原文由 @shiren1118 发表于 2012-12-28,对 Ruby 社区对 iOS 开发感兴趣的朋友来说,非常有价值. iosboilerplate这个选项是比较成 ...

  9. [Android]生成heap dump文件(.hprof)

    Android生成heap dump文件(.hprof) 一个heap dump就是一个程序heap的快照,能够获知程序的哪些部分正在使用大部分的内存. 它保存为一种叫做HPROF的二进制格式.对于A ...

  10. springMVC集成mybatis-paginator实现分页

    mybatis-paginator下载地址:https://github.com/miemiedev/mybatis-paginator 1.引入maven依赖 <dependency> ...