通过MybaitsX插件实现自定义代码生成器

本文介绍了如何在MybatisX中使用自定义模板,包括模板文件结构(如meta.xml和ftl),FreeMarker模板语言的应用,以及如何结合MybatisX官方变量列表来创建domain类、mapper接口和XML映射文件。
摘要由CSDN通过智能技术生成

首先MybatisX的基础使用以及如何进行快速代码生成就不赘述了,直接进入自定义模板正题。

1、找到MybatisX 模板存放位置(本人使用的idea为2023.1.3)

方式二:如果没有找到,需要使用mybatisx进行一次代码生成

 如果idea没有找到可以尝试:在C盘目录C:\Users\Administrator\AppData\Roaming\JetBrains\IntelliJIdea2023.1下搜索com.baomidou.plugin.idea.mybatisx找到以上位置。

2、模板文件介绍:

meta.xml

 每个template标签对应你需要生成的文件模板类型,根据需要自行添加配置。

ftl文件: 使用的FreeMark模板语言

结合MyBatisX官网的变量列表

名称含义
tableClass.fullClassName类的全称(包括包名)
tableClass.shortClassName类的简称
tableClass.tableName表名
tableClass.pkFields表的所有主键字段
tableClass.allFields表的所有字段
tableClass.baseFields排除主键和 blob 的所有字段
tableClass.baseBlobFields排除主键的所有字段
tableClass.remark表注释
名称含义
field.fieldName字段名称
field.columnName列名称
field.jdbcTypejdbc 类型
field.columnLength列段长度
field.columnScale列的精度
field.columnIsArray字段类型是不是数组类型
field.shortTypeNamejava 类型短名称, 通常用于定义字段
field.fullTypeNamejava 类型的长名称, 通常用于导入
field.remark字段注释
field.autoIncrement是否自增
field.nullable是否允许为空
名称含义
baseInfo.shortClassName配置名称
baseInfo.tableName配置文件名称
baseInfo.pkFields配置名称
baseInfo.allFields后缀
baseInfo.baseFields包名
baseInfo.baseBlobFields模板内容
baseInfo.remark相对模块的资源文件路径

Freemarker的基本语法及使用大全_freemarker 语法_小码哥哥哥的博客-CSDN博客

不太懂freemark和模板中变量含义的结合以上理解就可以进行模板自定义了。

3、使用MybatisX进行生成

 

参考:

本人比较懒,就不在附更多内容了。贴几个自定义模板供参考 

domain.ftl

package ${domain.packageName};
/**
* ${tableClass.remark?replace("表","")!}Model
* @author you
* @since ${.now?string('yyyy-MM-dd')}
*/
@Data
@ApiModel(value = "${tableClass.tableName?replace("表","")!}对象", description = "${tableClass.remark?replace("表","")!}对象")
@TableName("${tableClass.tableName}")
public class ${tableClass.shortClassName} extends BaseModel implements Serializable {

<#assign filters=["createId", "createDatetime", "updateId", "updateDatetime"]>

<#list tableClass.allFields as field>
    <#if filters?seq_contains(field.fieldName)><#continue></#if>
    /**
    * ${field.remark!}
    */<#if !field.nullable>${"\n    "}<#if field.fieldName=="id">@TableId(value = "id", type = IdType.AUTO)</#if></#if><#if !field.nullable>${"\n    "}<#if field.jdbcType=="VARCHAR">@NotBlank(message="[${field.remark!}]不能为空")<#else>@NotNull(message="[${field.remark!}]不能为空")</#if></#if><#if field.jdbcType=="VARCHAR">${"\n    "}@Size(max= ${field.columnLength},message="编码长度不能超过${field.columnLength}")</#if>
    @ApiModelProperty("${field.remark!}")
    private ${field.shortTypeName} ${field.fieldName};

</#list>

}

 mapperInterface.ftl

package ${mapperInterface.packageName};

import ${tableClass.fullClassName};
<#if tableClass.pkFields??>
    <#list tableClass.pkFields as field><#assign pkName>${field.shortTypeName}</#assign></#list>
</#if>
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;

/**
* @author tw
* @description 针对表【${tableClass.tableName}<#if tableClass.remark?has_content>(${tableClass.remark!})</#if>】的数据库操作Mapper
* @since ${.now?string('yyyy-MM-dd')}
*/
@Mapper
public interface ${mapperInterface.fileName} extends BaseMapper<${tableClass.shortClassName}> {

    /**
    * 自定义分页
    * @param
    * @return {{@link ${tableClass.shortClassName}}}
    */
    List<${tableClass.shortClassName}> list${tableClass.shortClassName?replace("Model","")?cap_first}();

}

mapperXml.ftl 

<?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="${mapperInterface.packageName}.${baseInfo.fileName}">

    <resultMap id="BaseResultMap" type="${tableClass.fullClassName}">
        <#list tableClass.pkFields as field>
            <id property="${field.fieldName}" column="${field.columnName}" jdbcType="${field.jdbcType}"/>
        </#list>
        <#list tableClass.baseFields as field>
            <result property="${field.fieldName}" column="${field.columnName}" jdbcType="${field.jdbcType}"/>
        </#list>
    </resultMap>

    <sql id="Base_Column_List">
        <#list tableClass.allFields as field>${field.columnName}<#sep>,<#if field_index%3==2>${"\n        "}</#if></#list>
    </sql>

    <select id="list${tableClass.shortClassName?replace("Model","")?cap_first}" resultMap="${domain.packageName}.${tableClass.shortClassName}">
        select * from ${tableClass.tableName}
    </select>
</mapper>

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值