Hablemos brevemente de los malos amigos Mybatis y Mybatis-plus.

Prefacio

Experiencia personal de encontrar trampas, ¡por favor dame más consejos sobre cualquier deficiencia!

texto

En el sitio web oficial de Mybatis-plus, creo que todos están familiarizados con este comienzo clásico.

mp (Mybatis-plus, como lo llamaremos más adelante) afirma ser un socio poderoso de Mybatis y nació para cooperar con Mybatis para mejorar la eficiencia del desarrollo. Entonces, ¿es realmente posible tener intimidad durante el proceso de desarrollo? ¿A qué deberían prestar atención?

1. Xiaozao de Mybatis-plus——Anotación de campo @TableField

Cuando el nombre del campo de la tabla de la base de datos es diferente del nombre del atributo de clase de entidad correspondiente, mp utilizará la anotación @TableField para declararlo.

 Sin duda, esto es muy conveniente: no tenemos que preocuparnos por la relación de mapeo entre los campos de la tabla y los nombres de los atributos de la clase de entidad cuando usamos mp para operar la base de datos. Pero es posible que Mybatis que mp pueda usar no necesariamente funcione .

@TableField no puede proporcionar relaciones de mapeo para las declaraciones XML de Mybatis, por lo que Mybatis necesita configurar <resultMap> en XML para especificar la relación de mapeo.

2. Estrategia de generación automática de Mybatis-plus

Probablemente sea un error que cometí después de no trabajar en un proyecto durante demasiado tiempo. mp tiene una buena estrategia de generación automática, como el algoritmo de copo de nieve para generar ID únicas. Necesitamos declarar en el campo los atributos que deben generarse automáticamente.

    // 主键
    @TableId(value = "pid", type = IdType.ASSIGN_ID)
    private String pid;

    // 其他需要自动生成的字段属性
    @TableField(value = "create_time", fill = FieldFill.INSERT_UPDATE)
    private Date createTime;

Luego configure las políticas correspondientes para otros valores de atributos . Es necesario implementar el método insertFill y el método updateFill en la interfaz MetaObjectHandler para configurar la estrategia de generación al insertar o actualizar valores de campo respectivamente .

/**
 * @author 1.
 * @version 1.0
 * @description:  mybatis-plus属性字段自动填充处理类
 * @date 2023/7/28 17:35
 */
@Component
public class AutoFill2FieldsHandler implements MetaObjectHandler {
    @Override
    public void insertFill(MetaObject metaObject) {
        this.setFieldValByName("createTime", new Date(), metaObject);
        this.setFieldValByName("publishTime", new Date(), metaObject);
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        this.setFieldValByName("createTime", new Date(), metaObject);
        this.setFieldValByName("publishTime", new Date(), metaObject);
    }
}

Además, durante el proceso de aprendizaje, vi que muchas personas estaban preocupadas por la estrategia de generación de ID de mp , como tipos de campos y tipos de atributos que no coincidían y no se podían generar, la configuración del incremento automático de clave primaria no tuvo efecto, etc. .

Para la primera pregunta, mi tipo de campo de clave principal y el tipo de atributo correspondiente son cadenas, por lo que la generación y la inserción son fluidas ;

Para la segunda pregunta, puede consultar el artículo de este blogger: @TableId(type = IdType.AUTO) no tiene efecto icono-default.png?t=N6B9http://t.csdn.cn/JiF0q

3. Los puntos comunes a los que Mybatis-plus y Mybatis deben prestar atención: el problema del conflicto de palabras clave de la base de datos

Encontré este problema cuando estaba usando mp para realizar operaciones de consulta de datos de tablas. En ese momento, había un atributo llamado desc en la clase de entidad correspondiente a mi tabla . Cuando ejecuté la prueba más tarde, la declaración SQL generada salió mal y el reportar anormal

Cause: java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; xxxxx..

 Error de sintaxis de SQL , encontrado y resuelto después de verificar. Gracias por tu artículo aquí:

Conflicto con la palabra clave Mysql icono-default.png?t=N6B9http://t.csdn.cn/Vgbns

4. Cómo agregar elegantemente la interfaz de mapeo de Mybatis al contenedor de primavera

Permítanme mencionar aquí que el archivo XML de Mybatis establece una relación de mapeo con la interfaz, lo que facilita nuestras llamadas y garantiza que las declaraciones SQL en XML se puedan ejecutar. Después de integrar Mybatis con Spring, el principio de ensamblaje automático ha mejorado enormemente nuestra eficiencia de desarrollo. Para agregar la interfaz de mapeo al contenedor Spring, hay dos formas:

1. Agregue la anotación @Mapper a la interfaz

@Mapper
public interface MyEntityMapper extends BaseMapper<MyEntity> {
    //...
}

2. Agregue la anotación @MapperScan a la clase de inicio (@Mapper en la interfaz de mapeo se puede agregar o no en este momento)

@SpringBootApplication(scanBasePackages = {"org.limit.study"})
@MapperScan(basePackages = {"指定映射接口所在的包路径"})
public class ServeApiApplication {
    public static void main(String[] args) {
        SpringApplication.run(ServeApiApplication.class, args);
    }
}

Sin embargo, si no se agrega la anotación @Mapper de la interfaz de mapeo en este momento, aunque aún se puede completar la inyección automática, la función de aviso de Idea estará en rojo y solo deberá ignorarla manualmente .

Epílogo

Lo anterior es todo el desarrollo reciente del proyecto personal y se actualizará más adelante. ¡El aprendizaje es un proceso que requiere retroceder constantemente y adquirir conocimientos antiguos! Una vez que el proyecto se mejore gradualmente, será de código abierto, ¡así que estad atentos! Eres bienvenido a protagonizar ~

Supongo que te gusta

Origin blog.csdn.net/Ccc67ol/article/details/132047321
Recomendado
Clasificación