SpringDataJpa基础篇2:Repository接口及子接口

1、Repository接口概述

     Repository接口是Spring Data的一个核心接口,它不提供任何方法,开发者需要在自己定义的接口中声明需要的方法。

    Spring Data可以让我们只定义接口,只要遵循 Spring Data的规范,就无需写实现类。与继承 Repository等价的一种方式,就是在持久层接口上使用@RepositoryDefinition注解,并为其指定domainClass和idClass 属性。如下两种方式是完全等价的。

package org.springframework.data.repository;
import org.springframework.stereotype.Indexed;
/**
*<T, ID>中的T表示实体类的类型,ID表示注解的类型
*/
@Indexed
public interface Repository<T, ID> {

}

2、Repository的子接口

基础的Repository提供了最基本的数据访问功能,Repository接口仅仅是一个标识,表明任何继承它的均为仓库接口类。
Repository接口的子接口:
(1)CrudRepository接口继承Repository接口,实现了一组CRUD相关的方法; 
(2)PagingAndSortingRepository接口继承CrudRepository接口,实现了一组分页排序相关的方法;
(3)JpaRepository接口继承 PagingAndSortingRepository接口,实现一组 JPA 规范相关的方法; 
(4)JpaSpecificationExecutor接口:不属于Repository体系,实现一组 JPA Criteria 查询相关的方法。 

3、CrudRepository接口

 

package org.springframework.data.repository;
import java.util.Optional;
/**
 * CrudRepository接口继承Repository接口
*/
@NoRepositoryBean
public interface CrudRepository<T, ID> extends Repository<T, ID> {
	//保存一个实体类
	<S extends T> S save(S entity);
    //保存一个集合
	<S extends T> Iterable<S> saveAll(Iterable<S> entities);
   //根据主键id查询得到一个集合
	Optional<T> findById(ID id);
    //	主键id是否存在
	boolean existsById(ID id);
    //查询所有的
	Iterable<T> findAll();
    //根据id集合获取一个集合
	Iterable<T> findAllById(Iterable<ID> ids);
    //统计数量	
	long count();
    //根据主键id删除
	void deleteById(ID id);
    //根据实体类删除	
	void delete(T entity);
    //根据实体类集合删除多个
	void deleteAll(Iterable<? extends T> entities);
	//删除所有
	void deleteAll();
}

 

4、PagingAndSortingRepository接口

 

package org.springframework.data.repository;

import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
/**
 *  
 * @see Sort排序
 * @see Pageable分页类
 * @see Page 分页对象
 */
@NoRepositoryBean
public interface PagingAndSortingRepository<T, ID> extends CrudRepository<T, ID> {
   //查询所有并排序
	Iterable<T> findAll(Sort sort);

	/**
	 *
	 * @param pageable
	 * @return返回一个Page对象的一个实体
	 */
	Page<T> findAll(Pageable pageable);
}

【注意】其实Pageable 对象已经包含了排序Sort 的信息。

5、JpaRepository接口

 

package org.springframework.data.jpa.repository;
import java.util.List;
import javax.persistence.EntityManager;
import org.springframework.data.domain.Example;
import org.springframework.data.domain.Sort;
import org.springframework.data.repository.NoRepositoryBean;
import org.springframework.data.repository.PagingAndSortingRepository;
import org.springframework.data.repository.query.QueryByExampleExecutor;

@NoRepositoryBean
public interface JpaRepository<T, ID> extends PagingAndSortingRepository<T, ID>, QueryByExampleExecutor<T> {

	/*
	 * 获得所有实体类集合
	 */
	List<T> findAll();
     /*
	 * 获得所有实体类集合并对其内容进行排序
	 */
	List<T> findAll(Sort sort);
     /*
	 * 根据主键id集合获取所有实体类集合
	 */
	List<T> findAllById(Iterable<ID> ids);

	<S extends T> List<S> saveAll(Iterable<S> entities);

	void flush();

	
	<S extends T> S saveAndFlush(S entity);

	void deleteInBatch(Iterable<T> entities);

	void deleteAllInBatch();    
	/*
	 * 根据主键id获取实体类
	 */
	T getOne(ID id);
    
    /*
	 * 继承PagingAndSortingRepository类的方法
	 */
	@Override
	<S extends T> List<S> findAll(Example<S> example);
     /*
	 * 继承PagingAndSortingRepository类的方法
	 */
	@Override
	<S extends T> List<S> findAll(Example<S> example, Sort sort);
}

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好,感谢您的提问。创建一个 Spring Data JPARepository 接口非常简单,只需要按照以下步骤操作即可: 1. 创建一个继承自 `JpaRepository` 的接口,指定实体类和主键类型: ``` public interface UserRepository extends JpaRepository<User, Long> { } ``` 其中,`User` 是您的实体类,`Long` 是实体类的主键类型。`JpaRepository` 是 Spring Data JPA 提供的一个基础 Repository 接口,提供了一些基本的数据操作方法,如插入、删除、更新、查询等。 2. 在您的实体类上添加注解,指定表名和主键: ``` @Entity @Table(name = "user") public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String username; private String password; // 省略 getter 和 setter 方法 } ``` 在上述代码中,`@Entity` 注解表示该类是一个 JPA 实体类,`@Table(name = "user")` 指定该实体类对应的数据库表名为 `user`,`@Id` 和 `@GeneratedValue` 注解指定实体类的主键。 3. 在您的 Spring Boot 应用程序中,使用 `@EnableJpaRepositories` 注解启用 Spring Data JPA,并指定 Repository 接口的包路径: ``` @SpringBootApplication @EnableJpaRepositories(basePackages = "com.example.repository") public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } } ``` 在上述代码中,`@EnableJpaRepositories` 注解用于启用 Spring Data JPA,`basePackages` 属性指定 Repository 接口的包路径。 4. 在您的服务层或控制器中注入 Repository 接口,即可使用 Spring Data JPA 提供的基本数据操作方法: ``` @RestController public class UserController { @Autowired private UserRepository userRepository; @GetMapping("/users") public List<User> getAllUsers() { return userRepository.findAll(); } } ``` 在上述代码中,`@Autowired` 注解用于自动注入 `UserRepository` 对象,然后在 `getAllUsers` 方法中调用 `findAll` 方法获取所有用户信息。 通过上述步骤创建一个 Spring Data JPARepository 接口非常简单,希望能够帮助到您。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值