lombok 简介

Lombok: 可以让pojo类代码简洁, 通过注释完成构造方法,set、get等的操作

@DATA  // 自动生成set和get

mybatisplus : 基础的数据库crud、分页等可以自动生成

swaggerUI: 接口文档自动生成,对接前端和测试更加方便

创建springboot项目引入springweb的依赖

1、lombok插件

 

   
        
            org.projectlombok
            lombok
            true
            1.18.6
            provided  provided 表示只是在编译的时候生效,而不会在项目的jar包
        

lombok在编译的时候将带有lombok注解的java文件正确编译为完整的class文件。

添加idea工具对lombok的支持,

 点击file--setting--plugin--搜索lombok 然后安装

开启注解处理 enable annotation processing  之后需要重启idea;

lombok 简介_第1张图片

mvn compile  编译代码

lombok插件的原理: 

方法1、在编译阶段利用annotation processor 对自定义的注解进行预处理后生成真正在jvm上面执行的class文件     JSR269 插件化注解处理

方法2、利用反射技术在运行的时候动态修改。

/**
 *   @RequiredArgsConstructor 会生成没有复制的final类型生产构造函数,且这个final必须
 *   被@nonNull 修饰,不能与无参构造的注解同时存在
 */
@Setter
@Getter
@NoArgsConstructor  // 生成无参的构造函数
@AllArgsConstructor // 生成带参构造函数

@ToString // 重写tostring方法
@EqualsAndHashCode // 表示重写equal和hashcode方法,默认是对所有的属性,用exclude参数来排除,of参数指明包含的
// @EqualsAndHashCode(of = {"name","id}) 表示只需要id和name一样,则两个对象就是一样的
/**
@ToString(exclude ={"phone"} )  排除哪些
@ToString(of = {"name"})  包含哪些
*/
public class User {
    /**
     * 注意细节点: 1、final属性只有get方法,不会有set方法
     *           2、 静态变量不会有get、set方法
     */

    @Setter(AccessLevel.PROTECTED) // 设置后编译的set方法是私有的
    private int id;

    private final  String name = "llp";

    private String email;

    private String phone;

    private String pwd;

    private Date createTime;

    private void login(@NonNull String pwd){
        // TODO    // 加入注解后可以省略后面的判断

//        if(pwd!=null){
//            // something to do
//        }else {
//            throw new NullPointerException();
//        }


    }
}
@Data = @ToString + @EqualsAndHashCode + @Getter + @setter + @RequiredArgsConstructor

建造者模式:

当一个bean类重载了多个构造方法的时候,并且参数随机使用的时候,考虑使用构造者模式

@Builder  // 将这个注解加载类上
// 编译后生成这个方法 
 public static User.UserBuilder builder() {
        return new User.UserBuilder();
    }
//使用的时候,其中User是类名,通过类名调用builder方法,
//再调用属性给对应的属性复制,最后调用build方法
User.builder.id(1).name("ll").phone("110").build()

 

@Log
@Slf4j
// 作用于类上,生成日志变量,用于记录日志
@Service
@Slf4j
public class UserServiceImpl implements UserService {
    
    @Override
    public void login(String pwd, String phone) {
        log.info("用于登录 : {}" ,phone);  // 日志打印
    }
}

// 加入注解后悔生成这行代码
 private static final Logger log = LoggerFactory.getLogger(UserServiceImpl.class);

lombok的优缺点以及使用场景

1、 lombok要求在idea中安装对应的插件,如果项目中一个人使用了lombok则都要使用

2、代码的可读性和可调式性低

@Data 默认在重写equalandhashcode的时候,只比较本类中的,不会比较父类中的属性

一般适用于业务项目,不适应于开发中间件

// Lombok 的常用注解

@Setter + @Getter + @NonNull  + @NoArgsConstructor + @AllArgsConstructor 
@ToString + @EqualAndHashCode + @Data + @Builder + @Log + @Slf4j

 

你可能感兴趣的:(mybatisplus)