RuoYi-Vue-Plus の BaseEntity を拡張する

序文

ヒント:BaseEntityパッケージcom.hmkj.common.core.domain.BaseEntity

この記事でのRuoYi-Vue-Plus拡張とは、主に基底クラスから継承された抽象クラスのBaseEntityことを指しますが、実際にはパターンですこのパターンがわからない場合は、以前の記事でさまざまなクエリ条件を説明しています。このパターン:EntityMyBatis PlusModel

MyBatis PlusActiveRecordCRUD

簡単に言うと、モードはデータ アクセス モードであり、データベース テーブルをクラスにマップするため、ステートメントを記述せずにActiveRecordこのクラスを通じてデータベースを直接操作できます。CRUDSQL

ただし、次の点には特別な注意を払う必要があります。

このARモードは、対応する独自マッパーが存在し、baseMapperを継承して利用できることを前提としてのみ利用可能です!

これは公式の抽象クラスについてのコメントですModel。リレーショナル マッピング オブジェクトを直接使用できますが、CRUD以前のように追加、削除、変更、確認するためのレイヤーMapperを導入する必要はありませんが、オブジェクト マッピングのエンティティ クラスは対応するクラスもあり、 Mapper クラスが継承する必要がある一般的な目的は次のとおりです。ServiceMapperMyBatis PlusMapperBaseMapper


基本クラスを拡張する

com.hmkj.common.core.domain.BaseEntity基底クラスMybatisPlus継承しModel、エンティティクラスも継承するBaseEntityことで、エンティティクラスは間接継承に相当しModel​​、直接実現することもできますCRUDが、対応するものを作成することを忘れないでくださいMapper

/**
 * 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<>();

}

抽象クラスの継承にはジェネリックスを埋める必要があるため、過去にジェネリックスを渡すModel必要があり、継承時にジェネリックスを埋める必要があります(ここではUserユーザーエンティティクラスを例にします)BaseEntityBaseEntity

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;

}

対応するUserものを作成しMapper、一般的なものを継承します。フレームワークは独自の一般的な Mapper をカプセル化して継承するMapperため、ここでのコードは間接的な継承を継承します。RuoYi-Vue-PlusBaseMapperBaseMapperPlusBaseMapper

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

}

Mapperこれまでのところ、とを導入する必要はなくService、1 つのエンティティ クラスだけで基本的な処理を完了できます。CRUD

ARモードのテスト

SpringBootTestクラスを作成します

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();
    }

}

の結果

やっと

RuoYi-Vue-Plusクリックすると、フレームワークに多くのクラスが継承されていることを確認できますBaseEntity。BaseEntity を変更してジェネリックスを入力した後、以前のコード ベースにはジェネリックスが入力されていないクラスが多数ありますが、これは元の関数には影響しません。面倒な場所です

。たとえば、フレームワークによって生成されたオブジェクトはBo継承されますBaseEntity。また、Bo オブジェクトはパラメータを受け取るためにのみ使用されるオブジェクトであり、リレーショナル マッピング エンティティ クラスではありません。たとえば、これにより、使用できないメソッドがSysOssBo

大量に発生します。CRUDオブジェクトを呼び出してこのARモードを使用する 条件も限られています。まず、エンティティ クラスがデータベースのリレーショナル マッピング クラスである必要があります。次に、対応するエンティティ クラスを持っていて、それを継承している必要があります。この問題を許容できる場合MapperBaseMapper

vm生成されたコードを直接使用できるように、テンプレート コードを直接変更できます。ここでは、domainエンティティ クラスのvmテンプレートを直接変更して使用します

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

ジェネリックスを追加するだけです。連鎖呼び出しが好きなら、アノテーションを追加して、オブジェクト作成時にオブジェクトの操作@Builderを省略できます。new

おすすめ

転載: blog.csdn.net/qq_31762741/article/details/131850824