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支持的數據庫都是支持的。
包括如下數據庫:
- MySQL
- SQL Server
- Oracle
- PostgreSQL
- Sqlite
- Sybase
- Derby
- DB2
- HSQLDB
- 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)可以生成下面類型的代碼
- entity.java
- dao.java
- service.java
- serviceImpl.java
- controller.java
- mapper.xml
- 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生成的時候會讓你選擇當前分組的模板