No agregue su prefijo a ninguna variable booleana en la clase Java

Prefacio: En el manual de desarrollo de Ali, hay una especificación de desarrollo que es obligatoria: cualquier variable booleana en la clase POJO no debe tener el prefijo is.

También en el manual de desarrollo de Alibaba, en el primer ítem del acuerdo de creación de tablas en la especificación MySQL, la variable que expresa sí o no adopta el método de nomenclatura de is_xxx.

Muchas personas están confundidas Mybatis o mybatis-plus integrado en nuestro proyecto de producción, si las propiedades del objeto de entidad pojo son diferentes de los campos de la tabla,

¿Cómo se puede mapear? Entonces, ¿por qué ninguna variable booleana puede tener el prefijo is? Hablemos de las razones a continuación.

Definir una clase pojo
package com.example.demo.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;

@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("user")
@Builder
public class User implements Serializable {
    
    

    private static final long serialVersionUID = 1L;

    @TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    private String name;
    private Integer age;
    private String addr;
    private Integer isModify; //是否被修改
    private Boolean isDelete; //是否被删除

}

Vea que el objeto Usuario tiene dos atributos variables, uno es Modificar y el otro es Eliminar. Aunque ambas variables comienzan con es, los tipos de datos correspondientes son diferentes. El tipo de datos correspondiente a es Modificar es Integer, y el tipo de datos correspondiente es Eliminar Los datos tipo es booleano.

@Data: Creo que todos usarán esta anotación en proyectos de producción. Esta es una anotación en el marco de lombok, lo que puede ahorrarnos una gran cantidad de código getter y setter en el proyecto. La siguiente es la definición de @Data, puede ver que está compuesto por Getter, Setter, RequiredArgsConstructor, ToString y EqualsAndHashCode.

package lombok;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 
 * @see Getter
 * @see Setter
 * @see RequiredArgsConstructor
 * @see ToString
 * @see EqualsAndHashCode
 * @see lombok.Value
 */
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.SOURCE)
public @interface Data {
    
    
	String staticConstructor() default "";
}

Anotados por @Data, los métodos Getter y Setter de isModify e isDelete del objeto User generado se muestran a continuación. Puede ver que los métodos Getter y Setter correspondientes a la variable booleana isDelete omitirán el prefijo is, lo que dará como resultado que no se obtenga isEliminar atributos. Debido a que se define como un atributo del tipo de datos básico booleano isDelete, y su método también es isDelete(), cuando el marco realiza un análisis inverso, "piensa erróneamente" que el nombre del atributo correspondiente es delete, lo que da como resultado que el atributo no se puede obtenido.

	public Integer getIsModify() {
        return isModify;
    }

    public void setIsModify(Integer isModify) {
        this.isModify = isModify;
    }

    public Boolean getDelete() {
        return isDelete;
    }

    public void setDelete(Boolean delete) {
        isDelete = delete;
    }

Este problema también existe si no usa la anotación @Data, pero usa la herramienta de desarrollo IDEA para generar automáticamente métodos Getter y Setter. Para resolver este problema, necesitamos escribir manualmente los métodos Getter y Setter. Obviamente, este método es muy pesado e indeseable. No solo aumenta la legibilidad del código, sino que también aumenta la carga de trabajo y el costo de desarrollo.

	public Integer getIsModify() {
        return isModify;
    }

    public void setIsModify(Integer isModify) {
        this.isModify = isModify;
    }

    public Boolean getIsDelete() {
        return isDelete;
    }

    public void setIsDelete(Boolean isDelete) {
        this.isDelete = isDelete;
    }
Entonces, si el campo de creación de la tabla usa el método de nomenclatura de is_xxx, ¿cómo se debe definir la clase POJO de la entidad correspondiente? ¿Cómo mapear con el marco de la capa de persistencia?

Método 1: la variable is_xxx correspondiente al campo de la tabla utiliza el tipo de datos Integer en lugar del tipo de datos Boolean. Como se muestra en el objeto Usuario anterior, isModify del tipo de datos Integer no tiene el problema de que el análisis inverso no puede obtener la variable isModify.

Método 2: la variable is_xxx correspondiente al campo de la tabla todavía usa el tipo de datos booleano, pero la variable de clase POJO elimina el prefijo is y luego establece la relación de asignación de is_xxx a xxx en el archivo de configuración xml.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo.dao.UserMapper">
    <resultMap type="com.example.demo.entity.User" id="userMap">
        <result property="id" column="id"/>
        <result property="name" column="name"/>
        <result property="age" column="age"/>
        <result property="name" column="name"/>
        <result property="addr" column="addr"/>
        <result property="isModify" column="is_modify"/>
        <result property="delete" column="is_delete"/>
    </resultMap>
</mapper>

Supongo que te gusta

Origin blog.csdn.net/qq798867485/article/details/131392842
Recomendado
Clasificación