03我的项目搭建 逆向工程(代码生成)实现
逆向工程实现代码生成大家个别都有应用过,而应用easyCode的插件来生成代码会更加简略不便。只有花点工夫来编写脚本,你将能够间接生成个别以上的根底代码。本文将演示如何应用插件来实现的码的生成。
一、插件装置
插件库中搜寻easycode,而后进行装置。
作者选的是前者(图中已装置的)。
二、配置脚本
这个是本篇中的重头戏,脚本配的好,代码写得少。
先上属性阐明:
属性
$packageName 抉择的包名(String)
$author 设置中的作者(String)
$encode 设置的编码(String)
$modulePath 选中的module门路(String)
$projectPath 我的项目门路(String)
对象
$tableInfo 表对象(TableInfo)
obj 表原始对象(DasColumn,上面有贴图)
name 表名(转换后的首字母大写)(String)
comment 表正文(String)
fullColumn 所有列(List<ColumnInfo>)
pkColumn 主键列(List<ColumnInfo>)
otherColumn 其余列(List<ColumnInfo>)
savePackageName 保留的包名(String)
savePath 保留门路(String)
saveModelName 保留的model名称(String)
columnInfo 列对象(ColumnInfo)
obj 列原始对象(DbTable,上面有贴图)
name 列名(首字母小写)(String)
comment 列正文(String)
type 列类型(类型全名)(String)
ext 附加字段(Map类型)(Map<String,Object>)
$tableInfoList 所有选中的表(List<TableInfo>)
$importList 所有须要导入的包汇合(Set<String>)
回调
&callback
setFileName(String) 设置文件贮存名字
setSavePath(String) 设置文件贮存门路,默认应用选中门路
工具
$tool
firstUpperCase(String) 首字母大写办法
firstLowerCase(String) 首字母小写办法
getClsNameByFullName(String) 通过包全名获取类名
getJavaName(String) 将下划线宰割字符串转驼峰命名(属性名)
getClassName(String) 将下划线宰割字符串转驼峰命名(类名)
append(... Object) 多个数据进行拼接
$time
currTime(String) 获取以后工夫,指定工夫格局(默认:yyyy-MM-dd HH:mm:ss)
上述是脚本整体的属性解说。如何批改具体想要生成的代码模板,就得好好花些工夫进行脚本的编写。而作者的局部脚本如下:
当然,得先说说脚本编写的入口(IDEA为例):
settings 中的other settings下的EasyCode-MybatisCodeHelper。其中type是指数据库到实体的映射关系。而Template Setting就是脚本的配置了。
entity.java
##引入宏定义
$!define
##应用宏定义设置回调(保留地位与文件后缀)
#save("/entity", ".java")
##应用宏定义设置包后缀
#setPackageSuffix("entity")
##应用全局变量实现默认包导入
$!autoImport
import java.io.Serializable;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableId;
import io.swagger.annotations.ApiModelProperty;
##应用宏定义实现类正文信息
#tableComment("实体类")
## 获取主键(个别主键都是实体类名+Id)
#set($id= "$tool.firstLowerCase($!{tableInfo.name})Id")
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.name}==$!{id})@TableId
@ApiModelProperty(value = "${column.comment}")
private $!{tool.getClsNameByFullName($column.type)} $!{column.name};
#else
@TableField("$!column.obj.name")
@ApiModelProperty(value = "${column.comment}")
private $!{tool.getClsNameByFullName($column.type)} $!{column.name};
#end
#end
#foreach($column in $tableInfo.fullColumn)
##应用宏定义实现get,set办法
#getSetMethod($column)
#end
@Override
public String toString() {
return "$!{tableInfo.name}["+
#foreach($column in $tableInfo.fullColumn)
#if(${column.name}==$!{id})
"${column.name}='" + ${column.name} + ''' +
#else
",${column.name}='" + ${column.name} + ''' +
#end
#end "]";
}
}
controller.java
##定义初始变量
#set($tableName = $tool.append($tableInfo.name, "Controller"))
#set($entityName= "$!{tableInfo.comment}($!{tableInfo.name}")
##设置回调
$!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}.facade.I$!{tableInfo.name}Facade;
import com.jowim.util.ResponseMessage;
import org.springframework.web.bind.annotation.*;
import io.swagger.annotations.ApiOperation;
import org.springframework.security.access.prepost.PreAuthorize;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import com.jowim.exception.ServiceException;
import com.jowim.vo.$!tool.firstLowerCase($tableInfo.name)$tool.append(".Insert",$!{tableInfo.name},"VO");
import com.jowim.vo.$!tool.firstLowerCase($tableInfo.name)$tool.append(".Update",$!{tableInfo.name},"VO");
import javax.annotation.Resource;
import javax.validation.Valid;
/**
* $!{entityName}表管制层
*
* @author $!author
* @since $!time.currTime()
*/
@RestController
@RequestMapping("$!tool.firstLowerCase($tableInfo.name)")
public class $!{tableName} {
/**
* 服务对象
*/
@Resource
private I$!{tableInfo.name}Facade $!tool.firstLowerCase($tableInfo.name)Facade;
/**
* 增加$!{tableInfo.comment}($!{tableInfo.name})
*
* @param $tool.append("new",$tableInfo.name)
* @return
*/
@PreAuthorize("hasAnyRole('ROLE_')")
@ApiOperation(value = "增加$!{entityName}", notes = "增加$!{entityName}", httpMethod = "POST")
@PostMapping("")
public ResponseMessage<Object> insert$!{tableInfo.name}(@RequestBody @Valid Insert$!{tableInfo.name}VO $tool.append("new",$tableInfo.name)) {
try {
return ResponseMessage.ok($tool.append($!tool.firstLowerCase($tableInfo.name),"Facade.insert",$!{tableInfo.name},"(",$tool.append("new",$tableInfo.name),")"));
}catch (ServiceException e){
return ResponseMessage.error(e.getMessage());
}
}
/**
* 批改$!{tableInfo.comment}($!{tableInfo.name})
*
* @param vo
* @return
*/
@PreAuthorize("hasAnyRole('ROLE_')")
@ApiOperation(value = "批改$!{entityName}", notes = "批改$!{entityName}", httpMethod = "PUT")
@PutMapping("")
public ResponseMessage<String> update$!{tableInfo.name}(@RequestBody @Valid Update$!{tableInfo.name}VO vo) {
try {
return ResponseMessage.ok($tool.append($!tool.firstLowerCase($tableInfo.name),"Facade.update",$!{tableInfo.name},"(vo)"));
}catch (ServiceException e){
return ResponseMessage.error(e.getMessage());
}
}
/**
* 删除$!{tableInfo.comment}($!{tableInfo.name})
*
* @param uuid
* @return
*/
@PreAuthorize("hasAnyRole('ROLE_')")
@ApiOperation(value = "删除$!{entityName}", notes = "删除$!{entityName}", httpMethod = "DELETE")
@DeleteMapping("/{uuid}")
public ResponseMessage<String> del$!{tableInfo.name}(@PathVariable("uuid") String uuid) {
try {
return ResponseMessage.ok($tool.append($!tool.firstLowerCase($tableInfo.name),"Facade.del",$!{tableInfo.name},"(uuid)"));
}catch (ServiceException e){
return ResponseMessage.error(e.getMessage());
}
}
/**
* 依据id查看详情
*
* @param uuid
* @return
*
*
*/
@PreAuthorize("hasAnyRole('ROLE_')")
@ApiOperation(value = "依据id查看详情", notes = "依据id查看详情", httpMethod = "GET")
@RequestMapping("/{uuid}")
@ApiImplicitParam(name = "uuid", value = "$!{tableInfo.comment}($!{tableInfo.name})id", required = true, paramType = "path", dataType = "String")
public ResponseMessage<Object> get$!{tableInfo.name}(@PathVariable("uuid") String uuid) {
try {
return ResponseMessage.ok($tool.append($!tool.firstLowerCase($tableInfo.name),"Facade.get",$!{tableInfo.name},"(uuid)"));
}catch (ServiceException e){
return ResponseMessage.error(e.getMessage());
}
}
/**
* 查问$!{tableInfo.comment}($!{tableInfo.name})汇合
*
* @param page
* @param pageSize
* @return
*/
@PreAuthorize("hasAnyRole('ROLE_')")
@RequestMapping("/query_page")
@ApiOperation(value = "查问$!{tableInfo.comment}($!{tableInfo.name})汇合", notes = "查问$!{tableInfo.comment}($!{tableInfo.name})汇合", httpMethod = "GET")
@ApiImplicitParams({
@ApiImplicitParam(name = "page", value = "展现的页数", required = true, paramType = "query", dataType = "int",example = "1"),
@ApiImplicitParam(name = "pageSize", value = "每页展现几条", required = true, paramType = "query", dataType = "int",example = "10")
})
public ResponseMessage<Object> select$!{tableInfo.name}(Integer page, Integer pageSize) {
try {
return ResponseMessage.ok($tool.append($!tool.firstLowerCase($tableInfo.name),"Facade.select",$!{tableInfo.name},"(page,pageSize)"));
} catch (ServiceException e) {
e.printStackTrace();
return ResponseMessage.error(e.getMessage());
}
}
}
mapper.xml
##引入mybatis反对
$!mybatisSupport
##设置保留名称与保留地位
$!callback.setFileName($tool.append($!{tableInfo.name}, "Mapper.xml"))
$!callback.setSavePath($tool.append($modulePath, "/src/main/resources/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}.repository.$!{tableInfo.name}Mapper">
<resultMap id="BaseResultMap" type="$!{tableInfo.savePackageName}.entity.$!{tableInfo.name}">
<!--@Table $!{tableInfo.originTableName}-->
#foreach($column in $tableInfo.fullColumn)
<result property="$!column.name" column="$!column.obj.name" jdbcType="$!column.ext.jdbcType"/>
#end
</resultMap>
</mapper>
因为篇幅的起因,就不将全副的脚本放出,有趣味能够分割作者获取全副脚本。
三、数据库设置
装置完插件后IDE(本文为IDEA)中左边会有数据库操作的菜单栏。
而后新建一个数据库连贯。编辑完连贯点击连贯可能会提醒装置驱动,间接点击批准便可。装置完之后列表中就会呈现数据库的选项,这里也能够对数据库进行操作,然而作者零碎间接用Navicat进行操作,不习惯用这个插件。
实现上述操作后,右键抉择要生成的表后点击
会提醒可选的生成的类模板。选中生成的地位Package,而后就能够生成绝对于的模板
四、代码后果展现
图中报红是因为局部依赖还未引入所导致。
自此,基于easyCode插件联合脚本身材代码就实现了,本文中的办法还有很多能够优化的中央,例如实体类中能够应用Lombok插件进行代码的简化,间接注解来实现tostring和getter、setter的实现,缩小代码量。
我的项目源码地址:https://github.com/1529565626/-1SShop
我的项目演示地址:因为作者鉴于经费稀缺,临时未领有,待日后我的项目成熟,抑或是一夜暴富能够思考。
发表回复