基础查询方法
CrudRepository 接口
这个接口提供了通用的CRUD方法
package org.springframework.data.repository; import java.util.Optional; @NoRepositoryBean public interface CrudRepository<T, ID> extends Repository<T, ID> {
// 保存, 先判断实体是否存在,然后判断是新增还是更新,判断是否存在的机制:1、根据主键判断,2、根据Version判断 <S extends T> S save(S var1);
// 批量保存,与save方法相同,使用for循环的方式调用save <S extends T> Iterable<S> saveAll(Iterable<S> var1);
// 根据主键查询实体 Optional<T> findById(ID var1);
// 根据主键判断实体是否存在 boolean existsById(ID var1);
// 查询实体的所有列表 Iterable<T> findAll();
// 根据主键列表查询实体列表 Iterable<T> findAllById(Iterable<ID> var1);
// 查询总数 long count();
// 根据主键删除,先进根据主键行查询,如果不存在则抛出异常(EmptyResultDataAccessException)
void deleteById(ID var1); void delete(T var1); void deleteAll(Iterable<? extends T> var1); void deleteAll(); }
使用CrudRepository
实体类:
package com.banywl.study.studyspringdatajpa.entity; import lombok.Data; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; @Entity(name = "t_user") @Data public class SystemUser { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; private String uname; private String email; private String address; }
dao接口:
package com.banywl.study.studyspringdatajpa.dao; import com.banywl.study.studyspringdatajpa.entity.SystemUser; import org.springframework.data.repository.CrudRepository; public interface UserRepository extends CrudRepository<SystemUser, Long> { }
测试代码:
package com.banywl.study.studyspringdatajpa; import com.banywl.study.studyspringdatajpa.dao.UserRepository; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; @SpringBootTest class StudySpringDataJpaApplicationTests { @Autowired private UserRepository userRepository; @Test void contextLoads() { System.out.println(this.userRepository.findAll()); } }
PagingAndSortingRepository
PagingAndSortingRepository继承CrudRepository,它增加了分页和拍讯等对查询结果进行分页的一些常用方法
package org.springframework.data.repository; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; @NoRepositoryBean public interface PagingAndSortingRepository<T, ID> extends CrudRepository<T, ID> {
// 根据排序取所有对象的集合 Iterable<T> findAll(Sort var1); // 根据分页和排序进行查询,并用Page对象封装 Page<T> findAll(Pageable var1); }
使用PagingAndSortingRepository
修改dao继承:
package com.banywl.study.studyspringdatajpa.dao; import com.banywl.study.studyspringdatajpa.entity.SystemUser; import org.springframework.data.repository.PagingAndSortingRepository; public interface UserRepository extends PagingAndSortingRepository<SystemUser, Long> { }
测试代码:
@Test void testPagingAndSort(){ Sort sort = Sort.by(new Sort.Order(Sort.Direction.DESC,"uname")); PageRequest pageRequest = PageRequest.of(1,20,sort); // 分页 + 排序 this.userRepository.findAll(pageRequest); // 排序 sort = Sort.by(Sort.Direction.ASC,"createTime"); this.userRepository.findAll(sort); }
JpaRepository
JpaRepository接口是对关系型数据库进行抽象封装,它继承了PagingAndSortingRepository接口同时也继承了QueryByExampleExecutor
package org.springframework.data.jpa.repository; import java.util.List; 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 var1); List<T> findAllById(Iterable<ID> var1); <S extends T> List<S> saveAll(Iterable<S> var1); void flush(); <S extends T> S saveAndFlush(S var1); void deleteInBatch(Iterable<T> var1); void deleteAllInBatch(); T getOne(ID var1); <S extends T> List<S> findAll(Example<S> var1); <S extends T> List<S> findAll(Example<S> var1, Sort var2); }
它支持QBE(Query By Example)批量删除、手动刷新数据库更改,并将默认查询结果编程list
SimpleJpaRepository
SimpleJpaRepository JPA整个关系数据库的所有Repository接口的实现类,同时也是Spring JPA动态代理的实现类
通过EntityManager进行实体的操作,JpaEntityInforMation里面保存着实体的相关信息以及crud方法的元数据

浙公网安备 33010602011771号