idea使用easyCode生成代码(根据mybatis-plus模板创建自己的模板)
作者:我老菜
前言
easyCode代码生成器,减少低价值搬砖。
声明下:自定义模板内有大量自定义类,所以可以借鉴,不能直接使用。
一、安装easyCode插件
setting下载插件,重启idea,点开dataBase连接上数据库。
针对有一定基础的程序员哈,小白的话,建议先老老实实手敲代码。
二、生成代码-使用默认模板
1: dataBase连接上数据库后,选中某个表,右键->EasyCode->Generate Code,出现下面这个弹出框:
Module:是哪个项目模块
Package:生成的代码放在哪个包下
Path:生成代码所在的路劲
红框:这个是我自定义的模板(后面会怎么弄),这里可以选择默认的模板,如:MybatisPlus ,Default
Template:勾选需要生成哪些文件
2:选择完成后,点击OK就可以了。
三、生成代码-自定义模板
File->settings->Other Settings->EasyCode->Template
我是复制了MybatisPlus- Mixed,然后重名为:MybatisPlus-lt。在此基础上修改的模板内容
注意1:模板内使用#if()进行逻辑判断
我配置了字段自动插入,需要在字段属性上加额外的注解,所以这里用到了
#if($!{column.name} == ‘delFlag') @TableLogic @TableField(fill = FieldFill.INSERT) #end
注意2:模板内获取对象的小写单词
因为在实现类里有实现方法,所以需要使用到bookMapper,但是如何获取到Book对象的小写单词是个问题:
##定义实体对象名(驼峰) #set($entityName = $!tool.firstLowerCase($!tableInfo.name))
说明下:
实现类里期望结果生成这个代码:bookMapper.deleteBatchIds(idList); 错误的: 下面这句的生成结果是:bookMapper; $!tool.firstLowerCase($!tableInfo.name))Mapper.deleteBatchIds(idList); 正确的: ##定义实体对象名 #set($entityName = $!tool.firstLowerCase($!tableInfo.name)) 这样去使用: $!{entityName}Mapper.deleteBatchIds(idList);
例子:
注意3:修改Mapping.xml文件的位置
将BookMapping.xml 放在/src/main/resources/mapper/book目录下
我的自定义模板,可借鉴,不可直接用
模板内使用到了较多的自定义类,所以大家可以借鉴下,全盘照搬肯定是不行的。
自定义异常:CheckException
自定义返回类:BaseResponse
自定义查询类:BaseQuery
自定义:Msg
分页插件:PageHelper
id生成器:IdWorker
1: entity.java.vm
##导入宏定义 $!{define.vm} ##保存文件(宏定义) #save("/entity", ".java") ##包路径(宏定义) #setPackageSuffix("entity") ##自动导入包(全局变量) $!autoImport import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableLogic; import com.tao.base.BaseQuery; import lombok.Data; import java.util.Date; ##表注释(宏定义) #tableComment("表实体类") @Data public class $!{tableInfo.name} extends BaseQuery { #foreach($column in $tableInfo.fullColumn) #if(${column.comment}) /** * ${column.comment} **/ #end #if($!{column.name} == 'delFlag') @TableLogic @TableField(fill = FieldFill.INSERT) #end #if($!{column.name} == 'createTime') @TableField(fill = FieldFill.INSERT) #end #if($!{column.name} == 'updateTime') @TableField(fill = FieldFill.INSERT_UPDATE) #end private $!{tool.getClsNameByFullName($column.type)} $!{column.name}; #end }
2: mapper.java.vm
##导入宏定义 $!{define.vm} ##设置表后缀(宏定义) #setTableSuffix("Mapper") ##保存文件(宏定义) #save("/dao", "Mapper.java") ##包路径(宏定义) #setPackageSuffix("dao") import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; import $!{tableInfo.savePackageName}.entity.$!tableInfo.name; ##表注释(宏定义) #tableComment("表数据库访问层") @Mapper public interface $!{tableName} extends BaseMapper<$!tableInfo.name> { }
3: service.java.vm
##导入宏定义 $!{define.vm} ##设置表后缀(宏定义) #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> { /** * 根据ids删除多条数据 **/ void deleteByIds(String ids); }
4: serviceImpl.java.vm
##导入宏定义 $!{define.vm} ##设置表后缀(宏定义) #setTableSuffix("ServiceImpl") ##保存文件(宏定义) #save("/service/impl", "ServiceImpl.java") ##包路径(宏定义) #setPackageSuffix("service.impl") ##定义实体对象名 #set($entityName = $!tool.firstLowerCase($!tableInfo.name)) import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import $!{tableInfo.savePackageName}.dao.$!{tableInfo.name}Mapper; import $!{tableInfo.savePackageName}.entity.$!{tableInfo.name}; import $!{tableInfo.savePackageName}.service.$!{tableInfo.name}Service; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; ##表注释(宏定义) #tableComment("表服务实现类") @Service("$!tool.firstLowerCase($tableInfo.name)Service") public class $!{tableName} extends ServiceImpl<$!{tableInfo.name}Mapper, $!{tableInfo.name}> implements $!{tableInfo.name}Service { @Resource private $!{tableInfo.name}Mapper ${entityName}Mapper; /** * 根据ids删除多条数据 **/ @Override public void deleteByIds(String ids) { String[] idsArr = ids.split(","); if (idsArr.length > 0) { List<Long> idList = Stream.of(idsArr).map(Long::valueOf).collect(Collectors.toList()); $!{entityName}Mapper.deleteBatchIds(idList); } } }
5: controller.java.vm
##导入宏定义 $!{define.vm} ##设置表后缀(宏定义) #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.core.toolkit.IdWorker; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.tao.Enum.Msg; import com.tao.base.BaseQuery; import com.tao.base.BaseResponse; import $!{tableInfo.savePackageName}.entity.$!tableInfo.name; import $!{tableInfo.savePackageName}.service.$!{tableInfo.name}Service; import com.tao.exception.CheckException; import org.apache.commons.lang3.StringUtils; import org.apache.ibatis.annotations.Param; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.List; ##表注释(宏定义) #tableComment("表控制层") @RestController @RequestMapping("$!tool.firstLowerCase($!tableInfo.name)") public class $!{tableName} { /** * 服务对象 */ @Autowired private $!{tableInfo.name}Service $!{serviceName}; /** * 列表查询不分页 查询全部 **/ @RequestMapping(value = "list", method = RequestMethod.POST) public BaseResponse list(@RequestBody $!tableInfo.name model) { //条件查询 QueryWrapper<$!tableInfo.name> queryWrapper = new QueryWrapper(); //动态sql // if(StringUtils.isNotBlank(model.getAuthor())){ // queryWrapper.lambda().eq($!tableInfo.name::getAuthor,model.getAuthor()); // } //排序 queryWrapper.lambda().orderByDesc($!tableInfo.name::getCreateTime); //执行查询 List<$!tableInfo.name> list = $!{serviceName}.list(queryWrapper); //封装查询结果 return new BaseResponse(Msg.SUCCESS, list); } /** * 列表查询 分页 * 只能查询自己的 **/ @RequestMapping(value = "listPage", method = RequestMethod.POST) public BaseResponse listPage(@RequestBody $!tableInfo.name model) { //没有传分页参数时,默认设置查询前10条数据 if (null == model.getPageSize()) { PageHelper.startPage(BaseQuery.DEFAULT_PAGE, BaseQuery.DEFAULT_SIZE); } else { PageHelper.startPage(model.getCurrentPage(), model.getPageSize()); } //条件查询 QueryWrapper<$!tableInfo.name> queryWrapper = new QueryWrapper(); //动态sql if (StringUtils.isNotBlank(model.getAuthor())) { queryWrapper.lambda().eq($!tableInfo.name::getAuthor, model.getAuthor()); } //排序 queryWrapper.lambda().orderByDesc($!tableInfo.name::getCreateTime); //执行查询 List<$!tableInfo.name> list = $!{serviceName}.list(queryWrapper); PageInfo<$!tableInfo.name> pageInfo = new PageInfo<>(list); //封装查询结果 return new BaseResponse(Msg.SUCCESS, pageInfo.getTotal(), pageInfo.getList()); } /** * 保存 **/ @RequestMapping(value = "insert", method = RequestMethod.POST) public BaseResponse insert(@RequestBody $!tableInfo.name model) { //设置默认id if (model.getId() == null) { model.setId(IdWorker.getId()); } $!{serviceName}.save(model); //封装查询结果 return new BaseResponse(Msg.SUCCESS, model.getId()); } /** * 根据id更新 **/ @RequestMapping(value = "updateById", method = RequestMethod.PUT) public BaseResponse updateById(@RequestBody $!tableInfo.name model) throws Exception { //字段检查 if (null == (model.getId())) { throw new CheckException(Msg.CHECK_ATTRIBUTE_FAIL, "id不能为空"); } $!{serviceName}.updateById(model); //封装查询结果 return new BaseResponse(Msg.SUCCESS); } /** * 根据id查询 **/ @RequestMapping(value = "getById/{id}", method = RequestMethod.GET) public BaseResponse getById(@PathVariable("id") Long id) { $!tableInfo.name temp = $!{serviceName}.getById(id); //封装查询结果 return new BaseResponse(Msg.SUCCESS, temp); } /** * 根据id更新 **/ @RequestMapping(value = "deleteById/{id}", method = RequestMethod.DELETE) public BaseResponse deleteById(@PathVariable("id") Long id) { $!{serviceName}.removeById(id); //封装查询结果 return new BaseResponse(Msg.SUCCESS); } /** * 根据多个id删除 **/ // @RequestMapping(value = "deleteByIds/{ids}", method = RequestMethod.DELETE) // public BaseResponse deleteByIds(@PathVariable("ids") String ids) throws Exception { @RequestMapping(value = "deleteByIds", method = RequestMethod.DELETE) public BaseResponse deleteByIds(@Param("ids") String ids) throws Exception { //业务检查 if (StringUtils.isEmpty(ids)) { throw new CheckException(Msg.CHECK_ATTRIBUTE_FAIL, "请传入正确的ids"); } $!{serviceName}.deleteByIds(ids); //封装查询结果 return new BaseResponse(Msg.SUCCESS); } }
6: mapping.xml.vm
##引入mybatis支持 $!{mybatisSupport.vm} ##定义实体对象名 #set($entityName = $!tool.firstLowerCase($!tableInfo.name)) ##设置保存名称与保存位置 $!callback.setFileName($tool.append($!{tableInfo.name}, "Mapping.xml")) $!callback.setSavePath($tool.append($modulePath, $tool.append("/src/main/resources/mapper/",$entityName))) ##拿到主键 #if(!$tableInfo.pkColumn.isEmpty()) #set($pk = $tableInfo.pkColumn.get(0)) #end <?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="$!{tableInfo.savePackageName}.dao.$!{tableInfo.name}Mapper"> <resultMap type="$!{tableInfo.savePackageName}.entity.$!{tableInfo.name}" id="$!{tableInfo.name}Map"> #foreach($column in $tableInfo.fullColumn) <result property="$!column.name" column="$!column.obj.name" jdbcType="$!column.ext.jdbcType"/> #end </resultMap> <!-- 批量插入 --> <!-- <insert id="insertBatch" keyProperty="$!pk.name" useGeneratedKeys="true"> insert into $!{tableInfo.obj.parent.name}.$!{tableInfo.obj.name}(#foreach($column in $tableInfo.otherColumn)$!column.obj.name#if($velocityHasNext), #end#end) values <foreach collection="entities" item="entity" separator=","> (#foreach($column in $tableInfo.otherColumn)#{entity.$!{column.name}}#if($velocityHasNext), #end#end) </foreach> </insert> --> </mapper>
到此这篇关于idea使用easyCode生成代码(根据mybatis-plus模板创建自己的模板)的文章就介绍到这了,更多相关idea easyCode生成代码内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!