¡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 UserRepisitory
herencia CrudRepository
, como se muestra a continuación.
public interface UserRepository extends CrudRepository<UserInfo,Integer> {
}
复制代码
Luego puede llamar UserRepository
al método en la capa de servicio
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.
Configuración de la política de consulta de 2 métodos
A través @EnableJpaRepositories
de 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.Key
Hay tres valores que se pueden seleccionar aquí
Crear
Create crea directamente en función del nombre del método, si UserInfo findByAgeAndName();
elimina findBy
caracteres, 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.
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);
复制代码