MyBatis Plus de Acceso a Datos (2) - Constructor Condicional Wrapper

"¡Llega la oferta, busquen amigos para que la recojan! Estoy participando en el evento de registro de reclutamiento de primavera de 2022, haga clic para ver los detalles del evento ".

1. Introducción a la envoltura

MyBatis Plus construye condiciones de consulta a través de Wrapper para implementar operaciones de lectura condicional o operaciones de escritura condicional.imagen.png

Se definen varios parámetros condicionales en la subclase abstracta de Wrapper, AbstractWrapperimagen.png

拼接SQL语句使用的是数据库字段,而不是Java实体类的属性

El significado de todas las condiciones de consulta en AbstractWrapper se puede ver en la documentación oficial Condition Constructor

2. Consulta condicional

preparación preliminar

Modifique el método de inserción para insertar datos en la tabla t_tesla

@Test
public void insert(){
    for (int i = 4; i < 40; i++) {
        Tesla tesla = new Tesla();
        tesla.setVehicleName("Model " + i);
        tesla.setVehicleType("Compact Car");
        if (i % 2 == 0) {
            tesla.setFactory("Fremont Gigafactory");
        } else {
            tesla.setFactory("Shanghai Gigafactory");
        }
        tesla.setVehiclePrice(23000d + i * 10000);
        teslaMapper.insert(tesla);
    }
}
复制代码

Ejecute este método para insertar datos en la base de datos.

Implementar consulta condicional

métodos selectList y selectCount en BaseMapper

/**
 * 根据 entity 条件,查询全部记录
 *
 * @param queryWrapper 实体对象封装操作类(可以为 null)
 */
List<T> selectList(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);

/**
 * 根据 Wrapper 条件,查询总记录数
 *
 * @param queryWrapper 实体对象封装操作类(可以为 null)
 */
Long selectCount(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
复制代码

REQUISITOS: Consulte a Tesla para todos los modelos de automóviles compactos producidos en la fábrica de Fremont

@Test
public void selectListWithWrapper(){
    // 构造查询条件
    QueryWrapper<Tesla> queryWrapper = new QueryWrapper<>();
    queryWrapper.eq("factory", "Fremont Gigafactory")
                // 添加or关键字
                .or()
                .eq("vehicle_type","Compact Car");

    List<Tesla> teslaList = teslaMapper.selectList(queryWrapper);
    System.out.println("查询到的总数为:" + teslaList.size());

}
复制代码

ejecutar el método

imagen.png

Ver el código fuente del método o

Implementar el método de prueba selectCount

@Test
public void selectCountWithWrapper(){
    // 构造查询条件
    QueryWrapper<Tesla> queryWrapper = new QueryWrapper<>();
    queryWrapper.eq("factory", "Shanghai Gigafactory")
            .eq("vehicle_type","Compact Car");

    Long count = teslaMapper.selectCount(queryWrapper);
    System.out.println("查询到符合条件的总数为:" + count);
}
复制代码

ejecutar el método

imagen.png

Implementar consulta condicional de paginación

Demanda: paginar para consultar todos los Tesla producidos en las fábricas de Shanghai y con un precio entre 230,000 y 3,000,000

@Test
public void selectPageWithWrapper(){
    // 构造查询条件
    QueryWrapper<Tesla> teslaWrapper = new QueryWrapper<>();
    teslaWrapper.between("price",230000,3000000)
                .eq("factory","Shanghai Gigafactory");

    // 构造分页条件
    Page<Tesla> teslaPageCondition = new Page<>(2,4);

    Page<Tesla> teslaPage = teslaMapper.selectPage(teslaPageCondition, teslaWrapper);
    System.out.println("分页条件查询的数据:" + teslaPage.getRecords());
    System.out.println("分页条件查询到的记录总数:" + teslaPage.getTotal());
}
复制代码

ejecutar el método

imagen.png

3. Actualización de condición

Método de actualización condicional en BaseMapper

/**
 * 根据 whereEntity 条件,更新记录
 *
 * @param entity        实体对象 (set 条件值,可以为 null)
 * @param updateWrapper 实体对象封装操作类(可以为 null,里面的 entity 用于生成 where 语句)
 */
int update(@Param(Constants.ENTITY) T entity, @Param(Constants.WRAPPER) Wrapper<T> updateWrapper);
复制代码

Demanda: ajuste el precio de todos los Tesla con un precio superior a 113 000,00 y producidos por la fábrica de Shanghái a 113 000,00

@Test
public void updateWithWrapper(){
    // 构造更新条件
    UpdateWrapper<Tesla> updateWrapper = new UpdateWrapper<>();
    updateWrapper.gt("price",113000.00)
                 .eq("factory","Shanghai Gigafactory")
                 .set(true,"price",113000.00);

    int updateCount = teslaMapper.update(null, updateWrapper);
    System.out.println("更新的行数为:" + updateCount);

}
复制代码

ejecutar el métodoimagen.png

El método de actualización pasa en una clase de entidad.

@Test
public void updateWithWrapper(){
    // 构造更新条件
    UpdateWrapper<Tesla> updateWrapper = new UpdateWrapper<>();
    updateWrapper.gt("price",100000.00)
                 .eq("factory","Shanghai Gigafactory")
                 .set(true,"price",100000.00);

    Tesla tesla = new Tesla();
    tesla.setFactory("Shanghai Gigafactory");
    tesla.setVehiclePrice(100000.00);
    tesla.setVehicleType("Roadster");
    tesla.setVehicleName("Tesla Roadster");
    int updateCount = teslaMapper.update(tesla, updateWrapper);
    System.out.println("更新的行数为:" + updateCount);
}
复制代码

pases de actualización en una clase de entidad imagen.pngDe acuerdo con la instrucción SQL ejecutada, MyBatis Plus utiliza el valor del atributo de la clase de entidad entrante como el valor del campo actualizado Hay dos precio =? UpdateWrapper El valor del campo de actualización establecido por el método set no se reemplaza por el precio de la clase de entidad.

Si hay pocos campos para actualizar, puede usar el método set en QueryWrapper para establecer el valor del campo actualizado.Si hay muchos campos para actualizar, se recomienda crear un nuevo objeto y establecer el valor del campo. para ser actualizado a la propiedad correspondiente del objeto entra.

4. Eliminación condicional

Método de eliminación condicional en BaseMapper

/**
 * 根据 entity 条件,删除记录
 *
 * @param queryWrapper 实体对象封装操作类(可以为 null,里面的 entity 用于生成 where 语句)
 */
int delete(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
复制代码

Demanda: Elimina Teslas con precios superiores a los 90.000 producidos por la fábrica de Shanghái

@Test
public void deleteWithWrapper(){
    QueryWrapper<Tesla> queryWrapper = new QueryWrapper();

    queryWrapper.eq("factory", "Shanghai Gigafactory")
            .gt("price","90000.00");

    int deleteCount = teslaMapper.delete(queryWrapper);
    System.out.println("删除的数量为:" + deleteCount);
}
复制代码

ejecutar el métodoimagen.png

5. Otros métodos comunes de Wrapper

clasificar

La condición para ordenar puede ser una sola condición o un conjunto

@Test
public void selectPageByWrapperAndSortByPrice(){
    // 排序条件的集合
    List<String> orderConditionList = new ArrayList<>();
    orderConditionList.add("price");
    orderConditionList.add("name");

    // 对所有弗拉蒙特工厂生产的Tesla按照价格降序排列
    QueryWrapper<Tesla> queryWrapper = new QueryWrapper<>();
    queryWrapper.eq("factory","Fremont Gigafactory")
                .orderByDesc(orderConditionList);

    Page<Tesla> teslaPageCondition = new Page<>(2,5);

    Page<Tesla> teslaPage = teslaMapper.selectPage(teslaPageCondition, queryWrapper);

    System.out.println("分页查询并降序排列的数据:" + teslaPage.getRecords());

}
复制代码

ejecutar el métodoimagen.png

empalme de SQL

El último método puede empalmar SQL al final de SQL

@Test
public void selectListByLastInWrapper(){
    QueryWrapper<Tesla> queryWrapper = new QueryWrapper<>();
    queryWrapper.last("ORDER BY price");

    List<Tesla> teslaList = teslaMapper.selectList(queryWrapper);

    System.out.println("last方法拼接SQL查询到的数据:" + teslaList);

}
复制代码

ejecutar el métodoimagen.png

Seis, resumen del envoltorio

Las condiciones se pueden construir utilizando QueryWrapper para operaciones de consulta y eliminación, y construcciones UpdateWrapper para actualizaciones.

Las consultas de criterios se incluyen en los métodos generados por General Mapper y MyBatis MBG, que son consultas QBC. Las condiciones de consulta se construyen generando clases de entidad XxxExaple. Para más detalles, consulte "MyBatis (VIII) - MyBatis Universal Mapper (Parte B) of Data Access " Generic Mapper implementa consultas complejas -ExampleMapper"

La diferencia entre los dos:

  • La diferencia entre la consulta condicional de MBG o General Mapper es que se utiliza la consulta condicional de MBG XxxExample中的属性也就是实体类的属性.
  • MyBatis Plus se utiliza para construir condiciones de consulta 数据库的字段.

Supongo que te gusta

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