码农的烦恼
在实现了第一个"/api/keyword"的接口之后,我们可以继续编写其余接口了。这一次,我们想尝试挑战一下TestLink中最大的业务对象 TestProject。 但是看过TestProject表的建表语句后,码农就有了烦恼。建表语句是这样的,
代码语言:javascript复制CREATE TABLE /*prefix*/testprojects (
`id` int(10) unsigned NOT NULL,
`notes` text,
`color` varchar(12) NOT NULL default '#9BD',
`active` tinyint(1) NOT NULL default '1',
`option_reqs` tinyint(1) NOT NULL default '0',
`option_priority` tinyint(1) NOT NULL default '0',
`option_automation` tinyint(1) NOT NULL default '0',
`options` text,
`prefix` varchar(16) NOT NULL,
`tc_counter` int(10) unsigned NOT NULL default '0',
`is_public` tinyint(1) NOT NULL default '1',
`issue_tracker_enabled` tinyint(1) NOT NULL default '0',
`code_tracker_enabled` tinyint(1) NOT NULL default '0',
`reqmgr_integration_enabled` tinyint(1) NOT NULL default '0',
`api_key` varchar(64) NOT NULL default '0d8ab81dfa2c77e8235bc829a2ded3edfa2c78235bc829a27eded3ed0d8ab81d',
PRIMARY KEY (`id`),
KEY /*prefix*/testprojects_id_active (`id`,`active`),
UNIQUE KEY /*prefix*/testprojects_prefix (`prefix`),
UNIQUE KEY /*prefix*/testprojects_api_key (`api_key`)
) DEFAULT CHARSET=utf8;
相比于关键字Keywords表的4-5个字段来说,TestProject表是数量级上的增加了。考虑到我们后面的工作,从定义domain业务对象开始,写mapper.xml,然后是DAO层操作,接着是Service接口和实现,最后组装成Controller对外提供服务(按业务需求开发一般是一个与之逆向的过程)。每一个接口这样的编写过程其实是非常繁琐、重复的体力劳动,也难怪软件开发人员经常自嘲是“搬砖”的“码农”了。 那如何来让自己的搬砖工作轻松一点呢?还是得借助于专业的搬砖工具。 鉴于我们项目的实际(已有数据库schema,后台换开发语言重构),这里将介绍如何引入Lombok和Mybatis-Generator(MBG)。
Lombok
首先我们针对domain对象来引入一个代码辅助生成工具Lombok。在早期的Java开发中,IDE也默认提供了代码自动生成功能,如以下是Eclipse中提供的,包括了Get/Set,构造方法等等。
image.png
但是Lombok提供了基于注解的更为灵活和简洁友好的实现方式。譬如,以下是采用了Lombok之后的TestProject类
代码语言:javascript复制package com.testlink4j.domain;
import java.io.Serializable;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class Testprojects implements Serializable {
private Integer id;
private String color;
private Boolean active;
private Boolean option_reqs;
private Boolean option_priority;
private Boolean option_automation;
private String prefix;
private Integer tc_counter;
private Boolean is_public;
private Boolean issue_tracker_enabled;
private Boolean reqmgr_integration_enabled;
private String api_key;
private String notes;
private String options;
private static final long serialVersionUID = 1L;
}
}
相比于IDE中直接生成并插入代码的方式,这种基于注解的方式无疑是非常简洁的。对于阅读代码的人来讲,少了大量没有业务逻辑的get/set代码,阅读负担也减轻了许多。 我们注意到,这个类中一共使用了4个Lombok提供的注解,主意解释如下:
- @Data 使用这个注解,就不用再去手写Getter,Setter,equals,canEqual,hasCode,toString等方法了,在编译时该工具会自动加进去。
- @AllArgsConstructor 使用后添加一个构造方法,该构造方法含有所有已声明字段属性参数
- @NoArgsConstructor 使用后创建一个无参构造方法
- @Builder Builder背后是“建造模式”这样一个设计模式,其主要作用是为了解决在某个类有很多构造函数的情况,也省去写很多构造函数的麻烦。使用者可以自行根据使用需求,自行组装,如下例:
public static void main(String[] args) {
//使用@Builder注解后,可以直接通过Builder设置字段参数
Testprojects tp1=new Testprojects.testprojectsBuilder()
.id(123)
.active(Boolean.TRUE)
.prefix("test")
.build();
}
如何引入Lombok - pom.xml
在该项目的pom.xml中添加如下依赖即可:
代码语言:javascript复制 <dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.4</version>
<scope>provided</scope>
</dependency>
如何引入Lombok - IDE
由于Lombok的原理是在编译时才进行相关代码的自动生成,只在Maven项目引入依赖,在IDE中,编辑器会报告各种“该方法不存在”等问题。为了能让IDE不再“误报”,我们需要在IDE中也引入Lombok插。除了在插件市场上搜索安装,也可以直接下载Jar包后使用。
例如在Eclipse中,只要在eclipse.ini的尾部添加如下一行即可。
代码语言:javascript复制-vmargs
-Dosgi.requiredJavaVersion=1.7
-Xms40m
-Xmx512m
-javaagent:d:appeclipselombok.jar
如果使用了其余javaagent的话,记得要把lombok.jar放在最前面。
Mybatis-Generator(MBG)
———————————————— 未完待续。。。。。