基础查询方法

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方法的元数据

 

posted @ 2020-11-14 14:35  半雨微凉  阅读(120)  评论(0)    收藏  举报