Easy Code代碼生成器


1.EasyCode介紹


1.1 EasyCode是一個什么東西?


EasyCode是基於IntelliJ IDEA Ultimate版開發的一個代碼生成插件,主要通過自定義模板(基於velocity)來生成各種你想要的代碼。通常用於生成Entity、Dao、Service、Controller。如果你動手能力強還可以用於生成HTML、JS、PHP等代碼。理論上來說只要是與數據有關的代碼都是可以生成的。


1.2 原理

基於Mybatis底層強大的逆向工程能力和良好的項目架構


1.3 使用環境

IntelliJ IDEA Ultimate版


1.4 支持的數據庫類型

因為是基於Database Tool開發,所有Database Tool支持的數據庫都是支持的。

包括如下數據庫:

  1. MySQL
  2. SQL Server
  3. Oracle
  4. PostgreSQL
  5. Sqlite
  6. Sybase
  7. Derby
  8. DB2
  9. HSQLDB
  10. H2

當然支持的數據庫類型也會隨着Database Tool插件的更新同步更新。


1.5 功能說明:

  • 支持多表同時操作
  • 支持同時生成多個模板
  • 支持自定義模板
  • 支持自定義類型映射(支持正則)
  • 支持自定義附加列
  • 支持列附加屬性
  • 所有配置項目支持分組模式,在不同項目(或選擇不同數據庫時),只需要切換對應的分組,所有配置統一變化

1.6 功能對比:

功能 Easy Code 其他工具
自定義模板 支持 支持
多表生成 支持 支持
生成方式 無縫集成在項目中 部分工具需要復制粘貼
附加列 支持 不支持
附加列屬性 支持 不支持
動態調試模板 支持 不支持
圖形化界面 支持 部分支持
使用環境 僅限IDEA 支持各種形式
在線支持 后期擴展 不支持
自定義類型映射 支持 部分支持
全局變量 支持 不支持

2.EasyCode使用


2.1 下載Easy Code插件


2.2 創建一個SpringBoot項目

2.3 配置數據源

使用Easy Code一定要使用IDEA自帶的數據庫工具來配置數據源

!


打開側邊的Database,查看效果


提前准備的數據表


2.4 自定義生成模板


第一次安裝EasyCode的時候默認的模板(服務於MyBatis)可以生成下面類型的代碼

  1. entity.java
  2. dao.java
  3. service.java
  4. serviceImpl.java
  5. controller.java
  6. mapper.xml
  7. debug.json

2.5 以user表為例,根據你定義的模板生成代碼,文章的最后貼出我使用的自定義的模板


選擇模板


點擊OK之后,就可以看到生成了這些代碼


2.6 代碼展示

實體類層:User.java

package com.godfrey.easycode.entity;

import java.io.Serializable;

/**
 * (User)實體類
 *
 * @author godfrey
 * @since 2020-04-20 19:21:17
 */
public class User implements Serializable {
    private static final long serialVersionUID = 502672392114472688L;
    /**
     * 主鍵ID
     */
    private Integer id;
    /**
     * 姓名
     */
    private String name;
    /**
     * 年齡
     */
    private Integer age;
    /**
     * 郵箱
     */
    private String email;

        
    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }
        
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
        
    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
        
    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                "name=" + name +
                "age=" + age +
                "email=" + email +
                '}';
    }
}

Dao數據庫訪問層:UserDao.java

package com.godfrey.easycode.dao;

import com.godfrey.easycode.entity.User;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

/**
 * description : (User)表數據庫訪問層
 *
 * @author godfrey
 * @since  2020-04-20 19:21:17
 */
@Mapper
public interface UserDao {

    /**
     * description : 添加User
     *
     * @param user 實例對象
     * @return 影響行數
     * @author godfrey
     * @since  2020-04-20 19:21:17
     */
    int insert(User user);

    /**
     * description : 刪除User
     *
     * @param  id 主鍵
     * @return 影響行數
     * @author godfrey
     * @since  2020-04-20 19:21:17
     */
    int deleteById(Integer id);

    /**
     * description : 通過ID查詢單條數據
     *
     * @param  id 主鍵
     * @return 實例對象
     * @author godfrey
     * @since  2020-04-20 19:21:17
     */
    User queryById(Integer id);

    /**
     * description : 查詢全部數據(分頁使用MyBatis的插件實現)
     *
     * @return 對象列表
     * @author godfrey
     * @since  2020-04-20 19:21:17
     */
    List<User> queryAll();

    /**
     * description : 實體作為篩選條件查詢數據
     *
     * @param  user 實例對象
     * @return 對象列表
     * @author godfrey
     * @since  2020-04-20 19:21:17
     */
    List<User> queryAll(User user);

    /**
     * description : 修改User
     *
     * @param  user 根據user的主鍵修改數據
     * @return 影響行數
     * @author godfrey
     * @since  2020-04-20 19:21:17
     */
    int update(User user);
}

Service服務接口層:UserService.java

package com.godfrey.easycode.service;

import com.godfrey.easycode.entity.User;
import java.util.List;

/**
 * description : (User)表服務接口
 *
 * @author godfrey
 * @since  2020-04-20 19:21:17
 */
public interface UserService {

    /**
     * description : 添加User
     *
     * @param  user 實例對象
     * @return 是否成功
     * @author godfrey
     * @since  2020-04-20 19:21:17
     */
    boolean insert(User user);

    /**
     * description : 刪除User
     *
     * @param  id 主鍵
     * @return 是否成功
     * @author godfrey
     * @since  2020-04-20 19:21:17
     */
    boolean deleteById(Integer id);

    /**
     * description : 查詢單條數據
     * @param  id 主鍵
     * @return 實例對象
     * @author godfrey
     * @since  2020-04-20 19:21:17
     */
    User queryById(Integer id);

    /**
     * description : 查詢全部數據(分頁使用MyBatis的插件實現)
     *
     * @return 對象列表
     * @author godfrey
     * @since  2020-04-20 19:21:17
     */
    List<User> queryAll();

    /**
     * description : 實體作為篩選條件查詢數據
     *
     * @param  user 實例對象
     * @return 對象列表
     * @author godfrey
     * @since  2020-04-20 19:21:17
     */
    List<User> queryAll(User user);

    /**
     * description : 修改數據,哪個屬性不為空就修改哪個屬性
     *
     * @param  user 實例對象
     * @return 是否成功
     * @author godfrey
     * @since  2020-04-20 19:21:17
     */
    boolean update(User user);
}

ServiceImpl服務接口實現層:UserServiceImpl.java

package com.godfrey.easycode.service.impl;

import com.godfrey.easycode.entity.User;
import com.godfrey.easycode.dao.UserDao;
import com.godfrey.easycode.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

 /**
  * description : (User)表服務實現類
  *
  * @author godfrey
  * @since  2020-04-20 19:21:17
  **/
@Service("userService")
public class UserServiceImpl implements UserService {

    @Autowired
    protected UserDao userDao;

    /**
     * description : 添加User
     *
     * @param  user 實例對象
     * @return 是否成功
     * @author godfrey
     * @since  2020-04-20 19:21:17
     */
    @Override
    public boolean insert(User user) {
        return userDao.insert(user) == 1;
    }

    /**
     * description : 刪除User
     *
     * @param  id 主鍵
     * @return 是否成功
     * @author godfrey
     * @since  2020-04-20 19:21:17
     */
    @Override
    public boolean deleteById(Integer id) {
        return userDao.deleteById(id) == 1;
    }

    /**
     * description : 查詢單條數據
     *
     * @param  id 主鍵
     * @return 實例對象
     * @author godfrey
     * @since  2020-04-20 19:21:17
     */
    @Override
    public User queryById(Integer id) {
        return userDao.queryById(id);
    }

    /**
     * description : 查詢全部數據(分頁使用MyBatis的插件實現)
     *
     * @return 對象列表
     * @author godfrey
     * @since  2020-04-20 19:21:17
     */
    @Override
    public List<User> queryAll() {
        return userDao.queryAll();
    }

    /**
     * description : 實體作為篩選條件查詢數據
     *
     * @param user 實例對象
     * @return 對象列表
     * @author godfrey
     * @since  2020-04-20 19:21:17
     */
    @Override
    public List<User> queryAll(User user) {
        return userDao.queryAll(user);
    }

    /**
     * description : 修改數據,哪個屬性不為空就修改哪個屬性
     *
     * @param user 實例對象
     * @return 是否成功
     * @author godfrey
     * @since  2020-04-20 19:21:17
     */
    @Override
    public boolean update(User user) {
        return userDao.update(user) == 1;
    }
}

前端控制器:UserController.java

package com.godfrey.easycode.controller;

import com.godfrey.easycode.entity.User;
import com.godfrey.easycode.service.UserService;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;

/**
 * description : (User)表控制層
 *
 * @author godfrey
 * @since  2020-04-20 19:21:17
 */
@RestController
@RequestMapping("user")
public class UserController {
    /**
     * 服務對象
     */
    @Resource
    private UserService userService;

    /**
     * description : 通過主鍵查詢單條數據
     *
     * @param  id 主鍵
     * @return 單條數據
     * @author godfrey
     * @since  2020-04-20 19:21:17
     */
    @GetMapping("selectOne")
    public User selectOne(Integer id) {
        return this.userService.queryById(id);
    }
}

Mapper映射文件:UserMapper.xml

<?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="com.godfrey.easycode.dao.UserDao">

    <!--user的映射結果集-->
    <resultMap type="com.godfrey.easycode.entity.User" id="UserMap">
        <result property="id" column="id" jdbcType="INTEGER"/>
        <result property="name" column="name" jdbcType="VARCHAR"/>
        <result property="age" column="age" jdbcType="INTEGER"/>
        <result property="email" column="email" jdbcType="VARCHAR"/>
    </resultMap>

    <!--全部字段-->
    <sql id="allColumn"> id, name, age, email </sql>

    <!--添加語句的字段列表-->
    <sql id="insertColumn">
        <if test="name != null and name != ''">
            name,
        </if>
        <if test="age != null">
            age,
        </if>
        <if test="email != null and email != ''">
            email,
        </if>
    </sql>

    <!--添加語句的值列表-->
    <sql id="insertValue">
        <if test="name != null and name != ''">
            #{name},
        </if>
        <if test="age != null">
            #{age},
        </if>
        <if test="email != null and email != ''">
            #{email},
        </if>
    </sql>

    <!--通用對User各個屬性的值的非空判斷-->
    <sql id="commonsValue">
        <if test="name != null and name != ''">
            name = #{name},
        </if>
        <if test="age != null">
            age = #{age},
        </if>
        <if test="email != null and email != ''">
            email = #{email},
        </if>
    </sql>

    <!--新增user:哪個字段不為空就添加哪列數據,返回自增主鍵-->
    <insert id="insert" keyProperty="id" useGeneratedKeys="true">
        insert into user
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <include refid="insertColumn"/>
        </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <include refid="insertValue"/>
        </trim>
    </insert>

    <!--刪除user:通過主鍵-->
    <delete id="deleteById">
        delete from user
        <where>
            id = #{id}
        </where>
    </delete>

    <!--查詢單個user-->
    <select id="queryById" resultMap="UserMap">
        select
        <include refid="allColumn"></include>
        from user
        <where>
            id = #{id}
        </where>
    </select>

    <!--通過實體作為篩選條件查詢-->
    <select id="queryAll" resultMap="UserMap">
        select
        <include refid="allColumn"></include>
        from user
        <trim prefix="where" prefixOverrides="and" suffixOverrides=",">
            <include refid="commonsValue"></include>
        </trim>
    </select>

    <!--通過主鍵修改數據-->
    <update id="update">
        update user
        <set>
            <include refid="commonsValue"></include>
        </set>
        <where>
            id = #{id}
        </where>
    </update>
</mapper>

以上代碼完全是生成出來了,從頭到尾只需要點幾下鼠標,是不是很神奇!


3.我的默認定制模板


entity.java

##引入宏定義
$!define

##使用宏定義設置回調(保存位置與文件后綴)
#save("/entity", ".java")

##使用宏定義設置包后綴
#setPackageSuffix("entity")

##使用全局變量實現默認包導入
$!autoImport
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;

import java.io.Serializable;

##使用宏定義實現類注釋信息
#tableComment("實體")
@ApiModel("$!{tableInfo.comment}")
public class $!{tableInfo.name} implements Serializable {

    private static final long serialVersionUID = $!tool.serial();
#foreach($column in $tableInfo.fullColumn)

    #if(${column.comment})/**
    * ${column.comment}
    */#end

    #if($column.obj.name == "id")@ApiModelProperty(value = "$!{column.comment}")#end
    #if($column.obj.name != "id")@ApiModelProperty(value = "$!{column.comment}", required = true)#end
    private $!{tool.getClsNameByFullName($column.type)} $!{column.name};
#end
#foreach($column in $tableInfo.fullColumn)
    ##使用宏定義實現get,set方法
    #getSetMethod($column)
#end

    @Override
    public String toString() {
        return "$!{tableInfo.name}{" +
    #foreach($column in $tableInfo.fullColumn)
            "$!{column.name}=" + $!{column.name} +
    #end
            '}';
    }
}

mapper.java

##定義初始變量
#set($tableName = $tool.append($tableInfo.name, "Mapper"))
##設置回調
$!callback.setFileName($tool.append($tableName, ".java"))
$!callback.setSavePath($tool.append($tableInfo.savePath, "/mapper"))

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

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

import $!{tableInfo.savePackageName}.entity.$!{tableInfo.name};
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

/**
 * $!{tableInfo.comment}($!{tableInfo.name})數據庫訪問層
 * @author $!author
 * @since  $!time.currTime("yyyy-MM-dd")
 */
@Mapper
public interface $!{tableName} {

    /**
     * 新增$!{tableInfo.comment}
     *
     * @param  $!tool.firstLowerCase($!{tableInfo.name}) $!{tableInfo.comment}
     * @return int 影響行數
     */
    int insert($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name}));

    /**
     * 根據$!pk.name刪除$!{tableInfo.comment}
     *
     * @param  $!pk.name $!pk.comment
     * @return int 影響行數
     */
    int deleteById($!pk.shortType $!pk.name);

    /**
     * 根據$!pk.name查詢$!{tableInfo.comment}
     *
     * @param  $!pk.name $!pk.comment
     * @return $!{tableInfo.name} $!{tableInfo.comment}
     */
    $!{tableInfo.name} queryById($!pk.shortType $!pk.name);

    /**
     * 查詢全部$!{tableInfo.comment}
     *
     * @return List<$!{tableInfo.name}> $!{tableInfo.comment}列表
     */
    List<$!{tableInfo.name}> queryAll();

    /**
     * $!{tableInfo.name}實體作為條件查詢$!{tableInfo.comment}
     *
     * @param  $!tool.firstLowerCase($!{tableInfo.name}) $!{tableInfo.comment}
     * @return List<$!{tableInfo.name}> $!{tableInfo.comment}列表
     */
    List<$!{tableInfo.name}> queryAll($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name}));

    /**
     *  修改$!{tableInfo.comment}
     *
     * @param  $!tool.firstLowerCase($!{tableInfo.name}) $!{tableInfo.comment}
     * @return int 影響行數
     */
    int update($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name}));
}

service.java

##定義初始變量
#set($tableName = $tool.append($tableInfo.name, "Service"))
##設置回調
$!callback.setFileName($tool.append($tableName, ".java"))
$!callback.setSavePath($tool.append($tableInfo.savePath, "/service"))

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

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

import $!{tableInfo.savePackageName}.entity.$!{tableInfo.name};

import java.util.List;

/**
 * $!{tableInfo.comment}($!{tableInfo.name})服務接口層
 *
 * @author $!author
 * @since  $!time.currTime("yyyy-MM-dd")
 */
public interface $!{tableName} {

    /**
     * 新增$!{tableInfo.comment}
     *
     * @param  $!tool.firstLowerCase($!{tableInfo.name}) $!{tableInfo.comment}
     * @return boolean 是否新增成功
     */
    boolean insert($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name}));

    /**
     * 根據$!pk.name刪除$!{tableInfo.comment}
     *
     * @param  $!pk.name $!pk.comment
     * @return boolean 是否刪除成功
     */
    boolean deleteById($!pk.shortType $!pk.name);

    /**
     * 根據$!pk.name查詢$!{tableInfo.comment}
     *
     * @param  $!pk.name $!pk.comment
     * @return $!{tableInfo.name} $!{tableInfo.comment}
     */
    $!{tableInfo.name} queryById($!pk.shortType $!pk.name);

    /**
     * 查詢全部$!{tableInfo.comment}
     *
     * @return List<$!{tableInfo.name}> $!{tableInfo.comment}列表
     */
    List<$!{tableInfo.name}> queryAll();

    /**
     * $!{tableInfo.name}實體作為條件查詢$!{tableInfo.comment}
     *
     * @param  $!tool.firstLowerCase($!{tableInfo.name}) $!{tableInfo.comment}
     * @return List<$!{tableInfo.name}> $!{tableInfo.comment}列表
     */
    List<$!{tableInfo.name}> queryAll($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name}));

    /**
     *  修改$!{tableInfo.comment}
     *
     * @param  $!tool.firstLowerCase($!{tableInfo.name}) $!{tableInfo.comment}
     * @return boolean 是否修改成功
     */
    boolean update($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name}));
}

serviceImpl.java

##定義初始變量
#set($tableName = $tool.append($tableInfo.name, "ServiceImpl"))
##設置回調
$!callback.setFileName($tool.append($tableName, ".java"))
$!callback.setSavePath($tool.append($tableInfo.savePath, "/service/impl"))

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

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

import $!{tableInfo.savePackageName}.entity.$!{tableInfo.name};
import $!{tableInfo.savePackageName}.mapper.$!{tableInfo.name}Mapper;
import $!{tableInfo.savePackageName}.service.$!{tableInfo.name}Service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

 /**
  * $!{tableInfo.comment}($!{tableInfo.name})服務實現層
  *
  * @author $!author
  * @since  $!time.currTime("yyyy-MM-dd")
  **/
@Service("$!tool.firstLowerCase($!{tableInfo.name})Service")
public class $!{tableName} implements $!{tableInfo.name}Service {

    private final $!{tableInfo.name}Mapper $!tool.firstLowerCase($!{tableInfo.name})Mapper;

    @Autowired
    public $!{tableName} ($!{tableInfo.name}Mapper $!tool.firstLowerCase($!{tableInfo.name})Mapper) {
        this.$!tool.firstLowerCase($!{tableInfo.name})Mapper = $!tool.firstLowerCase($!{tableInfo.name})Mapper;
    }

    @Override
    public boolean insert($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name})) {
        return $!{tool.firstLowerCase($!{tableInfo.name})}Mapper.insert($!tool.firstLowerCase($!{tableInfo.name})) == 1;
    }

    @Override
    public boolean deleteById($!pk.shortType $!pk.name) {
        return $!{tool.firstLowerCase($!{tableInfo.name})}Mapper.deleteById($!pk.name) == 1;
    }

    @Override
    public $!{tableInfo.name} queryById($!pk.shortType $!pk.name) {
        return $!{tool.firstLowerCase($!{tableInfo.name})}Mapper.queryById($!pk.name);
    }

    @Override
    public List<$!{tableInfo.name}> queryAll() {
        return $!{tool.firstLowerCase($!{tableInfo.name})}Mapper.queryAll();
    }

    @Override
    public List<$!{tableInfo.name}> queryAll($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name})) {
        return $!{tool.firstLowerCase($!{tableInfo.name})}Mapper.queryAll($!tool.firstLowerCase($!{tableInfo.name}));
    }

    @Override
    public boolean update($!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name})) {
        return $!{tool.firstLowerCase($!{tableInfo.name})}Mapper.update($!tool.firstLowerCase($!{tableInfo.name})) == 1;
    }
}

controller.java

##定義初始變量
#set($tableName = $tool.append($tableInfo.name, "Controller"))
##設置回調
$!callback.setFileName($tool.append($tableName, ".java"))
$!callback.setSavePath($tool.append($tableInfo.savePath, "/controller"))
##拿到主鍵
#if(!$tableInfo.pkColumn.isEmpty())
    #set($pk = $tableInfo.pkColumn.get(0))
#end

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

import $!{tableInfo.savePackageName}.entity.$!{tableInfo.name};
import $!{tableInfo.savePackageName}.service.$!{tableInfo.name}Service;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * $!{tableInfo.comment}($!{tableInfo.name})控制層
 *
 * @author $!author
 * @since  $!time.currTime("yyyy-MM-dd")
 */
@Api(tags = "$!{tableInfo.comment}管理")
@RestController
@RequestMapping("/$!tool.firstLowerCase($tableInfo.name)")
@Validated
public class $!{tableName} {

    private final $!{tableInfo.name}Service $!tool.firstLowerCase($!{tableInfo.name})Service;

    @Autowired
    public $!{tableName} ($!{tableInfo.name}Service $!tool.firstLowerCase($!{tableInfo.name})Service) {
        this.$!tool.firstLowerCase($!{tableInfo.name})Service = $!tool.firstLowerCase($!{tableInfo.name})Service;
    }

    @ApiOperation("新增$!{tableInfo.comment}")
    @PostMapping("/insert")
    public boolean insert(@ApiParam(value = "$!{tableInfo.comment}", required = true) @RequestBody @Validated $!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name})) {
        return $!{tool.firstLowerCase($!{tableInfo.name})}Service.insert($!tool.firstLowerCase($!{tableInfo.name}));
    }

    @ApiOperation("根據$!pk.name刪除$!{tableInfo.comment}")
    @DeleteMapping("/delete/{$!pk.name}")
    public boolean delete(@ApiParam(value = "$!{tableInfo.comment}$!pk.name", required = true) @PathVariable("$!pk.name") $!pk.shortType $!pk.name) {
        return $!{tool.firstLowerCase($!{tableInfo.name})}Service.deleteById($!pk.name);
    }

    @ApiOperation("根據$!pk.name查詢$!{tableInfo.comment}")
    @GetMapping("/queryById/{$!pk.name}")
    public $!{tableInfo.name} queryById(@ApiParam(value = "$!{tableInfo.comment}$!pk.name", required = true) @PathVariable("$!pk.name") $!pk.shortType $!pk.name) {
        return $!{tool.firstLowerCase($!{tableInfo.name})}Service.queryById($!pk.name);
    }

    @ApiOperation("查詢全部$!{tableInfo.comment}")
    @GetMapping("/queryAll")
    public List<$!{tableInfo.name}> queryAll() {
        return $!{tool.firstLowerCase($!{tableInfo.name})}Service.queryAll();
    }

    @ApiOperation("$!{tableInfo.name}實體作為條件查詢$!{tableInfo.comment}")
    @GetMapping("/queryByUser")
    public List<$!{tableInfo.name}> queryAll(@ApiParam(value = "$!{tableInfo.comment}", required = true) @RequestBody @Validated $!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name})) {
        return $!{tool.firstLowerCase($!{tableInfo.name})}Service.queryAll($!tool.firstLowerCase($!{tableInfo.name}));
    }

    @ApiOperation("修改$!{tableInfo.comment}")
    @PutMapping("/update")
    public boolean update(@ApiParam(value = "$!{tableInfo.comment}", required = true) @RequestBody @Validated $!{tableInfo.name} $!tool.firstLowerCase($!{tableInfo.name})) {
        return $!{tool.firstLowerCase($!{tableInfo.name})}Service.update($!tool.firstLowerCase($!{tableInfo.name}));
    }
}

mapper.xml

##引入mybatis支持
$!mybatisSupport

##設置保存名稱與保存位置
$!callback.setFileName($tool.append($!{tableInfo.name}, "Dao.xml"))
$!callback.setSavePath($tool.append($modulePath, "/src/main/resources/mybatis/mapper"))

##拿到主鍵
#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}Dao">

    <!--$!{tableInfo.obj.name}的映射結果集-->
    <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>

    <!--全部字段-->
    <sql id="allColumn"> #allSqlColumn() </sql>

    <!--添加語句的字段列表-->
    <sql id="insertColumn">
#foreach($column in $tableInfo.otherColumn)
        <if test="$!column.name != null#if($column.type.equals("java.lang.String")) and $!column.name != ''#end">
            $!column.obj.name,
        </if>
#end
    </sql>

    <!--添加語句的值列表-->
    <sql id="insertValue">
#foreach($column in $tableInfo.otherColumn)
        <if test="$!column.name != null#if($column.type.equals("java.lang.String")) and $!column.name != ''#end">
            #{$!column.name},
        </if>
#end
    </sql>

    <!--通用對$!{tableInfo.name}各個屬性的值的非空判斷-->
    <sql id="commonsValue">
#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
    </sql>

    <!--新增$!{tableInfo.obj.name}:哪個字段不為空就添加哪列數據,返回自增主鍵-->
    <insert id="insert" keyProperty="$!pk.name" useGeneratedKeys="true">
        insert into $!{tableInfo.obj.name}
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <include refid="insertColumn"/>
        </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <include refid="insertValue"/>
        </trim>
    </insert>

    <!--刪除$!{tableInfo.obj.name}:通過主鍵-->
    <delete id="deleteById">
        delete from $!{tableInfo.obj.name}
        <where>
            $!pk.obj.name = #{$!pk.name}
        </where>
    </delete>

    <!--查詢單個$!{tableInfo.obj.name}-->
    <select id="queryById" resultMap="$!{tableInfo.name}Map">
        select
        <include refid="allColumn"></include>
        from $!tableInfo.obj.name
        <where>
            $!pk.obj.name = #{$!pk.name}
        </where>
    </select>

    <!--通過實體作為篩選條件查詢-->
    <select id="queryAll" resultMap="$!{tableInfo.name}Map">
        select
        <include refid="allColumn"></include>
        from $!tableInfo.obj.name
        <trim prefix="where" prefixOverrides="and" suffixOverrides=",">
            <include refid="commonsValue"></include>
        </trim>
    </select>

    <!--通過主鍵修改數據-->
    <update id="update">
        update $!{tableInfo.obj.name}
        <set>
            <include refid="commonsValue"></include>
        </set>
        <where>
            $!pk.obj.name = #{$!pk.name}
        </where>
    </update>
</mapper>

新創建一個分組Lombok,可以在生成實體類的時候使用Lombok注解

實體類層:entity.java

##引入宏定義
$!define

##使用宏定義設置回調(保存位置與文件后綴)
#save("/entity", ".java")

##使用宏定義設置包后綴
#setPackageSuffix("entity")

##使用全局變量實現默認包導入
$!autoImport
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

import java.io.Serializable;

##使用宏定義實現類注釋信息
#tableComment("實體")
@Data
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@ApiModel("$!{tableInfo.comment}")
public class $!{tableInfo.name} implements Serializable {

    private static final long serialVersionUID = $!tool.serial();
#foreach($column in $tableInfo.fullColumn)

    #if(${column.comment})/**
    * ${column.comment}
    */#end

    #if($column.obj.name == "id")@ApiModelProperty(value = "$!{column.comment}")#end
    #if($column.obj.name != "id")@ApiModelProperty(value = "$!{column.comment}", required = true)#end
    private $!{tool.getClsNameByFullName($column.type)} $!{column.name};
#end
}

多個分組的切換

選擇好分組后,點擊OK,之后在Datebase視圖的數據表右鍵選擇EasyCode生成的時候會讓你選擇當前分組的模板


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM