您的位置:首页 > 编程语言 > Java开发

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

2014-08-05 15:48 501 查看
以下内容是在学习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");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: