生成一些模板代码,减少重复工作
进入easywork-generator模块,修改nil.ed.easywork.generator.boot.PowerSqlToJavaGenericGeneratorBootStrap文件,修改见代码文件注释。
Comment Description使用{{}}声明描述,函数之间使用'&'进行分隔,描述内容主要包含两种函数:
list[值声明2(值),值声明2(值)] 值声明: name - 定义该列对应在Condition类中变量名称,当后缀为Set、Collection、List等时,条件运算符将会自动确认为in,设置op无效
type - 定义该列对应在Condition类中变量类型
query - 定义query条件,一般用于query模糊搜索或者query精确搜索
op - 定义条件运算符
优先级:query > name suffix > normal
一、该函数声明该列对应Condition条件,比如
`operation_status` tinyint(4) default '1' not null comment '操作类型:1-正常 2-删除{{ list[name(auditStatusSet),type(Collection<Integer>)] }}'该声明会生成下面的Condtion条件:
@Data public class XXXQueryCondition { private Collection<Integer> auditStatusSet; public XXXQueryCondition setAuditStatus(Integer auditStatus) { if (auditStatus != null) { auditStatusSet = Collections.singleton(auditStatus); } return this; } }Mapper xml
<sql id="BASE_CONDITION"> <where> <if test = "auditStatusSet != null"> `operation_status` in <foreach collection="auditStatusSet" item="item" open="(" close=")" separator=","> #{item} </foreach> </if> </where> </sql>二、使用query
`id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '主键 {{ list[name(idSet),type(List<Long>)] &list[type(List<Long>),query(true)),op(=)] }}', `name` VARCHAR(200) NOT NULL DEFAULT '' COMMENT '广告创意名称 {{ list[name(name),type(String),query(true),op(like)] }}'代码会根据query(Boolean)里的值判断该声明是否为query声明,如果是,将会检查op参数,op参数主要声明该参数在条件的条件运算符,比如<=、>=、<、>, 具体支持的条件运算符可见枚举easywork-comment-parser下的nil.ed.easywork.comment.enums.OpType.
这段声明将会生成如下代码:
Condition
@Data public class XXXQueryCondition { private String query; private List<Long> idSet; public AdCreativeQueryCondition setId(Long id) { if (id != null) { this.idSet = Collections.singletonList(id); } return this; } }Mapper Xml
<if test="query != null and query != ''"> (id = #{id} or name like concat('%', #{query}, '%')) </if> <if test = "idSet != null"> and `id` in <foreach collection="idSet" item="item" open="(" close=")" separator=","> #{item} </foreach> </if>三、自定义条件运算符
`id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '主键 {{ list[name(idSet),type(List<Long>)] &list[type(List<Long>),query(true)),op(=)] &list[name(id),op(>)] }}'该代码通过op为id定义了>运算符,这段代码将会生成:
@Data public class XXXQueryCondition { private Long id; }Mapper Xml
<if test="id != null"> and id > #{id} </if>enum[值声明2(值),值声明2(值)] 值声明:
name - 定义枚举类名称
enums - 定义枚举内容,目前只支持code、desc格式,格式为:<枚举名称:code@desc><枚举名称2:code@desc>...
`operation_status` tinyint(4) default '1' not null comment '操作类型:1-正常 2-删除{{ enum[name(OperationStatus),enums(<NONE:0@无><NORMAL:1@正常><NORMAL:2@删除>)] }}'这将会生成枚举OperationStatus:
@Getter @AllArgsConstructor public enum OperationStatus implements EnumBase { NONE(0, "无"), NORMAL(1, "正常"), NORMAL(2, "删除"), ; private static final Map<Integer, OperationStatus> MAP; private final int code; private final String desc; static { MAP = EnumUtils.asUnmodifiableMap(OperationStatus.class); } public static OperationStatus findByCode(Integer code) { return MAP.get(code); } }Note: 1、生成代码符合目前定义的checkstyle文件
easywork-comment-parser:解析SQL注释描述,目前支持list、search、enums.
easywork-common-dependency:抽象公共依赖.
easywork-generator:生成器代码,目前主要实现sql2java、json2sqls.
easywork-source-parser:使用Java tools.jar实现的Java源文件解析器
easywork-sql:使用shardingsphere-sql-parser(不推荐使用)、ali-druid-sql-parser实现的SQL解析器
easywork-template-engin:使用FreeMarker、ThymeLeaf实现的模板引擎
easywork-script-engin:执行动态脚本的脚本引擎,目前实现了groovy.
easywork-util:工具类
[v] 【6666666】根据建表SQL生成entity、Mapper(interface、Xml)、controller、service
[v] 【暂时没用】根据vo和entity生成parse和toEntity方法
[v] 【实用性差】变量名生成工具:使用百度翻译、Google翻译、有道翻译
[ ] 根据JSON生成JavaBean对象
[ ] 生成随机对象初始化代码(用于测试时生成随机对象)
[ ] 【一般都是wiki生成Controller + VO????】通过Controller + VO类生成wiki接口文档
[ ] 通过一些Java类生成ut

