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
[username, password, ...]
tableClass.baseBlobFields
[username, password, avatar, ...]
tableClass.remark
用户信息表
2. 字段信息(field.*
)
field.fieldName
userName
field.columnName
user_name
field.jdbcType
VARCHAR
field.columnLength
64
field.columnScale
2
field.columnIsArray
false
field.shortTypeName
String
field.fullTypeName
java.lang.String
field.remark
用户名
field.autoIncrement
true
field.nullable
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