以下内容是在学习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. Splunk 会议回想: 大数据的关键是机器学习

    作者 Jonathan Allen ,译者 张晓鹏 Splunk的用户大会已经接近尾声.三天时间的会议里,共进行了160多个主题研讨.涵盖了从安全.运营到商业智能.甚至包含物联网,会议中一遍又一遍出现 ...

  2. django迁移model到别的app中

    举例: 移动 users.AccessKey 到 authentication.AccessKey中 1. 移动models到新的app中 $ mv users/models/access_key.p ...

  3. iOS怎样找到自己的沙盒

    iOS怎样找到自己的沙盒 在ios开发我们会用到沙盒,因为自己对沙盒理解的不够,所以找不到沙盒文件在哪里,当然要知道路径了 比如我的路径 NSString* cachepath = [NSHomeDi ...

  4. EJB学习笔记之十(BMT事务和CMT事务)

     1.前言 前两篇博客主要介绍了与事务相关的知识.比如事务的一些特性,以及并发产生的问题.本篇来解说一下EJB中两种处理事务的方式.一种是以生命式方式来管理事务(CMT):还有一种则是在EJB内部使用 ...

  5. 8_陀螺仪MPU6050和PWM控制在STM32F4-Discovery开发板上的实现

    非常早曾经就把圆点博士的程序从STM32F103移植到STM32F4_Discovery (STM32F407), battery.陀螺仪和PWM电机控制的程序都已经測试完成,执行有一段时间,正常.以 ...

  6. ListView加边框

    在drawable加一个xml文件 内容如下:<?xml version="1.0" encoding="UTF-8"?><shape xml ...

  7. 【Python3 爬虫】09_正则表达式(re.math()、re.search()、re.sub()、全局匹配函数)

    re.math()函数 从源字符串的起始位置匹配一个模式 语法:re.match(pattern, string, flag) 第一个参数代表对应的正则表达式,第二个参数代表对应的源字符,第三个参数是 ...

  8. detach与remove区别,以及detach保留被删除的元素数据,使用

    detach() 会保留所有绑定的事件.附加的数据,这一点与 remove() 不同. remove掉元素后,元素再也找不回了.但是detach还能找回来,还能保留下来. 实现方式如下代码: < ...

  9. <转>巧用notepad++ 批量转换ansi 和 utf8

    原方出处:http://stackoverflow.com/questions/7256049/notepad-converting-ansi-encoded-file-to-utf-8 Here s ...

  10. mongoDB group命令详解

    http://heipark.iteye.com/blog/1167948       http://rjhym.iteye.com/blog/1224200 http://blog.163.com/ ...