Ampliar la entidad base de RuoYi-Vue-Plus

prefacio

Consejo : BaseEntityel paquetecom.hmkj.common.core.domain.BaseEntity

RuoYi-Vue-PlusLa extensión en este artículo BaseEntityse refiere principalmente a la clase abstracta heredada por Entityla clase base . De hecho, es el patrón. Si no entiende este patrón, puede consultar mi artículo anterior, que explica varias y diversas condiciones de consulta bajo este patrón:MyBatis PlusModel

MyBatis PlusActiveRecordCRUD

En pocas palabras, ActiveRecordun modo es un modo de acceso a datos, que asigna una tabla de base de datos a una clase, de modo que la base de datos se puede operar directamente a través de esta clase CRUDsin escribir SQLuna declaración.

Pero se debe prestar especial atención a:

¡Este modo AR solo se puede usar bajo la premisa de que el mapeador original correspondiente existe y se hereda de baseMapper y se puede usar! ! !

Este es el comentario sobre la Modelclase abstracta oficial. Aunque puede usar el objeto de mapeo relacional directamente , no necesita introducir capas y capas para agregar, eliminar, modificar y verificar CRUDcomo antes , pero la clase de entidad del mapeo de objetos debe también tienen su correspondiente clase . , y el propósito general que debe heredar la clase Mapper esMapperServiceMapperMyBatis PlusMapperBaseMapper


Ampliar clase base

Heredado en com.hmkj.common.core.domain.BaseEntityla clase base , y la clase de entidad hereda , de modo que la clase de entidad es equivalente a la herencia indirecta , y luego se puede realizar directamente , pero no olvide crear la correspondiente .MybatisPlusModelBaseEntityModelCRUDMapper

/**
 * Entity基类
 *
 * @author Lion Li
 */
@Data
@EqualsAndHashCode(callSuper = true)
public class BaseEntity<T extends Model<?>> extends Model<T> implements Serializable {
    
    

    private static final long serialVersionUID = 1L;

    /**
     * 搜索值
     */
    @JsonIgnore
    @TableField(exist = false)
    private String searchValue;

    /**
     * 创建者
     */
    @TableField(fill = FieldFill.INSERT)
    private String createBy;

    /**
     * 创建时间
     */
    @TableField(fill = FieldFill.INSERT)
    private Date createTime;

    /**
     * 更新者
     */
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private String updateBy;

    /**
     * 更新时间
     */
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;

    /**
     * 请求参数
     */
    @JsonInclude(JsonInclude.Include.NON_EMPTY)
    @TableField(exist = false)
    private Map<String, Object> params = new HashMap<>();

}

Dado que la herencia Modelde clases abstractas debe completarse con genéricos, es necesario pasar BaseEntitylos genéricos al pasado, y BaseEntityes necesario completar los genéricos al heredar
(aquí, tome la clase de entidad de usuario Usuario como ejemplo)

package com.hmkj.orm.domain;

import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.hmkj.common.core.domain.BaseEntity;
import lombok.*;

import java.util.Date;

/**
 * 用户对象 t_user
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = true)
@TableName("t_user")
public class User extends BaseEntity<User> {
    
    

    private static final long serialVersionUID = 1L;

    /**
     * ID
     */
    @TableId(value = "id")
    private Long id;
    /**
     * 头像地址
     */
    private String avatar;
    /**
     * 用户昵称
     */
    private String nickName;
    /**
     * 用户账号
     */
    private String userName;
    /**
     * 密码
     */
    private String password;
    /**
     * 手机号
     */
    private String phonenumber;
    /**
     * 最后登录IP
     */
    private String loginIp;
    /**
     * 最后登录时间
     */
    private Date loginDate;
    /**
     * 帐号状态(0正常 1停用)
     */
    private String status;
    /**
     * 备注
     */
    private String remark;

}

Cree el correspondiente Usery Mapperherede el general Mapper. Dado que RuoYi-Vue-Plusel framework encapsula su propio Mapper general y lo hereda BaseMapper, el código aquí hereda BaseMapperPlusla herencia indirectaBaseMapper

public interface UserMapper extends BaseMapperPlus<UserMapper, User, UserVo> {
    
    

}

Hasta ahora, no hay necesidad de introducir Mappery Service, solo una clase de entidad puede completar el básicoCRUD

Pruebe el modo AR

Crea una clase SpringBootdeTest

import com.hmkj.AppletApplication;
import com.hmkj.orm.domain.User;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest(classes = {
    
    AppletApplication.class})
public class MyTest {
    
    

    @Test
    void testCRUD() {
    
    
        User.builder().id(1L).avatar("www").nickName("lcz").userName("test").password("111").build().insert();
    }

}

Resultados de la

por fin

Haga clic para ver que hay muchas clases RuoYi-Vue-Plusheredadas en el marco BaseEntity. Después de cambiar BaseEntity para completar genéricos, hay muchas clases en la base de código anterior que no están llenas de genéricos, pero esto no afectará la función original. Por supuesto, hay son lugares problemáticos

., por ejemplo, los objetos generados por el marco Boheredarán BaseEntity, y el objeto Bo es solo un objeto que se usa para recibir parámetros, no una clase de entidad de mapeo relacional. Por ejemplo, SysOssBo

esto causará un montón de CRUDmétodos inutilizables cuando llame al objeto y use este ARmodo Las condiciones también son limitadas. Primero, su clase de entidad debe ser una clase de mapeo relacional de la base de datos. Segundo, debe tener la clase de entidad correspondiente Mappery heredarla BaseMapper

. Si puede aceptar este problema, debe puede modificar directamente vmel código de la plantilla para que el código generado se pueda usar directamente Use, modifique directamente la plantilla domainde la clase de entidad aquívm

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = true)
@TableName("${tableName}")
public class ${
    
    ClassName} extends ${
    
    Entity}<${
    
    ClassName}> {
    
    

Simplemente agregue genéricos. Si le gustan las llamadas en cadena, puede agregar anotaciones, de modo que las operaciones de objetos @Builderse puedan omitir al crear objetos .new

Supongo que te gusta

Origin blog.csdn.net/qq_31762741/article/details/131850824
Recomendado
Clasificación