"¡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.
Se definen varios parámetros condicionales en la subclase abstracta de Wrapper, AbstractWrapper
拼接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
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
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
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étodo
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 De 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étodo
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étodo
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étodo
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
数据库的字段
.