[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");
}   
}

 

posted @ 2014-08-05 15:48  lemon_bar  阅读(1356)  评论(0编辑  收藏  举报