首先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模板语言
名称 | 含义 |
tableClass.fullClassName | 类的全称(包括包名) |
tableClass.shortClassName | 类的简称 |
tableClass.tableName | 表名 |
tableClass.pkFields | 表的所有主键字段 |
tableClass.allFields | 表的所有字段 |
tableClass.baseFields | 排除主键和 blob 的所有字段 |
tableClass.baseBlobFields | 排除主键的所有字段 |
tableClass.remark | 表注释 |
名称 | 含义 |
field.fieldName | 字段名称 |
field.columnName | 列名称 |
field.jdbcType | jdbc 类型 |
field.columnLength | 列段长度 |
field.columnScale | 列的精度 |
field.columnIsArray | 字段类型是不是数组类型 |
field.shortTypeName | java 类型短名称, 通常用于定义字段 |
field.fullTypeName | java 类型的长名称, 通常用于导入 |
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>