[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");
}
}
[Spring Data Repositories]学习笔记--使用现有的repository的更多相关文章
- [Spring Data Repositories]学习笔记--为repository添加通用的方法
如果想把一个方法加到所有的repository中,用前一篇提到的方法就不合适了. 英文原版,请看 http://docs.spring.io/spring-data/data-mongo/docs/1 ...
- [Spring Data Repositories]学习笔记--定义自己的repository
有时,我们会需要用到自己定义的一些查询方法,可以按照下面几步进行. 1. 定义一个包含该方法的接口 Interface UserRepositoryCustom { public void someC ...
- 031 Spring Data Elasticsearch学习笔记---重点掌握第5节高级查询和第6节聚合部分
Elasticsearch提供的Java客户端有一些不太方便的地方: 很多地方需要拼接Json字符串,在java中拼接字符串有多恐怖你应该懂的 需要自己把对象序列化为json存储 查询到结果也需要自己 ...
- [Spring Data MongoDB]学习笔记--MongoTemplate查询操作
查询操作主要用到两个类:Query, Criteria 所有的find方法都需要一个query的object. 1. 直接通过json来查找,不过这种方式在代码中是不推荐的. BasicQuery q ...
- spring data jpa 学习笔记
springboot 集成 springData Jpa 1.在pom.xml添加依赖 <!-- SpringData-Jpa依赖--> <dependency <groupI ...
- [Spring Data MongoDB]学习笔记--MongoTemplate插入修改操作
插入操作: 直接给个例子 import static org.springframework.data.mongodb.core.query.Criteria.where; import static ...
- [Spring Data MongoDB]学习笔记--_id和类型映射
_id字段的映射: MongoDB要求所有的document都要有一个_id的字段. 如果我们在使用中没有传入_id字段,它会自己创建一个ObjectId. { , "accounts&qu ...
- [Spring Data MongoDB]学习笔记--牛逼的MongoTemplate
MongoTemplate是数据库和代码之间的接口,对数据库的操作都在它里面. 注:MongoTemplate是线程安全的. MongoTemplate实现了interface MongoOperat ...
- [Spring Data MongoDB]学习笔记--建立数据库的连接
1. 有了上一篇的Mongo后,连接数据库我们还需要更多的信息,比如数据库名字,用户名和密码等. 我们可以继续来配置MongoDbFactory的实例. public interface MongoD ...
随机推荐
- Splunk 会议回想: 大数据的关键是机器学习
作者 Jonathan Allen ,译者 张晓鹏 Splunk的用户大会已经接近尾声.三天时间的会议里,共进行了160多个主题研讨.涵盖了从安全.运营到商业智能.甚至包含物联网,会议中一遍又一遍出现 ...
- django迁移model到别的app中
举例: 移动 users.AccessKey 到 authentication.AccessKey中 1. 移动models到新的app中 $ mv users/models/access_key.p ...
- iOS怎样找到自己的沙盒
iOS怎样找到自己的沙盒 在ios开发我们会用到沙盒,因为自己对沙盒理解的不够,所以找不到沙盒文件在哪里,当然要知道路径了 比如我的路径 NSString* cachepath = [NSHomeDi ...
- EJB学习笔记之十(BMT事务和CMT事务)
1.前言 前两篇博客主要介绍了与事务相关的知识.比如事务的一些特性,以及并发产生的问题.本篇来解说一下EJB中两种处理事务的方式.一种是以生命式方式来管理事务(CMT):还有一种则是在EJB内部使用 ...
- 8_陀螺仪MPU6050和PWM控制在STM32F4-Discovery开发板上的实现
非常早曾经就把圆点博士的程序从STM32F103移植到STM32F4_Discovery (STM32F407), battery.陀螺仪和PWM电机控制的程序都已经測试完成,执行有一段时间,正常.以 ...
- ListView加边框
在drawable加一个xml文件 内容如下:<?xml version="1.0" encoding="UTF-8"?><shape xml ...
- 【Python3 爬虫】09_正则表达式(re.math()、re.search()、re.sub()、全局匹配函数)
re.math()函数 从源字符串的起始位置匹配一个模式 语法:re.match(pattern, string, flag) 第一个参数代表对应的正则表达式,第二个参数代表对应的源字符,第三个参数是 ...
- detach与remove区别,以及detach保留被删除的元素数据,使用
detach() 会保留所有绑定的事件.附加的数据,这一点与 remove() 不同. remove掉元素后,元素再也找不回了.但是detach还能找回来,还能保留下来. 实现方式如下代码: < ...
- <转>巧用notepad++ 批量转换ansi 和 utf8
原方出处:http://stackoverflow.com/questions/7256049/notepad-converting-ansi-encoded-file-to-utf-8 Here s ...
- mongoDB group命令详解
http://heipark.iteye.com/blog/1167948 http://rjhym.iteye.com/blog/1224200 http://blog.163.com/ ...