¡Es demasiado caliente! ¿Por qué MyBatis Plus es tan impresionante?

  • Caracteristicas

  • texto

  • Dependencia de componentes

  • Código de extensión

Todos los que han utilizado MyBatis-Plus (MP para abreviar) saben que es una herramienta de mejora para MyBatis. Está dedicada a mejorar MyBatis sin hacer cambios. Nace para simplificar el desarrollo y mejorar la eficiencia.

Caracteristicas

  • Sin intrusiones: solo realice mejoras sin realizar cambios, la introducción no afectará el proyecto existente, es tan suave como la seda

  • Pérdida baja: CURD básico se inyectará automáticamente al inicio, el rendimiento es básicamente sin pérdida, operación directa orientada a objetos

  • Potente operación CRUD: Mapper general integrado y servicio general, solo una pequeña cantidad de configuración puede realizar la mayoría de las operaciones CRUD de una sola tabla, y un generador de condiciones más poderoso, que puede satisfacer diversas necesidades y organizar un documento MybatisPDF de 272 páginas

  • Admite llamadas de formulario Lambda: a través de expresiones Lambda, es conveniente escribir varias condiciones de consulta, sin necesidad de preocuparse por escribir campos incorrectos

  • Admite la generación automática de claves primarias: admite hasta 4 estrategias de clave primaria (contiene una secuencia generadora de ID única distribuida), que se puede configurar libremente para resolver perfectamente los problemas de la clave primaria

  • Admite el modo ActiveRecord: admite la llamada al formulario ActiveRecord, las clases de entidad solo necesitan heredar la clase Model para realizar potentes operaciones CRUD

  • Admite operaciones generales globales personalizadas: admite la inyección de métodos generales globales (escribe una vez, usa en cualquier lugar)

  • Generador de código incorporado: use el código o el complemento de Maven para generar rápidamente el código de capa de Mapper, Model, Service, Controller, motor de plantillas de soporte y más configuraciones personalizadas para su uso

  • Complemento de paginación incorporado: basado en la paginación física de MyBatis, los desarrolladores no necesitan preocuparse por operaciones específicas. Después de configurar el complemento, escribir paginación es equivalente a una consulta de lista normal

  • El complemento de paginación admite varias bases de datos: admite MySQL, MariaDB, Oracle, DB2, H2, HSQL, SQLite, Postgre, SQLServer y otras bases de datos

  • Complemento de análisis de rendimiento incorporado: se puede generar una declaración SQL y su tiempo de ejecución. Se recomienda habilitar esta función durante el desarrollo y las pruebas para detectar rápidamente consultas lentas

  • Complemento de interceptación global incorporado: proporciona análisis y bloqueo inteligentes de operaciones de actualización y eliminación de tablas completas, y también puede personalizar las reglas de interceptación para evitar errores de operación

texto

En el desarrollo de un proyecto real, a menudo necesitamos guardar datos en lotes en la base de datos ¿Se ha dado cuenta más o menos con mybatis-plus?

Dependencia de componentes

Primero, necesitamos introducir el componente de código abierto mybatis-plus a través de Maven y agregar el siguiente código al archivo pom.xml:

<!--mybatis-->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.4.0</version>
</dependency>
<!--mybatis plus extension,包含了mybatis plus core-->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-extension</artifactId>
    <version>3.4.0</version>
</dependency>

Al ver el código fuente, encontré la interfaz de inserción por lotes proporcionada por la interfaz API:

¡Es demasiado caliente!  ¿Por qué MyBatis Plus es tan impresionante?
Después de iniciar el servicio, use Postman para depurar, y la impresión de fondo es la siguiente:

¡Es demasiado caliente!  ¿Por qué MyBatis Plus es tan impresionante?

Se puede ver en la figura que esta llamada interfaz de inserción por lotes es en realidad una inserción de bucle for, ¡Oh, Dios mío! Es simplemente una pesadilla.

Es difícil de implementar manualmente, por lo que,

INSERT INTO test (a, b, c) VALUES
<foreach collection="list" item="item" separator=",">
    (#{item.a}, #{item.b}, #{item.c})
</foreach>

Leemos el código fuente de mybatis-plus. En el paquete com.baomidou.mybatisplus.extension.injector.methods.InsertBatchSomeColumn, en realidad hay una implementación de código de inserción por lotes. No publicaré el código fuente aquí, y lo seguirás tú mismo. Extengámoslo manualmente un poco:

Código de extensión

Hablar es barato, muéstrame el código. Primero muéstralo. Luego te mostraré lentamente por qué se hace esto:

¡Es demasiado caliente!  ¿Por qué MyBatis Plus es tan impresionante?

Inyecte el Bean en el archivo MybatisPlusConfig, el código es el siguiente:

@Configuration
public class MybatisPlusConfig {

    /**
     * 分页插件
     *
     * @return PaginationInterceptor
     */
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        return new PaginationInterceptor();
    }

    @Bean
    public EasySqlInjector easySqlInjector() {
        return new EasySqlInjector();
    }
}

También amplíe el BaseMapper incorporado, el código es el siguiente:

import com.baomidou.mybatisplus.core.mapper.BaseMapper;

import java.util.Collection;

/**
 * 扩展通用 Mapper,支持数据批量插入
 *
 * @author 天开易想
 */
public interface EasyBaseMapper<T> extends BaseMapper<T> {

    /**
     * 批量插入 仅适用于mysql
     *
     * @param entityList 实体列表
     * @return 影响行数
     */
    Integer insertBatchSomeColumn(Collection<T> entityList);
}

Podemos implementar las siguientes referencias en la clase empresarial, el código es el siguiente:

/**
 * 定义业务mapper接口,继承刚刚扩展的EasyBaseMapper
 *
 * @author 天开易想
 */
@Mapper
public interface TestMapper extends EasyBaseMapper<Test> {
}

/**
 * 业务实现类接口,即可引用
 *
 * @author 天开易想
 */
@Service
public class TestServiceImpl extends ServiceImpl<TestMapper, Test> implements TestService {

    @Override
    public Integer testBatch(Collection<Test> testList) {
        return baseMapper.insertBatchSomeColumn(testList);
    }

Debido a que no se puede citar directamente en BaseMapper, ¿por qué no se puede citar directamente? Se dice que solo admite la base de datos MySql, por lo que el autor no tiene una razón incorporada. Compilé un documento MybatisPDF de 272 páginas.

Supongo que te gusta

Origin blog.51cto.com/14975073/2590388
Recomendado
Clasificación