Aprendizaje progresivo Spring Data JPA: ¿cómo personalizar el método de consulta?

¡Trabajar juntos para crear y crecer juntos! Este es el día 28 de mi participación en el "Nuevo plan diario de Nuggets · Desafío de actualización de agosto", haga clic para ver los detalles del evento

1 Definir la configuración y el uso del método de consulta

En Spring Data JPA, CRUD se puede implementar directamente por nombre de método

Implementar CRUD por nombre de método

Si queremos implementar CRUD a través de nombres de métodos, debemos hacer nuestra UserRepisitoryherencia CrudRepository, como se muestra a continuación.

public interface UserRepository extends CrudRepository<UserInfo,Integer> {

}
复制代码

Luego puede llamar UserRepositoryal método en la capa de servicio

imagen.png

Exposición selectiva a métodos CRUD

A veces no queremos que todos los métodos estén expuestos, cuando algunos datos solo quieren verse pero no modificarse.

La operación específica es heredar la clase Repositorio y escribir sus propios métodos.

public interface UserRepository extends Repository<UserInfo,Integer> {
    UserInfo findOne();
    List<UserInfo> findAll();
}
复制代码

En este momento controller, si lo llama, solo existen estos dos métodos.

imagen.png

Configuración de la política de consulta de 2 métodos

A través @EnableJpaRepositoriesde la estrategia de consulta del método configurable, esto generalmente no cambia, el valor predeterminado está bien.

@EnableJpaRepositories(queryLookupStrategy = QueryLookupStrategy.Key.CREATE_IF_NOT_FOUND)
复制代码

QueryLookupStrategy.KeyHay tres valores que se pueden seleccionar aquí

Crear

Create crea directamente en función del nombre del método, si UserInfo findByAgeAndName();elimina findBycaracteres, luego analiza Age, And, Name.Si el nombre del método no se ajusta a las reglas, se informará un error. En este modo de estrategia, es inútil configurar @Query, solo se analizará el nombre del método.

USE_DECLARADO_QUERY

Se crea de forma declarativa.En este modo de estrategia, Query debe configurarse, como se muestra a continuación, y el nombre del método no se analizará.

@Query("select u from UserInfo u")
UserInfo getAllList();
复制代码

CREAR_SI_NO_ENCONTRADO

Esta es una combinación de los dos casos anteriores. Primero se creará mediante un método declarativo. Si no, el nombre del método se analizará para crear una consulta. Si ambos no están satisfechos, el inicio informará un error. Esta es la estrategia de consulta predeterminada .

3 Definición de la sintaxis del método de consulta

El nombre del método con la función de consulta tiene 查询策略+查询字段+一些限制性条件una semántica clara y funciones completas. La siguiente tabla es una lista de palabras clave comúnmente utilizadas en la sintaxis de DMQ.

20191122172557317.png

Déjame darte un ejemplo o dos para ilustrar.

//去重,and的用法
List<UserInfo> findDistinctByAddressAndName();

//根据name查找,并根据ID进行逆序排列
List<UserInfo> findByNameOrderByIdDesc();
复制代码

Aunque todas las tablas comienzan con buscar, JPA también admite leer, obtener, consultar, transmitir, contar, existir, eliminar, eliminar y otros prefijos, que se pueden usar literalmente.

4 parámetros específicos del tipo: ordenar y paginar

Para admitir la ordenación y la paginación, JPA admite dos tipos especiales de parámetros, Ordenar y Paginar.

Ordenar puede lograr una clasificación dinámica al realizar consultas y determina la dirección de la clasificación de campos. Paginable puede lograr el doble efecto de paginación y clasificación.

Método y descripción de definición de interfaz:

1 Paginación y total

Page<UserInfo> findByName(String name, Pageable pageable);
复制代码

Este retorno contendrá el número total de elementos y páginas disponibles, esto ejecutará una declaración de recuento por defecto, por lo que el rendimiento es bajo.

2 paginación

Slice<UserInfo> findByName(String name, Pageable pageable);
复制代码

El resultado devuelto es Slice, solo que el resultado de la consulta no se preocupa por el número total.

3 Ordenar

List<UserInfo> findByName(String name, Sort sort);
复制代码

Puede hacer esto cuando solo necesita ordenar agregando un parámetro Ordenar.

4 Clasificación y paginación

List<UserInfo> findByName(String name, Pageable pageable);
复制代码

En este caso, solo se devolverán los resultados de la consulta restringida y no se devolverá otra información.

Cuando se usa en la capa de servicio, puede hacer lo siguiente

//查询name是Luke的第一页,每页10个信息,并返回一共有多少页
Page<UserInfo> userList = userRepository.findByName("Luke",PageRequest.of(1,10));
//查询name是Luke的第一页的10条数据
Slice<UserInfo> userList = userRepository.findByName("Luke",PageRequest.of(1,10));
//查询name是Luke的数据,并按照age的逆序排列
List<UserInfo> userList = userRepository.findByName("Luke",new Sort(Sort.Direction.DESC,"age"));
//查询name是Luke的数据,取第一页的10条数据,并按照age的逆序排列
List<UserInfo> userList = userRepository.findByName("Luke",PageRequest.of(1,10,Sort.Direction.DESC,"age"));
复制代码

5 Limitar resultados de consulta: Fist y Top

Cuando solo desea obtener los datos de los días anteriores, puede usar las palabras clave Primero y Superior.

por ejemplo

//按照name字段顺序排列,取第一个值
UserInfo findFirstByOrderByNameAsc();
//根据Id逆序排列并取第一个值
UserInfo findTopByOrderByIdDesc();
//排序后取前10个
List<UserInfo> findFirst10ByAge(Integer age,Sort sort);
复制代码

Vale la pena señalar que:

  • Al consultar, puede usar números después de arriba y primero para indicar cuántos valores se necesitan.
  • Si no hay ningún número, el valor predeterminado es 1
  • Si es un parámetro Paginable, prevalecerá el número después de Primero y Primero.
  • También se admite una palabra clave distinta

6 @NotNull @NonNullApi和@Nullable

@No nulo

Se utiliza para parámetros no nulos o valores de retorno

@NonNullApi

Se puede definir en el paquete para indicar que el comportamiento predeterminado del valor de retorno es no aceptar valores nulos

@Nullable

Para parámetros anulables o valores devueltos

El siguiente código indica que tanto el parámetro como el valor devuelto pueden estar vacíos.

@Nullable
UserInfo findByName(@Nullable String name);
复制代码

Supongo que te gusta

Origin juejin.im/post/7136566779282718751
Recomendado
Clasificación