Consulta de paginación mybatis y comparación de fechas

1. Antecedentes

  Cuando estemos desarrollando Mybatis, nos encontraremos con el problema de la gran cantidad de datos y fechas Este artículo se centra en los siguientes problemas:

  1. Cómo realizar una consulta de paginación de la base de datos para evitar resultados demasiado grandes y una velocidad de ejecución lenta
  2. Cómo comparar fechas, comparar el tamaño de dos fechas de diferentes precisiones

2. Diseño de base de datos de muestra

  Supongamos que existe una tabla de usuario de este tipo, su definición (MySql) es la siguiente:

carné de identidad nombre cumpleaños
bigint (20) varchar (64) fecha y hora

  Queremos diseñar una consulta:

  • Usuarios de consultas cuyo cumpleaños sea inferior al 30/01/1990 (es decir, nacidos antes de los 90 años)

Suponiendo que hay muchas personas nacidas antes de los 90 años, un tirón llevará mucho tiempo, por lo que presentamos la consulta de paginación aquí.

3. Diseño de consultas de paginación

  Generalmente, el proceso de escritura de Mapper es el siguiente: DO=> Query=> Mapper=> mapper.xml=> Consulta SQL, por supuesto, este no es un orden de compilación que deba seguirse, puede hacerlo según sus propios deseos. Primero miramos DO:

@Getter
@Setter
@ToString
public UserDO{
    
    
	private Long id;
	private String name;
	private Date birthday;
}

  Luego, concéntrese en Queryla escritura de la clase. Primero, escribimos una PageQuery, y luego todas las clases de consulta futuras pueden heredar esta clase:

public class PageQuery{
    
    
    private Integer           currentPage;
    private Integer           pageSize;

    public int getStartRow() {
    
    
        if (currentPage == null || pageSize == null || currentPage <= 1) {
    
    
            return 0;
        }

        return (currentPage - 1) * pageSize;
    }

    //getter和setter
}

  La clase de consulta personalizada se BirthdayQueryhereda PageQueryy el campo de fecha de consulta se agrega principalmente:

@Getter
@Setter
@ToString
public class BirthdayQuery extends PageQuery {
    
    
    /**
     * 查询的生日日期
     */
    private Date queryDate;
}

  Luego está la definición de la interfaz Mapper, que se UserMapperdefine de la siguiente manera:

@Mapper
public interface UserMapper{
    
    
	List<UserDO> listByBirthday(BirthdayQuery birthdayQuery)
}

  La última es la preparación del archivo xml, la consulta usará la startRowsuma pageSizey la asignación de resultados se omite aquí:

<mapper namespace="com.test.mapper.Usermapper">
    <select id="" resultMap="com.test.dataobject.UserDO">
        SELECT
        id,name,birthday
        FROM
        user
        WHERE <![CDATA[ birthday < (#{queryDate,jdbcType=TIMESTAMP})]]>
        LIMIT #{startRow}, #{pageSize}
    </select>
</mapper>

En este punto, ya ha terminado. Vale la pena señalar que el #{startRow}atributo se getStartRow()obtiene mediante el método use . Mybatis usa expresiones OGNL para obtener el valor del atributo. Si está interesado, puede obtener más información.

4. Comparación de fechas en Mybatis

  En la preparación de xml lo usamos jdbcType. Debemos prestar atención a una clase de enumeración JdbcTypeen Mybatis , que aquí jdbcTypeactúa como un interceptor. Intercepta cuando se escriben datos en la base de datos y cuando se obtienen datos de la base de datos. Una vez que se recuperan los datos de la base de datos y antes de que se asigne el valor al objeto, las jdbcTypereglas de configuración correctas son:

  • El tipo jdbctype correspondiente al campo de tipo de fecha es jdbcType = "DATE"
  • Los campos de tipo datetime y timestimp corresponden a jdbcType = "TIMESTAMP"
  • El campo de hora corresponde a jdbcType = "TIME"

  jdbcTypeEl impacto del tipo en el acceso de datos de fecha java.util.Date a la base de datos:

  • Cuando jdbcType = "DATE", al acceder a los datos de la base de datos, se filtrarán las horas, minutos y segundos
  • Cuando jdbcType = "TIMESTAMP", jdbcType no filtra ningún contenido y no tiene ningún efecto en el acceso
  • Cuando jdbcType = "TIME", el año, mes y día se filtrarán al acceder a los datos de la base de datos.

5. Referencias

1.
JdbcType 2. Tutorial OGNL en
MyBatis 3. Acceso al objeto tipo fecha Java a la base de datos a través de mybatis

Supongo que te gusta

Origin blog.csdn.net/u012397189/article/details/101701141
Recomendado
Clasificación