SpringData_Repository接口概述
-
Repository 接口是 Spring Data 的一个核心接口,它不提供任何方法,开发者需要在自己定义的接口中声明需要的方法 public interface Repository<T, ID extends Serializable> { }
- Spring Data可以让我们只定义接口,只要遵循 Spring Data的规范,就无需写实现类。
-
与继承 Repository 等价的一种方式,就是在持久层接口上使用 @RepositoryDefinition 注解,并为其指定 domainClass 和 idClass 属性。如下两种方式是完全等价的
Repository 的子接口
- 基础的 Repository 提供了最基本的数据访问功能,其几个子接口则扩展了一些功能。它们的继承关系如下:
1.Repository: 仅仅是一个标识,表明任何继承它的均为仓库接口类
2.CrudRepository: 继承 Repository,实现了一组 CRUD 相关的方法
3.PagingAndSortingRepository: 继承 CrudRepository,实现了一组分页排序相关的方法
4.JpaRepository: 继承 PagingAndSortingRepository,实现一组 JPA 规范相关的方法
5.自定义的 XxxxRepository 需要继承 JpaRepository,这样的 XxxxRepository 接口就具备了通用的数据访问控制层的能力。
6.JpaSpecificationExecutor: 不属于Repository体系,实现一组 JPA Criteria 查询相关的方法
SpringData 方法定义规范
- 简单条件查询:查询某一个实体类或者集合
- 按照 Spring Data 的规范,查询方法以 find | read | get 开头, 涉及条件查询时,条件的属性用条件关键字连接,要注意的是:条件属性以首字母大写。
-
1
例如:定义一个 Entity 实体类
class
User{
private
String firstName;
private
String lastName; } 使用And条件连接时,应这样写: findByLastNameAndFirstName(String lastName,String firstName); 条件的属性名称与个数要与参数的位置与个数一一对应
支持的关键字
Sample | JPQL snippet | |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Keyword | Sample | JPQL snippet |
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
好了废话了这么多直接上代码:
1.首先我们需要定义一个实体Person:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | package com.fxr.springdata; import java.util.Date; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.Table; @Table (name= "JPA_PERSONS" ) @Entity public class Person { private Integer id; private String lastName; private String email; private Date birth; @GeneratedValue @Id public Integer getId() { return id; } public void setId(Integer id) { this .id = id; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this .lastName = lastName; } public String getEmail() { return email; } public void setEmail(String email) { this .email = email; } public Date getBirth() { return birth; } public void setBirth(Date birth) { this .birth = birth; } @Override public String toString() { return "Person [id=" + id + ", lastName=" + lastName + ", email=" + email + ", birth=" + birth + "]" ; } } |
2.我们需要写一个PersonRepsotory接口来实现JpaRepository<Person,Integer>,传的两个泛型第一个是实体类,第二个是主键的类型
1 2 3 4 5 6 7 8 9 10 11 | package com.fxr.springdata; import org.springframework.data.jpa.repository.JpaRepository; public interface PersonRepsotory extends JpaRepository<Person,Integer>{ //根据lastName来获取对应的Person Person getByLastName(String lastName); } |
3.编写测试类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | package com.fxr.test; import java.sql.SQLException; import javax.sql.DataSource; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.fxr.springdata.Person; import com.fxr.springdata.PersonRepsotory; public class SpringDataTest { private ApplicationContext ctx = null ; private PersonRepsotory personRepsotory; { ctx = new ClassPathXmlApplicationContext( "applicationContext.xml" ); personRepsotory = ctx.getBean(PersonRepsotory. class ); } //测试配置的数据源成功没有成功 @Test public void testDataSource() throws SQLException{ DataSource dataSource = ctx.getBean(DataSource. class ); System.out.println(dataSource.getConnection()); } @Test public void testHelloWorldSpringData(){ System.out.println(personRepsotory.getClass().getName()); Person person = personRepsotory.getByLastName( "sunwukong" ); System.out.println(person); } } |
打印出结果,就说明我们的程序运行成功
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步