idea easyCode MybatisPlus配置 idea的easyCode的 MybatisPlus模板的配置详解
之诚 人气:1想了解idea的easyCode的 MybatisPlus模板的配置详解的相关内容吗,之诚在本文为您仔细讲解idea easyCode MybatisPlus配置的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点:idea,easyCode,MybatisPlus,下面大家一起来学习吧。
EasyCode 插件
EasyCode 插件 是一款根据表结构生成代码的很方便的Idea插件, 强烈推荐. 并且可以自定义模板来控制生成的类
我在使用的过程中发现一些问题,现在把解决办法记录下来, 我主要使用的是插件自带的mybatisplus模板
1. 生成的代码中有大量的get set方法
lombok 插件是个好东西, 我删除了模板中的get和set方法, 添加了lombok 的注解, '
2. 如果数据库中的表都有前缀"t_" 导致生成的类名中都有一个前缀 “T”
这个问题困扰我很久,改了各种模板 , 最后发现把init文件的第一行代码复制到define文件的第一行就可以, init文件根本就没有用.
3, 生成的类中没有DTO对象
直接把entity模板文件复制一份改改就有了
下面分享下我修改后的模板
Template Setting 配置项 Group Name : MybatisPlus
如果没有MybatisPlus 的group name, 可以新增一个
dto文件
##导入宏定义 $!define ##保存文件(宏定义) #save("/dto", "DTO.java") ##包路径(宏定义) #setPackageSuffix("dto") ##自动导入包(全局变量) $!autoImport ##import com.baomidou.mybatisplus.extension.activerecord.Model; import java.io.Serializable; import lombok.Data; ##import com.baomidou.mybatisplus.annotation.IdType; ##import com.baomidou.mybatisplus.annotation.TableId; ##表注释(宏定义) #tableComment("表实体类") @Data @SuppressWarnings("serial") public class $!{tableInfo.name}DTO implements Serializable { #foreach($column in $tableInfo.fullColumn) #if(${column.comment})/**${column.comment}*/#end private $!{tool.getClsNameByFullName($column.type)} $!{column.name}; #end ###foreach($column in $tableInfo.fullColumn) ## #getSetMethod($column) ###end ###foreach($column in $tableInfo.pkColumn) ## /** ## * 获取主键值 ## * ## * @return 主键值 ## */ ## @Override ## protected Serializable pkVal() { ## return this.$!column.name; ## } ## #break ###end }
controller 文件
##导入宏定义 $!define ##设置表后缀(宏定义) #setTableSuffix("Controller") ##保存文件(宏定义) #save("/controller", "Controller.java") ##包路径(宏定义) #setPackageSuffix("controller") ##定义服务名 #set($serviceName = $!tool.append($!tool.firstLowerCase($!tableInfo.name), "Service")) ##定义实体对象名 #set($entityName = $!tool.firstLowerCase($!tableInfo.name)) import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.api.ApiController; import com.baomidou.mybatisplus.extension.api.R; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import $!{tableInfo.savePackageName}.entity.$!tableInfo.name; import $!{tableInfo.savePackageName}.service.$!{tableInfo.name}Service; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.io.Serializable; import java.util.List; ##表注释(宏定义) #tableComment("表控制层") @RestController @RequestMapping("$!tool.firstLowerCase($!tableInfo.name)") public class $!{tableName} extends ApiController { /** * 服务对象 */ @Resource private $!{tableInfo.name}Service $!{serviceName}; /** * 分页查询所有数据 * * @param page 分页对象 * @param $!entityName 查询实体 * @return 所有数据 */ @GetMapping public R selectAll(Page<$!tableInfo.name> page, $!tableInfo.name $!entityName) { return success(this.$!{serviceName}.page(page, new QueryWrapper<>($!entityName))); } /** * 通过主键查询单条数据 * * @param id 主键 * @return 单条数据 */ @GetMapping("{id}") public R selectOne(@PathVariable Serializable id) { return success(this.$!{serviceName}.getById(id)); } /** * 新增数据 * * @param $!entityName 实体对象 * @return 新增结果 */ @PostMapping public R insert(@RequestBody $!tableInfo.name $!entityName) { return success(this.$!{serviceName}.save($!entityName)); } /** * 修改数据 * * @param $!entityName 实体对象 * @return 修改结果 */ @PutMapping public R update(@RequestBody $!tableInfo.name $!entityName) { return success(this.$!{serviceName}.updateById($!entityName)); } /** * 删除数据 * * @param idList 主键结合 * @return 删除结果 */ @DeleteMapping public R delete(@RequestParam("idList") List<Long> idList) { return success(this.$!{serviceName}.removeByIds(idList)); } }
serviceImpl 文件
##导入宏定义 $!define ##设置表后缀(宏定义) #setTableSuffix("ServiceImpl") ##保存文件(宏定义) #save("/service/impl", "ServiceImpl.java") ##包路径(宏定义) #setPackageSuffix("service.impl") import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import $!{tableInfo.savePackageName}.dao.$!{tableInfo.name}Dao; import $!{tableInfo.savePackageName}.entity.$!{tableInfo.name}; import $!{tableInfo.savePackageName}.service.$!{tableInfo.name}Service; import org.springframework.stereotype.Service; ##表注释(宏定义) #tableComment("表服务实现类") @Service("$!tool.firstLowerCase($tableInfo.name)Service") public class $!{tableName} extends ServiceImpl<$!{tableInfo.name}Dao, $!{tableInfo.name}> implements $!{tableInfo.name}Service { }
service文件
##导入宏定义 $!define ##设置表后缀(宏定义) #setTableSuffix("Service") ##保存文件(宏定义) #save("/service", "Service.java") ##包路径(宏定义) #setPackageSuffix("service") import com.baomidou.mybatisplus.extension.service.IService; import $!{tableInfo.savePackageName}.entity.$!tableInfo.name; ##表注释(宏定义) #tableComment("表服务接口") public interface $!{tableName} extends IService<$!tableInfo.name> { }
dao文件
##导入宏定义 $!define ##设置表后缀(宏定义) #setTableSuffix("Dao") ##保存文件(宏定义) #save("/dao", "Dao.java") ##包路径(宏定义) #setPackageSuffix("dao") import com.baomidou.mybatisplus.core.mapper.BaseMapper; import $!{tableInfo.savePackageName}.entity.$!tableInfo.name; ##表注释(宏定义) #tableComment("表数据库访问层") public interface $!{tableName} extends BaseMapper<$!tableInfo.name> { }
entity 文件
##导入宏定义 $!define ##保存文件(宏定义) #save("/entity", ".java") ##包路径(宏定义) #setPackageSuffix("entity") ##自动导入包(全局变量) $!autoImport import com.baomidou.mybatisplus.extension.activerecord.Model; import java.io.Serializable; import lombok.Data; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; ##表注释(宏定义) #tableComment("表实体类") @Data @SuppressWarnings("serial") public class $!{tableInfo.name} extends Model<$!{tableInfo.name}> { @TableId(type = IdType.AUTO) #foreach($column in $tableInfo.fullColumn) #if(${column.comment})/**${column.comment}*/#end private $!{tool.getClsNameByFullName($column.type)} $!{column.name}; #end ###foreach($column in $tableInfo.fullColumn) ## #getSetMethod($column) ###end #foreach($column in $tableInfo.pkColumn) /** * 获取主键值 * * @return 主键值 */ @Override protected Serializable pkVal() { return this.$!column.name; } #break #end }
Global Config 配置项 Group Name : Default
下面的文件都是Group Name 为 Default 的
mybatisSupport 文件
##针对Mybatis 进行支持,主要用于生成xml文件 #foreach($column in $tableInfo.fullColumn) ##储存列类型 $tool.call($column.ext.put("sqlType", $tool.getField($column.obj.dataType, "typeName"))) #if($tool.newHashSet("java.lang.String").contains($column.type)) #set($jdbcType="VARCHAR") #elseif($tool.newHashSet("java.lang.Boolean", "boolean").contains($column.type)) #set($jdbcType="BOOLEAN") #elseif($tool.newHashSet("java.lang.Byte", "byte").contains($column.type)) #set($jdbcType="BYTE") #elseif($tool.newHashSet("java.lang.Integer", "int", "java.lang.Short", "short").contains($column.type)) #set($jdbcType="INTEGER") #elseif($tool.newHashSet("java.lang.Long", "long").contains($column.type)) #set($jdbcType="INTEGER") #elseif($tool.newHashSet("java.lang.Float", "float", "java.lang.Double", "double").contains($column.type)) #set($jdbcType="NUMERIC") #elseif($tool.newHashSet("java.util.Date", "java.sql.Timestamp", "java.time.Instant", "java.time.LocalDateTime", "java.time.OffsetDateTime", " java.time.ZonedDateTime").contains($column.type)) #set($jdbcType="TIMESTAMP") #elseif($tool.newHashSet("java.sql.Date", "java.time.LocalDate").contains($column.type)) #set($jdbcType="TIMESTAMP") #else ##其他类型 #set($jdbcType="OTHER") #end $tool.call($column.ext.put("jdbcType", $jdbcType)) #end ##定义宏,查询所有列 #macro(allSqlColumn)#foreach($column in $tableInfo.fullColumn)$column.obj.name#if($velocityHasNext), #end#end#end autoImport 文件 ##自动导入包(仅导入实体属性需要的包,通常用于实体类) #foreach($import in $importList) import $!import; #end
define 文件
##(Velocity宏定义) ## 去掉表的t_前缀 $!tableInfo.setName($tool.getClassName($tableInfo.obj.name.replaceFirst("t_",""))) ##定义设置表名后缀的宏定义,调用方式:#setTableSuffix("Test") #macro(setTableSuffix $suffix) #set($tableName = $!tool.append($tableInfo.name, $suffix)) #end ##定义设置包名后缀的宏定义,调用方式:#setPackageSuffix("Test") #macro(setPackageSuffix $suffix) #if($suffix!="")package #end#if($tableInfo.savePackageName!="")$!{tableInfo.savePackageName}.#{end}$!suffix; #end ##定义直接保存路径与文件名简化的宏定义,调用方式:#save("/entity", ".java") #macro(save $path $fileName) $!callback.setSavePath($tool.append($tableInfo.savePath, $path)) $!callback.setFileName($tool.append($tableInfo.name, $fileName)) #end ##定义表注释的宏定义,调用方式:#tableComment("注释信息") #macro(tableComment $desc) /** * $!{tableInfo.comment}($!{tableInfo.name})$desc * * @author $!author * @since $!time.currTime() */ #end ##定义GET,SET方法的宏定义,调用方式:#getSetMethod($column) #macro(getSetMethod $column) public $!{tool.getClsNameByFullName($column.type)} get$!{tool.firstUpperCase($column.name)}() { return $!{column.name}; } public void set$!{tool.firstUpperCase($column.name)}($!{tool.getClsNameByFullName($column.type)} $!{column.name}) { this.$!{column.name} = $!{column.name}; } #end
init 文件
##初始化区域 ##去掉表的t_前缀 $!tableInfo.setName($tool.getClassName($tableInfo.obj.name.replaceFirst("t_",""))) ##参考阿里巴巴开发手册,POJO 类中布尔类型的变量,都不要加 is 前缀,否则部分框架解析会引起序列化错误 #foreach($column in $tableInfo.fullColumn) #if($column.name.startsWith("is") && $column.type.equals("java.lang.Boolean")) $!column.setName($tool.firstLowerCase($column.name.substring(2))) #end #end ##实现动态排除列 #set($temp = $tool.newHashSet("testCreateTime", "otherColumn")) #foreach($item in $temp) #set($newList = $tool.newArrayList()) #foreach($column in $tableInfo.fullColumn) #if($column.name!=$item) ##带有反回值的方法调用时使用$tool.call来消除返回值 $tool.call($newList.add($column)) #end #end ##重新保存 $tableInfo.setFullColumn($newList) #end ##对importList进行篡改 #set($temp = $tool.newHashSet()) #foreach($column in $tableInfo.fullColumn) #if(!$column.type.startsWith("java.lang.")) ##带有反回值的方法调用时使用$tool.call来消除返回值 $tool.call($temp.add($column.type)) #end #end ##覆盖 #set($importList = $temp)
加载全部内容