MyBatis Generator(MBG)提供的插件

使用MyBatis Generator生成實體類、Mapper接口以及對應的XML文件時,有時候會根據本身的訴求生成一些定製化的東西,而MBG提供了大量的插件以供使用
在咱們使用的generatorConfig.xml文件裏面進行配置便可
如下是我整理的比較有用的幾個插件java

1. 序列化(Serializable),不少實體生成後都須要能夠進行序列化

<!-- JavaBean 實現 序列化 接口 -->
    <plugin type="org.mybatis.generator.plugins.SerializablePlugin" />

生成的java實體代碼以下git

import lombok.Getter;
import lombok.Setter;

import java.io.Serializable;

/**
 * @Author: A.H
 * @Date: 2019/9/16 19:37
 */
import java.io.Serializable;

public class UserInfo implements Serializable {
    private Long id;

    private String userName;

    private String userPhone;

    private static final long serialVersionUID = 1L;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getUserPhone() {
        return userPhone;
    }

    public void setUserPhone(String userPhone) {
        this.userPhone = userPhone;
    }
}

2. 支持內存分頁(RowBoundsPlugin), 列表查詢的時候確定得分頁,使用這個

<!-- 開啓支持內存分頁   可生成 支持內存分佈的方法及參數   -->
    <plugin type="org.mybatis.generator.plugins.RowBoundsPlugin" />

生成的interface文件中會多一個接口github

public interface UserInfoMapper {
    ...

    List<UserInfo> selectByExampleWithRowbounds(UserInfoExample example, RowBounds rowBounds);

    ...
}
/**
     *  java 代碼使用方式
     */
 @Override
    public void getUserList(){


        List<UserInfo> list = userInfoMapper.selectByExampleWithRowbounds(null,new RowBounds(0,10));
        
        for (UserInfo user : list){
           System.out.println( user.toString());
        }
    }
# 打印出來結果

UserInfo(id=1, userName=張三, userPhone=133333333)
UserInfo(id=2, userName=李四, userPhone=12222222)
UserInfo(id=3, userName=王五, userPhone=14444444444)
UserInfo(id=4, userName=趙六, userPhone=1555555555)
UserInfo(id=5, userName=田七, userPhone=134556666)
UserInfo(id=6, userName=耿二, userPhone=1333333333334)
UserInfo(id=7, userName=孫八, userPhone=1323123123)
UserInfo(id=8, userName=齊九, userPhone=123321321)
UserInfo(id=9, userName=史十, userPhone=33231321)
UserInfo(id=10, userName=尚十一, userPhone=312321312)
  1. 自定義插件
    技術不斷進步MyBatis Generator 生成的代碼也會有不少不盡人意的地方,好比沒有如今不少類你們都選擇Lombock模式,儘可能簡潔,而MGB原生插件裏面並無帶這些,這樣就須要咱們本身寫一些插件

下面這個是我從大神那個貼過來的,惟一修改的是添加domain的impor我添加了全部Lombock的引用,多加了@ToString註解api

import org.mybatis.generator.api.IntrospectedColumn;
import org.mybatis.generator.api.IntrospectedTable;
import org.mybatis.generator.api.PluginAdapter;
import org.mybatis.generator.api.dom.java.Interface;
import org.mybatis.generator.api.dom.java.Method;
import org.mybatis.generator.api.dom.java.TopLevelClass;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

/**
 * @Author: A.H
 * @Date: 2019/9/21 15:05
 */
public class LombokPlugin extends PluginAdapter {
    @Override
    public boolean validate(List<String> list) {
        return true;
    }

    @Override
    public boolean modelBaseRecordClassGenerated(TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
        //添加domain的import
//        topLevelClass.addImportedType("lombok.Data");
//        topLevelClass.addImportedType("lombok.Builder");
//        topLevelClass.addImportedType("lombok.NoArgsConstructor");
//        topLevelClass.addImportedType("lombok.AllArgsConstructor");
        topLevelClass.addImportedType("lombok.*");

        //添加domain的註解
        topLevelClass.addAnnotation("@Data");
        topLevelClass.addAnnotation("@ToString");
        topLevelClass.addAnnotation("@Builder");
        topLevelClass.addAnnotation("@NoArgsConstructor");
        topLevelClass.addAnnotation("@AllArgsConstructor");

        //添加domain的註釋
        topLevelClass.addJavaDocLine("/**");
        topLevelClass.addJavaDocLine("* Created by Mybatis Generator on " + date2Str(new Date()));
        topLevelClass.addJavaDocLine("*/");

        return true;
    }

    @Override
    public boolean clientGenerated(Interface interfaze, TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
        //Mapper文件的註釋
        interfaze.addJavaDocLine("/**");
        interfaze.addJavaDocLine("* Created by Mybatis Generator on " + date2Str(new Date()));
        interfaze.addJavaDocLine("*/");
        return true;
    }

    @Override
    public boolean modelSetterMethodGenerated(Method method, TopLevelClass topLevelClass, IntrospectedColumn introspectedColumn, IntrospectedTable introspectedTable, ModelClassType modelClassType) {
        //不生成getter
        return false;
    }

    @Override
    public boolean modelGetterMethodGenerated(Method method, TopLevelClass topLevelClass, IntrospectedColumn introspectedColumn, IntrospectedTable introspectedTable, ModelClassType modelClassType) {
        //不生成setter
        return false;
    }

    private String date2Str(Date date) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
        return sdf.format(date);
    }
}

在generatorConfig.xml文件中添加mybatis

<!-- 自定義插件實現lomlock註解-->
    <plugin type="com.lkucar.server.common.LombokPlugin"/>

生成的實體類清爽多了app

import java.io.Serializable;
import lombok.*;

/**
* Created by Mybatis Generator on 2019/09/21
*/
@Data
@ToString
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class UserInfo implements Serializable {
    private Long id;

    private String userName;

    private String userPhone;

    private static final long serialVersionUID = 1L;
}

參考資料:3. MyBatis Generator 插件
MyBatis Generator(MBG)提供的插件
MybatisGenerator + Lombok 自動生成的domain再也沒有一堆Getter/Setter方法了dom

相關文章
相關標籤/搜索