SpringBoot测试系列之引入Lombok

2020-12-01 09:49:36 浏览数 (1)

码农的烦恼

在实现了第一个"/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背后是“建造模式”这样一个设计模式,其主要作用是为了解决在某个类有很多构造函数的情况,也省去写很多构造函数的麻烦。使用者可以自行根据使用需求,自行组装,如下例:
代码语言:javascript复制
 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)

———————————————— 未完待续。。。。。

0 人点赞