# 代码生成配置[IDEA]

# 注意:

1.本工具截至目前兼容IDEA 2018.3.*版本
2.安装好插件后需要更新插件内模版,封包模版已过时需要根据文档做更新
3.如果出现插件无法生成代码,可先删除项目文件夹.idea文件夹后重试,仍旧不行联系后台
4.本代码生成工具只能在使用IDEA连接数据库后方可使用,连接数据库为前置条件
5.生成前端插件支持拖拽

# 工具下载(目前兼容IDEA 2018.3.*版本)

# 安装

下载生成工具到本地目录,打开idea进行安装:

link 选择安装本地磁盘文件,选择上一步下载的文件进行安装,安装成功后重启即可

# 测试

重启完成后我们需要测试插件是否安装成功:

首先连接数据库 连接成功 连接成功 数据库连接成功后开始生成代码,打开数据库连接表目录,点击数据库表右键选择代码生成选项,如果不存在选项说明插件可能安装失败

填入配置信息点击确认即可完成 窗口配置

# 修改工具代码模版

  • Type Mapper 安装包本身已经对常用数据类型做了映射,如特殊情况可自行添加

类型映射

  • Template Setting 代码生成模版示例

# entity

##引入宏定义
$!define
##定义初始变量
$!init

##使用宏定义设置回调(保存位置与文件后缀)
#save("/entity", "Po.java")
##使用宏定义设置包后缀
#setPackageSuffix("entity")

##使用全局变量实现默认包导入
$!autoImport
import java.io.Serializable;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.util.HashMap;
import java.util.Map;
##使用宏定义实现类注释信息
#tableComment("实体类")
@ApiModel(value = "$!{tableInfo.name}")
public class $!{tableInfo.name}Po implements Serializable {
private static final long serialVersionUID = $!tool.serial();
#foreach($column in $tableInfo.fullColumn)
    #if(${column.comment})//${column.comment}#end
  
  @ApiModelProperty(value="${column.comment}")
  private $!{tool.getClsNameByFullName($column.type)} $!{column.name};
#end

#foreach($column in $tableInfo.fullColumn)
##使用宏定义实现get,set方法
    #getSetMethod($column)
#end
##toMap
    public Map toMap(){
    Map map = new HashMap();
    #foreach($column in $tableInfo.fullColumn)
    map.put("$!{column.name}",$!{column.name});
    #end
    return map;
    }
    ## toString 方法
    @Override
    public String toString() {
    return "$!{tableInfo.name}{" +
    #foreach($column in $tableInfo.fullColumn)
           ",$!{column.name} ='" + $!{column.name} + '\'' +
    #end
        '}';
    }

}

# readMapper

##定义初始变量
$!init
#set($tableName = $tool.append($fileName, "ReadMapper"))
##设置回调
$!callback.setFileName($tool.append($tableName, ".java"))
$!callback.setSavePath($tool.append($tableInfo.savePath, "/mapper/read"))

##拿到主键
#if(!$tableInfo.pkColumn.isEmpty())
    #set($pk = $tableInfo.pkColumn.get(0))
#end

#if($tableInfo.savePackageName)package $!{tableInfo.savePackageName}.#{end}mapper.read;

import $!{tableInfo.savePackageName}.entity.$!{tableInfo.name}Po;
import com.jinke.ts.module.mybatis.mapper.TsSupportMapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;

/**
  * $!{tableInfo.comment}($!{tableInfo.name})表数据库访问层
  *
  * @author $!author
  * @since $!time.currTime()
  */
public interface $!{tableName} extends TsSupportMapper{

  /**
    * 通过ID查询单条数据
    *
    * @param $!pk.name 主键
    * @return 实例对象
    */
    $!{tableInfo.name}Po queryById($!pk.shortType $!pk.name);

    /**
     * 通过实体作为筛选条件查询
     *
     * @param po 实例对象
     * @return 对象列表
     */
    List<$!{tableInfo.name}Po> selectByPage($!{tableInfo.name}Po po);
  /**
    * 通过实体作为筛选条件查询
    *
    * @param $!tool.firstLowerCase($!{tableInfo.name}) 实例对象
    * @return 对象列表
    */
    List<$!{tableInfo.name}Po> queryAll($!{tableInfo.name}Po $!tool.firstLowerCase($!{tableInfo.name}));

}

# writeMapper

##定义初始变量
$!init
#set($tableName = $tool.append($fileName, "WriteMapper"))
##设置回调
$!callback.setFileName($tool.append($tableName, ".java"))
$!callback.setSavePath($tool.append($tableInfo.savePath, "/mapper/write"))

##拿到主键
#if(!$tableInfo.pkColumn.isEmpty())
    #set($pk = $tableInfo.pkColumn.get(0))
#end

#if($tableInfo.savePackageName)package $!{tableInfo.savePackageName}.#{end}mapper.write;

import $!{tableInfo.savePackageName}.entity.$!{tableInfo.name}Po;
import java.util.List;

/**
  * $!{tableInfo.comment}($!{tableInfo.name})表数据库访问层
  *
  * @author $!author
  * @since $!time.currTime()
  */
public interface $!{tableName} {
  /**
    * 新增数据
    *
    * @param $!tool.firstLowerCase($!{tableInfo.name}) 实例对象
    * @return 影响行数
    */
    int insert($!{tableInfo.name}Po $!tool.firstLowerCase($!{tableInfo.name}));

  /**
    * 修改数据
    *
    * @param $!tool.firstLowerCase($!{tableInfo.name}) 实例对象
    * @return 影响行数
    */
    int update($!{tableInfo.name}Po $!tool.firstLowerCase($!{tableInfo.name}));

  /**
    * 通过主键删除数据
    *
    * @param $!pk.name 主键
    * @return 影响行数
    */
  int deleteById($!pk.shortType $!pk.name);

}

# readMapper.xml

##定义初始变量
$!init
##引入mybatis支持
$!mybatisSupport

##设置保存名称与保存位置
$!callback.setFileName($tool.append($!{fileName}, "ReadMapper.xml"))
$!callback.setSavePath($tool.append($modulePath, "/src/main/resources/mapper/read"))

##拿到主键,没有主键取第一列
#if(!$tableInfo.pkColumn.isEmpty())
    #set($pk = $tableInfo.pkColumn.get(0))
#else
    #set($pk = $tableInfo.fullColumn.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}.mapper.read.$!{fileName}ReadMapper">

    <resultMap type="$!{tableInfo.savePackageName}.entity.$!{tableInfo.name}Po" id="$!{tableInfo.name}Map">
        #foreach($column in $tableInfo.fullColumn)
            <result property="$!column.name" column="$!column.obj.name" jdbcType="$!column.ext.jdbcType"/>
        #end
    </resultMap>

    <!--查询单个-->
    <select id="queryById" resultMap="$!{tableInfo.name}Map">
        select
          #allSqlColumn()

        from $!{tableInfo.obj.parent.name}.$!tableInfo.obj.name
        where $!pk.obj.name = #{$!pk.name,jdbcType=$!pk.ext.jdbcType}
    </select>
<!--通过实体作为筛选条件查询-->
    <select id="queryAll" resultMap="$!{tableInfo.name}Map">
        select
        #allSqlColumn()

        from $!{tableInfo.obj.parent.name}.$!tableInfo.obj.name
        <where>
            #foreach($column in $tableInfo.fullColumn)
            <if test="$!column.name != null#if($column.type.equals("java.lang.String")) and $!column.name != ''#end">
                    and $!column.obj.name = #{$!column.name,jdbcType=$!column.ext.jdbcType}
                </if>
            #end
        </where>
    </select>
    <!--通过实体作为筛选条件查询-->
    <select id="selectByPage" resultMap="$!{tableInfo.name}Map">
        select
        #allSqlColumn()

        from $!{tableInfo.obj.parent.name}.$!tableInfo.obj.name
        <where>
            #foreach($column in $tableInfo.fullColumn)
            <if test="$!column.name != null#if($column.type.equals("java.lang.String")) and $!column.name != ''#end">
                    and $!column.obj.name = #{$!column.name,jdbcType=$!column.ext.jdbcType}
                </if>
            #end
        </where>
    </select>
</mapper>

# writeMapper.xml

##定义初始变量
$!init
##引入mybatis支持
$!mybatisSupport

##设置保存名称与保存位置
$!callback.setFileName($tool.append($!{fileName}, "WriteMapper.xml"))
$!callback.setSavePath($tool.append($modulePath, "/src/main/resources/mapper/write"))

##拿到主键,没有主键取第一列
#if(!$tableInfo.pkColumn.isEmpty())
    #set($pk = $tableInfo.pkColumn.get(0))
#else
    #set($pk = $tableInfo.fullColumn.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}.mapper.write.$!{fileName}WriteMapper">

    <!--新增所有列-->
    <insert id="insert" 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($column in $tableInfo.otherColumn)#{$!{column.name},jdbcType=$!column.ext.jdbcType}#if($velocityHasNext), #end#end)
    </insert>

    <!--通过主键修改数据-->
    <update id="update">
        update $!{tableInfo.obj.parent.name}.$!{tableInfo.obj.name}
        <set>
            #foreach($column in $tableInfo.otherColumn)
                <if test="$!column.name != null#if($column.type.equals("java.lang.String")) and $!column.name != ''#end">
                    $!column.obj.name = #{$!column.name},
                </if>
            #end
        </set>
        where $!pk.obj.name = #{$!pk.name}
    </update>

    <!--通过主键删除-->
    <delete id="deleteById">
        delete from $!{tableInfo.obj.parent.name}.$!{tableInfo.obj.name} where $!pk.obj.name = #{$!pk.name,jdbcType=$!pk.ext.jdbcType}
    </delete>

</mapper>

# readService

##定义初始变量
$!init
#set($tableName = $tool.append($fileName, "ReadService"))
##设置回调
$!callback.setFileName($tool.append($tableName, ".java"))
$!callback.setSavePath($tool.append($tableInfo.savePath, "/service/read"))

##拿到主键
#if(!$tableInfo.pkColumn.isEmpty())
    #set($pk = $tableInfo.pkColumn.get(0))
#end

#if($tableInfo.savePackageName)package $!{tableInfo.savePackageName}.#{end}service.read;

import $!{tableInfo.savePackageName}.entity.$!{tableInfo.name}Po;
import java.util.List;
import com.jinke.ts.core.restservice.requestbean.PageParam;
import com.jinke.ts.core.restservice.resultbaen.Page;
/**
  * $!{tableInfo.comment}($!{tableInfo.name})表服务接口
  *
  * @author $!author
  * @since $!time.currTime()
  */
public interface $!{tableName} {

  /**
    * 通过ID查询单条数据
    *
    * @param $!pk.name 主键
    * @return 实例对象
    */
  $!{tableInfo.name}Po queryById($!pk.shortType $!pk.name);

/**
     * 分页查询
     *
     * @param condition
     * @param pageParam
     * @return
     */
    Page<$!{tableInfo.name}Po> selectByPage($!{tableInfo.name}Po condition, PageParam pageParam);

}

# readServiceImpl

##定义初始变量
$!init
#set($tableName = $tool.append($fileName, "ReadServiceImpl"))
##设置回调
$!callback.setFileName($tool.append($tableName, ".java"))
$!callback.setSavePath($tool.append($tableInfo.savePath, "/service/read/impl"))

##拿到主键
#if(!$tableInfo.pkColumn.isEmpty())
    #set($pk = $tableInfo.pkColumn.get(0))
#end

#if($tableInfo.savePackageName)package $!{tableInfo.savePackageName}.#{end}service.read.impl;

import $!{tableInfo.savePackageName}.entity.$!{tableInfo.name}Po;
import $!{tableInfo.savePackageName}.mapper.read.$!{fileName}ReadMapper;
import $!{tableInfo.savePackageName}.service.read.$!{fileName}ReadService;
import com.jinke.ts.core.transaction.annotation.TsTransactional;
import org.springframework.stereotype.Service;
import com.jinke.ts.core.restservice.requestbean.PageParam;
import com.jinke.ts.core.restservice.resultbaen.Page;
import javax.annotation.Resource;
import java.util.List;

/**
  * $!{tableInfo.comment}($!{tableInfo.name})表服务实现类
  *
  * @author $!author
  * @since $!time.currTime()
  */
@Service
@TsTransactional(readOnly = true)
public class $!{tableName} implements $!{fileName}ReadService {

  @Resource
  private $!{fileName}ReadMapper $!tool.firstLowerCase($!{fileName})ReadMapper;

  /**
    * 通过ID查询单条数据
    *
    * @param $!pk.name 主键
    * @return 实例对象
    */
    @Override
    public $!{tableInfo.name}Po queryById($!pk.shortType $!pk.name) {
      return this.$!{tool.firstLowerCase($!{fileName})}ReadMapper.queryById($!pk.name);
    }

 /**
     * 分页查询
     *
     * @param condition
     * @param pageParam
     * @return
     */
    @Override
    public Page<$!{tableInfo.name}Po> selectByPage($!{tableInfo.name}Po condition, PageParam pageParam) {
        $!{tool.firstLowerCase($!{fileName})}ReadMapper.beginPager(pageParam);
        Page<$!{tableInfo.name}Po> resultPage = $!{tool.firstLowerCase($!{fileName})}ReadMapper.endPager($!{tool.firstLowerCase($!{fileName})}ReadMapper.selectByPage(condition));
        return resultPage;
    }
}

# writeService

##定义初始变量
$!init
##定义初始变量
#set($tableName = $tool.append($fileName, "WriteService"))
##设置回调
$!callback.setFileName($tool.append($tableName, ".java"))
$!callback.setSavePath($tool.append($tableInfo.savePath, "/service/write"))

##拿到主键
#if(!$tableInfo.pkColumn.isEmpty())
    #set($pk = $tableInfo.pkColumn.get(0))
#end

#if($tableInfo.savePackageName)package $!{tableInfo.savePackageName}.#{end}service.write;

import $!{tableInfo.savePackageName}.entity.$!{tableInfo.name}Po;
import java.util.List;

/**
  * $!{tableInfo.comment}($!{tableInfo.name})表服务接口
  *
  * @author $!author
  * @since $!time.currTime()
  */
public interface $!{tableName} {
/**
  * 新增数据
  *
  * @param $!tool.firstLowerCase($!{tableInfo.name}) 实例对象
  * @return 实例对象
  */
  $!{tableInfo.name}Po insert($!{tableInfo.name}Po $!tool.firstLowerCase($!{tableInfo.name}));

  /**
    * 修改数据
    *
    * @param $!tool.firstLowerCase($!{tableInfo.name}) 实例对象
    * @return 实例对象
    */
  $!{tableInfo.name}Po update($!{tableInfo.name}Po $!tool.firstLowerCase($!{tableInfo.name}));

  /**
    * 通过主键删除数据
    *
    * @param $!pk.name 主键
    * @return 是否成功
    */
  boolean deleteById($!pk.shortType $!pk.name);

}

# writeServiceImpl

##定义初始变量
$!init
##定义初始变量
#set($tableName = $tool.append($fileName, "WriteServiceImpl"))
##设置回调
$!callback.setFileName($tool.append($tableName, ".java"))
$!callback.setSavePath($tool.append($tableInfo.savePath, "/service/write/impl"))

##拿到主键
#if(!$tableInfo.pkColumn.isEmpty())
    #set($pk = $tableInfo.pkColumn.get(0))
#end

#if($tableInfo.savePackageName)package $!{tableInfo.savePackageName}.#{end}service.write.impl;

import $!{tableInfo.savePackageName}.entity.$!{tableInfo.name}Po;
import $!{tableInfo.savePackageName}.mapper.write.$!{fileName}WriteMapper;
import $!{tableInfo.savePackageName}.service.write.$!{fileName}WriteService;
import com.jinke.ts.core.transaction.annotation.TsTransactional;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

/**
  * $!{tableInfo.comment}($!{tableInfo.name})表服务实现类
  *
  * @author $!author
  * @since $!time.currTime()
  */
@Service
@TsTransactional
public class $!{tableName} implements $!{fileName}WriteService {

  @Resource
  private $!{fileName}WriteMapper $!tool.firstLowerCase($!{fileName})WriteMapper;
  /**
    * 新增数据
    *
    * @param $!tool.firstLowerCase($!{tableInfo.name}) 实例对象
    * @return 实例对象
    */
    @Override
    public $!{tableInfo.name}Po insert($!{tableInfo.name}Po $!tool.firstLowerCase($!{tableInfo.name})) {
      this.$!{tool.firstLowerCase($!{fileName})}WriteMapper.insert($!tool.firstLowerCase($!{tableInfo.name}));
      return $!tool.firstLowerCase($!{tableInfo.name});
    }

  /**
    * 修改数据
    *
    * @param $!tool.firstLowerCase($!{tableInfo.name}) 实例对象
    * @return 实例对象
    */
    @Override
    public $!{tableInfo.name}Po update($!{tableInfo.name}Po $!tool.firstLowerCase($!{tableInfo.name})) {
            this.$!{tool.firstLowerCase($!{fileName})}WriteMapper.update($!tool.firstLowerCase($!{tableInfo.name}));
            return $!tool.firstLowerCase($!{tableInfo.name});
    }

  /**
    * 通过主键删除数据
    *
    * @param $!pk.name 主键
    * @return 是否成功
    */
    @Override
    public boolean deleteById($!pk.shortType $!pk.name) {
      return this.$!{tool.firstLowerCase($!{fileName})}WriteMapper.deleteById($!pk.name) > 0;
    }
}

# restService

##定义初始变量
$!init
#set($tableName = $tool.append($fileName, "RestService"))
##设置回调
$!callback.setFileName($tool.append($tableName, ".java"))
$!callback.setSavePath($tool.append($tableInfo.savePath, "/rest"))
##拿到主键
#if(!$tableInfo.pkColumn.isEmpty())
    #set($pk = $tableInfo.pkColumn.get(0))
#end

#if($tableInfo.savePackageName)package $!{tableInfo.savePackageName}.#{end}rest;

import $!{tableInfo.savePackageName}.entity.$!{tableInfo.name}Po;
import $!{tableInfo.savePackageName}.service.read.$!{fileName}ReadService;
import $!{tableInfo.savePackageName}.service.write.$!{fileName}WriteService;
import com.jinke.ts.core.restservice.BaseRestService;
import org.springframework.web.bind.annotation.*;
import org.springframework.http.MediaType;
import com.jinke.ts.core.restservice.annotation.RestService;
import com.jinke.ts.core.restservice.requestbean.PageParam;

import javax.annotation.Resource;
import javax.validation.Valid;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;

/**
* $!{tableInfo.comment}($!{tableInfo.name})表控制层
*
* @author $!author
* @since $!time.currTime()
*/
@Api(tags = { "$!{tableInfo.comment}" })
@RestService("/$!{tool.firstLowerCase($fileName)}")
@Valid
public class $!{tableName} extends BaseRestService {

  /**
    * 服务对象
    */
  @Resource
  private $!{fileName}ReadService $!tool.firstLowerCase($fileName)ReadService;
  
  @Resource
  private $!{fileName}WriteService $!tool.firstLowerCase($fileName)WriteService;
  
  
  /**
     * 条件查询信息
     *
     * @param condition 搜索条件
     * @param pageParam 分页参数
     */
    @ApiOperation(value = "列表查询", response = $!{tableInfo.name}Po.class,produces = MediaType.APPLICATION_JSON_VALUE)
    @PostMapping("queryByCondition")
    public void queryByCondition($!{tableInfo.name}Po condition, PageParam pageParam) {
        setPageBean(this.$!{tool.firstLowerCase($fileName)}ReadService.selectByPage(condition, pageParam));
    }
    
 /**
  * 通过主键查询单条数据
  *
  * @param id 主键
  * @return 单条数据
  */
  @ApiOperation(value = "$!{tableInfo.comment}查询",response = $!{tableInfo.name}Po.class, produces = MediaType.APPLICATION_JSON_VALUE)
  @PostMapping("selectById")
  public $!{tableInfo.name}Po selectById($!pk.shortType id) {
    return this.$!{tool.firstLowerCase($fileName)}ReadService.queryById(id);
  }
  
  
  /**
  * 通过主键新增单条数据
  *
  * @param entity 主键
  * @return 单条数据
  */
  @ApiOperation(value = "$!{tableInfo.comment}新增",response = $!{tableInfo.name}Po.class, produces = MediaType.APPLICATION_JSON_VALUE)
  @PostMapping("insert")
  public void insert($!{tableInfo.name}Po entity) {
     $!{tableInfo.name}Po response = this.$!{tool.firstLowerCase($fileName)}WriteService.insert(entity);
     setData("result",response);
  }
  
  /**
  * 通过主键编辑单条数据
  *
  * @param entity 主键
  * @return 单条数据
  */
  @ApiOperation(value = "$!{tableInfo.comment}编辑",response = $!{tableInfo.name}Po.class, produces = MediaType.APPLICATION_JSON_VALUE)
  @PostMapping("update")
  public void update($!{tableInfo.name}Po entity) {
     $!{tableInfo.name}Po po = this.$!{tool.firstLowerCase($fileName)}WriteService.update(entity);
     setData("result",po);
  }
  
  /**
  * 通过主键删除单条数据
  *
  * @param id 主键
  * @return 单条数据
  */
  @ApiOperation(value = "$!{tableInfo.comment}删除", produces = MediaType.APPLICATION_JSON_VALUE)
  @PostMapping("deleteById")
  public void deleteById($!pk.shortType id) {
    boolean response =  this.$!{tool.firstLowerCase($fileName)}WriteService.deleteById(id);
    setData("result",response);
  }

}
最后更新日期: 3/18/2021, 10:36:04 AM