首页 > 代码库 > [Spring Data Repositories]学习笔记--使用现有的repository

[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来进行标记。

@NoRepositoryBeanInterface 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 {@Autowiredprivate PersonRepository repository;public void doSomething(){List<Person> persons = repository.findByLastname("Matthews");}   }