> 技术文档 > mybatisX的自定义模板生成

mybatisX的自定义模板生成

在idea中使用mybtais的自定义模板生成,可以帮我们省去很多重复的代码。

打开一个项目,我们要修改的主要就两个文件,一个是生成的mapper接口,另一个是xml文件:
相应的mapper接口模板为:
 

package ${mapperInterface.packageName};import ${tableClass.fullClassName};import com.scmpt.framework.aop.mybatis.interceptor.unique.UniqueValidation;import java.util.List;import org.apache.ibatis.annotations.Param;/*** @author ${author!}* @description 针对表【${tableClass.tableName}(${tableClass.remark!})】的数据库操作Mapper* @createDate ${.now?string(\'yyyy-MM-dd HH:mm:ss\')}* @Entity ${tableClass.fullClassName}*/public interface ${mapperInterface.fileName} {@UniqueValidation(table = \"${tableClass.tableName}\")int insert(${tableClass.shortClassName} record);${tableClass.shortClassName} getById(Long id);@UniqueValidation(table = \"${tableClass.tableName}\")int updateById(${tableClass.shortClassName} record);void deleteRecycle(@Param(\"ids\") List ids, @Param(\"updateUserId\") Long updateUserId);void recoverRecycle(@Param(\"ids\") List ids, @Param(\"updateUserId\") Long updateUserId);void deleteBatch(@Param(\"ids\") List ids, @Param(\"updateUserId\") Long updateUserId);List getToTranslate(@Param(\"ids\") List ids);List getInfoDoByIds(@Param(\"ids\")List longList);void insertBatch(@Param(\"doList\") List managesDos);}

我们要引用的注解也好,或者是第三方插件也好。都是提前把对应的包路径引进来。

相应的mapper的XML文件生成模板为:
 

   <id property=\"${field.fieldName}\" column=\"${field.columnName}\" jdbcType=\"${field.jdbcType}\"/>   <result property=\"${field.fieldName}\" column=\"${field.columnName}\" jdbcType=\"${field.jdbcType}\"/>    ${field.columnName},${\"\\n \"}   select  from ${tableClass.tableName} where  ${field.columnName} = ${\'#\'}{${field.fieldName},jdbcType=${field.jdbcType}} AND  <insert id=\"insert\" keyColumn=\"${tableClass.pkFields[0].columnName}\" keyProperty=\"${tableClass.pkFields[0].fieldName}\" parameterType=\"${tableClass.fullClassName}\" useGeneratedKeys=\"true\"> insert into ${tableClass.tableName} ( ${field.columnName},${\"\\n \"}) values (${\'#\'}{${field.fieldName},jdbcType=${field.jdbcType}},${\"\\n \"})   update ${tableClass.tableName}     ${field.columnName} = ${\'#\'}{${field.fieldName},jdbcType=${field.jdbcType}},    where  ${field.columnName} = ${\'#\'}{${field.fieldName},jdbcType=${field.jdbcType}} AND   update ${tableClass.tableName} set is_recycle = 0, update_time = now(), update_user_id = ${\'#\'}{updateUserId} where ${field.columnName} in  ${\'#\'}{id}    update ${tableClass.tableName} set is_delete = 1, update_time = now(), update_user_id = ${\'#\'}{updateUserId} where ${field.columnName} in  ${\'#\'}{id}    update ${tableClass.tableName} set is_recycle = 1, update_time = now(), update_user_id = ${\'#\'}{updateUserId} where ${field.columnName} in  ${\'#\'}{id}    INSERT INTO ${tableClass.tableName} ( ${field.columnName}, ) VALUES  (  ${\'#\'}{item.${field.fieldName}},  )    SELECT  FROM ${tableClass.tableName} WHERE ${field.columnName} IN  ${\'#\'}{id}    SELECT tt.${field.columnName} FROM (  SELECT ${\'#\'}{id} AS ${field.columnName}  ) tt LEFT JOIN ${tableClass.tableName} oms ON tt.${field.columnName} = oms.${field.columnName} WHERE oms.${field.columnName} IS NULL 

至此,我们就可以直接点击模板生成来进行我们自定义的模板生成策略。

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

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

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

要注意的是,我们修改的是default-all这个生成模板,所以,我们也要使用相应的生成策略才可以。

生成的mapper接口为:

可以看到正确输出了我们相应的格式。

如果想要恢复默认的生成模板,我们可以直接在项目中恢复默认。

如此,就能把我们的模板恢复为静态的模板了。相应的代码生成时的映射关系为:

1. 实体类信息(tableClass.*

变量名 说明 示例 tableClass.fullClassName 类的全限定名 com.example.system.entity.UserDO tableClass.shortClassName 类的简称(不含包名) UserDO tableClass.tableName 数据库表名 sys_user tableClass.pkFields 主键字段集合 [id] tableClass.allFields 所有字段集合 [id, username, password, ...] tableClass.baseFields 排除主键 & BLOB 的字段集合 [username, password, ...] tableClass.baseBlobFields 排除主键,含 BLOB 的字段集合 [username, password, avatar, ...] tableClass.remark 表注释 用户信息表

2. 字段信息(field.*

变量名 说明 示例 field.fieldName Java 属性名 userName field.columnName 数据库列名 user_name field.jdbcType JDBC 类型 VARCHAR field.columnLength 列长度 64 field.columnScale 列精度(小数位) 2 field.columnIsArray 是否为数组 false field.shortTypeName Java 类型短名称 String field.fullTypeName Java 类型全限定名 java.lang.String field.remark 字段注释 用户名 field.autoIncrement 是否自增 true field.nullable 是否允许 NULL false

3. 配置信息(baseInfo.*

变量名 说明 示例 baseInfo.shortClassName 配置名称 UserDO baseInfo.tableName 配置文件名称 UserDO baseInfo.pkFields 配置名称 id baseInfo.allFields 后缀 DO baseInfo.baseFields 包名 com.example.system.entity baseInfo.baseBlobFields 模板内容 ... baseInfo.remark 相对模块的资源文件路径 src/main/resources

更多的信息请查看官网:

Mybatis X 插件 | MyBatis-Plus