Constructor Condicional MyBatis-Plus y Consulta de Asociación de Tablas Múltiples

Constructor condicional MyBatis-Plus y consulta multitabla

1. Constructor condicional QueryWrapper

Preparar la hoja de datos:

Escriba un caso de prueba:

[Ejemplo 1]: consulta los datos de los usuarios cuyo nombre no está vacío en la tabla de datos del usuario, y cuyo buzón no está vacío, y cuya edad es mayor o igual a 25 años;

@Test
public void wrapperSelect1(){
    
    
    //查询name不为空的用户,并且邮箱不为空的用户,年龄大于等于25
    QueryWrapper<User> wrapper = new QueryWrapper<>();
    wrapper
        .isNotNull("name")
        .isNotNull("email")
        .ge("age", 25);
    List<User> users = userMapper.selectList(wrapper);
    users.forEach(System.out::println);
}

[Ejemplo 2]: consulta datos de usuario cuya edad es 22;

@Test
public void wrapperSelect2(){
    
    
    //查询年龄是22的用户数据
    QueryWrapper<User> wrapper = new QueryWrapper<>();
    wrapper.eq("age","22");
    List<User> users = userMapper.selectList(wrapper);
    System.out.println(users);
}

[Ejemplo 3]: consulta los datos de usuario entre las edades de 20-25 en la tabla de datos;

@Test
public void wrapperSelect3(){
    
    
    //查询年龄在20-25岁之间的用户
    QueryWrapper<User> wrapper = new QueryWrapper<>();
    wrapper.between("age",20,30);  //区间
    Integer count = userMapper.selectCount(wrapper);
    System.out.println(count);
}

<img src="C:\Users\17209\AppData\Roaming\Typora\typora-user-images\image-20220223144547320.png" alt="image-20220223144547320" style="zoom:80%;"  /

[Ejemplo 4]: Consulta de registros de datos cuyo nombre no contenga "o" y cuyo correo electrónico termine en "com";

@Test
public void wrapperSelect4(){
    
    
    QueryWrapper<User> wrapper = new QueryWrapper<>();
    wrapper
        .notLike("name","o")
        .likeLeft("email","com");
    List<User> users = userMapper.selectList(wrapper);
    users.forEach(System.out::println);
}

[Ejemplo 5]: subconsulta inSql para encontrar registros de datos;

@Test
public void wrapperSelect5(){
    
    
    QueryWrapper<User> wrapper = new QueryWrapper<>();
    // id 在子查询中查出来
    wrapper.inSql("id","select id from user where id < 4");
    List<Map<String, Object>> list = userMapper.selectMaps(wrapper);
    list.forEach(System.out::println);
}

[Ejemplo 6]: Ordenar datos por edad;

@Test
public void wrapperSelect6(){
    
    
    QueryWrapper<User> wrapper = new QueryWrapper<>();
    //通过age进行排序
    wrapper.orderByAsc("age");
    List<User> users = userMapper.selectList(wrapper);
    users.forEach(System.out::println);
}

Para el uso del constructor condicional de MyBatis-Plus, consulte el sitio web oficial: https://baomidou.com/pages/10c804/


2. Consulta de asociación de varias tablas

El contenido descrito anteriormente se trata de agregar, eliminar, modificar y consultar datos en una sola tabla.¿Cómo personalizar SQL y escribir interfaces para diferentes servicios de consulta? Aquí se utiliza la consulta de asociación de tablas múltiples.Primero preparamos las siguientes dos tablas de datos.

1. Escriba un POJO que mapee el conjunto de resultados;

package com.trainingl.entity;

import lombok.Data;
// 映射结果集的实体类
@Data
public class OrderVO {
    
    
    private Integer pid;
    private String productName;
    private Integer count;
    private Integer uid;
    private String userName;
}

2. Interfaces personalizadas y declaraciones SQL en la interfaz de persistencia del mapeador;

package com.trainingl.repository;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.trainingl.entity.OrderVO;
import com.trainingl.entity.User;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public interface UserMapper extends BaseMapper<User> {
    
    
	//自定义接口
    @Select("select p.*, u.name userName from product p,user u where u.id = p.uid and u.id = #{id}")
    List<OrderVO> SelectUerPro(Integer id);  //传入用户id
}

3. Interfaz de prueba

@Test
public void test1(){
    
    
    //根据用户的id查询该用户购买的商品
    List<OrderVO> orderVOS = userMapper.SelectUerPro( 1);
    for (OrderVO orderVO : orderVOS) {
    
    
        System.out.println(orderVO);
    }
}


3. Complemento de análisis de rendimiento (comprensión ampliada)

La función del componente de análisis de rendimiento es generar cada sentencia SQL y su tiempo de ejecución , esta función depende del p6spycomponente y es compatible con MyBatis-Plus versión 3.1.0 y superior.

1. Introducir la dependencia p6spy en pom.xml;

<dependency>
    <groupId>p6spy</groupId>
    <artifactId>p6spy</artifactId>
    <version>3.9.1</version>
</dependency>

2, colocación de application.yml;

spring:
  datasource:
    # driver-class-name 为 p6spy 提供的驱动类 
    driver-class-name: com.p6spy.engine.spy.P6SpyDriver
    # url 前缀为 jdbc:p6spy 跟着冒号为对应数据库连接地址
    url: jdbc:p6spy:mysql://localhost/user?useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8
    ...

3. Agregue la configuración de spy.properties en el archivo de recursos;

#MP 3.2.1以上使用
modulelist=com.baomidou.mybatisplus.extension.p6spy.MybatisPlusLogFactory,com.p6spy.engine.outage.P6OutageFactory
#3.2.1以下使用或者不配置
#modulelist=com.p6spy.engine.logging.P6LogFactory,com.p6spy.engine.outage.P6OutageFactory
# 自定义日志打印
logMessageFormat=com.baomidou.mybatisplus.extension.p6spy.P6SpyLogger
#日志输出到控制台
appender=com.baomidou.mybatisplus.extension.p6spy.StdoutLogger
# 使用日志系统记录 sql
#appender=com.p6spy.engine.spy.appender.Slf4JLogger
# 设置 p6spy driver 代理
deregisterdrivers=true
# 取消JDBC URL前缀
useprefix=true
# 配置记录 Log 例外,可去掉的结果集有error,info,batch,debug,statement,commit,rollback,result,resultset.
excludecategories=info,debug,result,commit,resultset
# 日期格式
dateformat=yyyy-MM-dd HH:mm:ss
# 实际驱动可多个
#driverlist=org.h2.Driver
# 是否开启慢SQL记录
outagedetection=true
# 慢SQL记录标准 2 秒
outagedetectioninterval=2

Cuando la consola imprime el registro, muestra el tiempo de ejecución y el tiempo actual de la instrucción SQL actualmente ejecutada;

Este complemento tiene pérdida de rendimiento y no se recomienda su uso en entornos de producción. Solo se utiliza en entornos de prueba.

Supongo que te gusta

Origin blog.csdn.net/qq_41775769/article/details/123092194
Recomendado
Clasificación