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.fullClassNamecom.example.system.entity.UserDOtableClass.shortClassNameUserDOtableClass.tableNamesys_usertableClass.pkFields[id]tableClass.allFields[id, username, password, ...]tableClass.baseFields[username, password, ...]tableClass.baseBlobFields[username, password, avatar, ...]tableClass.remark用户信息表2. 字段信息(field.*)
field.fieldNameuserNamefield.columnNameuser_namefield.jdbcTypeVARCHARfield.columnLength64field.columnScale2field.columnIsArrayfalsefield.shortTypeNameStringfield.fullTypeNamejava.lang.Stringfield.remark用户名field.autoIncrementtruefield.nullablefalse3. 配置信息(baseInfo.*)
baseInfo.shortClassNameUserDObaseInfo.tableNameUserDObaseInfo.pkFieldsidbaseInfo.allFieldsDObaseInfo.baseFieldscom.example.system.entitybaseInfo.baseBlobFields...baseInfo.remarksrc/main/resources更多的信息请查看官网:
Mybatis X 插件 | MyBatis-Plus


