Repositorio de interfaz de consulta de desarrollo rápido de JPA

Que es JPA

SpringData es un marco de manipulación de datos proporcionado por Spring, y SpringData JPA es un módulo para la manipulación de datos basado en el estándar JPA bajo este marco.

SpringData JPA simplifica la operación del código de la capa de persistencia y solo se puede realizar escribiendo la interfaz.

JPA, el nombre completo de la API de persistencia de Java, es uno de los subproyectos de Spring Data. Es una herramienta para anotaciones JDK 5.0 o XML para describir la relación de mapeo entre objetos y tablas relacionales, y puede conservar objetos de entidad en tiempo de ejecución en la base de datos.

Tanto JPA como Mybatis son marcos de capa de persistencia con las mismas funciones. Sin embargo, debido al uso generalizado de Mybatis, ahora menos personas entienden y usan JPA.

JPQL evolucionó a partir de HQL de Hibernate y su sintaxis es muy similar a HQL. HQL es el lenguaje de consulta de Hibernate (lenguaje de consulta de Hibernate) y SQL es el lenguaje de consulta de estructura (lenguaje de consulta estructurado).

Su principal diferencia es que SQL manipula directamente las tablas y los campos de la base de datos, mientras que HQL manipula los objetos y atributos de la entidad.

Cabe señalar que el JPQL que escribimos eventualmente se convertirá en declaraciones SQL para su ejecución.

Relación de herencia de interfaz

Interfaz Repository<T, ID> La interfaz de nivel superior se utiliza para personalizar declaraciones JPQL

/**
 * 使用@Query注解,自定义JPQL语句
 * JPQL语句中,使用的不是表名,而是实体类名,不是列名,而是属性名,
 * 例如SQL语句:select * from user  JPQL语句是:select User from User
 * 如果是条件查询,之前语句中的占位符?可以使用(:xxx)进行表示
 * 此时xxx会根据方法中同名的形参自动绑定值
 */
public interface UsersRepositoryByQuery extends Repository<User, Integer> {
    
    
    //如果是查询所有列,可以省略select ....,从from开始写
    @Query("from User where name=:name")
    List<User> selectByName(String name); //select * from user where name=?

    @Query("select u from User u where name=:name and age=:age")
    List<User> selectByNameAndAge(String name, Integer age); //select * from user where name=? and age=?

    @Query("from User where name=:name and age=:age")
    List<User> selectByNameLike(String name);//select * from user  where name like ?

    //除了使用JPQL语句,也是可以使用sql原生语句,在注解中设置参数nativeQuery = true,不推荐!
    @Query(value = "select * from user where name=:name",nativeQuery = true)
    List<User> selectByNameSQl(String name);//select * from user where name=?
}

La interfaz CrudRepository hereda la interfaz Repository y los métodos para agregar, eliminar, modificar y verificar clases integradas.

La interfaz PagingAndSortingRepository hereda la interfaz CrudRepository
y agrega métodos de paginación y clasificación.

 @Autowired
    private UserRepositoryPage userRepositoryPage;
    /**
     * 分页
     */
    @Test
    void testPage(){
    
    
        //第一个参数是页码数,0表示第一页;第二参数是分页单位;
        Pageable Pageable = PageRequest.of(0, 2);
        Page<User> page = userRepositoryPage.findAll(Pageable);
        System.out.println("总数据量"+page.getTotalElements());
        System.out.println("总页数"+page.getTotalPages());
        List<User> content = page.getContent();
        for (User user : content) {
    
    
            System.out.println(user);
        }
    }
    /**
     * 排序
     */
    @Test
    void testSort(){
    
    
        //根据id排序
        Sort sort = Sort.by(Sort.Order.desc("id"));
        Iterable<User> all = userRepositoryPage.findAll(sort);
        for (User user : all) {
    
    
            System.out.println(user);
        }
    }

Interfaz JpaRepository<T, ID>

Heredado de PagingAndSortingRepository<T, ID>

y la interfaz de consulta QueryByExampleExecutor

La característica es que puede ayudarnos a adaptar los valores de retorno de métodos de otras interfaces. Puede facilitarnos el uso de estos métodos al desarrollar

La interfaz JpaSpecificationExecutor proporciona soporte principalmente para consultas de múltiples condiciones y puede agregar paginación y clasificación a la consulta.

La interfaz JpaSpecificationExecutor no tiene nada que ver con las interfaces anteriores y es completamente independiente.
No se puede usar solo, sino que debe usarse junto con otras interfaces en JPA.

//接口  
public interface UserRepositoryExJPA extends JpaRepository<User,Integer>,JpaSpecificationExecutor<User> {
    
    
}

  
//使用  
@Autowired
    private UserRepositoryExJPA userRepositoryExJPA;

    /**
     * 自定义规则,可以多条件查询
     */
    @Test
    void testExJPA2() {
    
    
        Specification<User> specification = new Specification<User>() {
    
    
            @Override
            public Predicate toPredicate(Root<User> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
    
    
                //模糊查询
                Predicate predicate = criteriaBuilder.like(root.get("name"), "张%");
                //模糊查询+性别筛选+年龄筛选
                Predicate predicate2 = criteriaBuilder.and(criteriaBuilder.like(root.get("name"), "张%"),
                        criteriaBuilder.equal(root.get("sex"), "男"), criteriaBuilder.gt(root.get("age"), 24));
                return predicate2;
            }
        };
        //进行排序年龄进行倒序排列
        Sort sort = Sort.by(Sort.Order.desc("age"));
        //分页+追加排序
        Pageable pageable = PageRequest.of(0, 2, sort);
        Page<User> page = userRepositoryExJPA.findAll(specification, pageable);
        System.out.println("根据条件查询到" + page.getTotalElements() + "条数据");
        System.out.println("根据条件查询到" + page.getTotalPages() + "页数据");
        System.out.println("当页数据");
        for (User user : page) {
    
    
            System.out.println(user);
        }
    }  

Interfaz JpaRepositoryImplementation<T, ID>

JpaRepository<T, ID> heredado , interfaz JpaSpecificationExecutor

La clase de implementación es la interfaz SimpleJpaRepository<T, ID> con las funciones más potentes

consulta de nombres clave

De acuerdo con la especificación de Spring Data, los métodos de consulta deben comenzar con buscar, leer u obtener (por ejemplo, encontrar, buscar, leer, leer, obtener, obtener). Cuando se trata de condiciones de consulta, debe usar la palabra clave condition para conectar atributos y asegurarse de que la primera letra del atributo condition esté en mayúscula. Al analizar el nombre del método, el marco eliminará primero el prefijo redundante y luego analizará el resto.

Puede definir el método de consulta directamente en la interfaz, siempre que cumpla con la especificación, no necesita escribir la implementación o SQL. Las palabras clave admitidas actualmente son las siguientes:


Preste atención a la cuenta oficial, el programador continuará generando contenido de alta calidad a las tres en punto , con la esperanza de brindarle algo de inspiración y ayuda.

Supongo que te gusta

Origin blog.csdn.net/u011738045/article/details/131931404
Recomendado
Clasificación