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

相关文章
相关标签/搜索