• Lombok依赖


    一.介绍

    Project Lombok 是一个 Java 库,它会自动插入编辑器和构建工具,为您的 Java 增添趣味。永远不要再写另一个 getter 或 equals 方法,使用一个注释,您的类有一个功能齐全的构建器,自动化您的日志记录变量等等。

    二.添加Lombok依赖

    1.pom文件中添加


        org.projectlombok
        lombok
        1.18.4
        provided

     

    2.创建项目中勾选Lombok选项,pom文件中自动生成

    三.优缺点

    优点: 通过注解的形式自动生成构造器,简化代码,例如在做属性修改的时候不用做

                过多的处理

    缺点:不支持多种参数构造器的重载

    四.常用注解

    @Data 

    使用该注解可以自动生成Getter、Setter、equals、hashCode和toString方法,相当于同时使用了

    这些方法

    @Getter

    自动生成Java Bean类的Getters方法(访问实体类的属性)

    @Setter

    自动生成Java Bean类的Setter方法(访问实体类的属性)

    @ToString

    可以自动生成ToString方法(将一个对象的属性转换成一个字符串,方便输出调试信息。)

    @EqualsAndHashCode

    @EqualsAndHashCode注解可以自动生成equals和hashCode方法(可以用来比较两个对象是否相等。)

    综上@Data包含如上述注解,如果其他注解默认使用的话,就可以直接使用@Data

    对于@EqualsAndHashCode注解有两种写法

    @EqualsAndHashCode(callSuper = false)和@EqualsAndHashCode(callSuper = ture)
    

    前者默认就是不管父类继承的属性的,后者是用自己的属性和从父类继承的属性 来生成hashcode

    使用@Data注解

    package com.haxlab.server.entity;
    
    import com.mybatisflex.annotation.Id;
    import com.mybatisflex.annotation.KeyType;
    import com.mybatisflex.annotation.Table;
    import lombok.Data;
    import lombok.EqualsAndHashCode;
    import lombok.experimental.Accessors;
    import lombok.extern.slf4j.Slf4j;
    
    @Data
    @EqualsAndHashCode(callSuper = false)
    @Accessors(chain = true)
    @Table("t_student")
    public class Student {
        @Id(keyType = KeyType.Auto)
        private long id;
        private String name;
        private String gender;
        private int score;
        private String grade;
    }
    

    通过这个注解,不用在写Getter和Setter方法,就能访问实体类里的属性

    也不用在写equals、hashCode和toString方法

    不使用Data注解

    package com.haxlab.server.entity;
    
    import com.mybatisflex.annotation.Id;
    import com.mybatisflex.annotation.KeyType;
    import com.mybatisflex.annotation.Table;
    import lombok.Data;
    import lombok.EqualsAndHashCode;
    import lombok.experimental.Accessors;
    
    @Data
    @EqualsAndHashCode(callSuper = false)
    @Accessors(chain = true)
    @Table("t_student")
    public class Student {
        @Id(keyType = KeyType.Auto)
        private long id;
        private String name;
        private String gender;
        private int score;
        private int grade;
    
        public long getId() {
            return id;
        }
    
        public void setId(long id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getGender() {
            return gender;
        }
    
        public void setGender(String gender) {
            this.gender = gender;
        }
    
        public int getScore() {
            return score;
        }
    
        public void setScore(int score) {
            this.score = score;
        }
    
        public int getGrade() {
            return grade;
        }
    
        public void setGrade(int grade) {
            this.grade = grade;
        }
    
        public boolean equals(Object object) {
            if (this == object) return true;
            if (!(object instanceof Student)) return false;
            if (!super.equals(object)) return false;
            Student student = (Student) object;
            return getId() == student.getId() && getScore() == student.getScore() && getGrade() == student.getGrade() && java.util.Objects.equals(getName(), student.getName()) && java.util.Objects.equals(getGender(), student.getGender());
        }
    
        public int hashCode() {
            return java.util.Objects.hash(super.hashCode(), getId(), getName(), getGender(), getScore(), getGrade());
        }
    
        @java.lang.Override
        public java.lang.String toString() {
            return "Student{" +
                    "id=" + id +
                    ", name='" + name + '\'' +
                    ", gender='" + gender + '\'' +
                    ", score=" + score +
                    ", grade=" + grade +
                    '}';
        }
    }

    如果要修改实体类某个属性的时候,不使用@Data注解,修改过程会相对很麻烦

    @AllArgsConstructor和@NoArgsConstructor

     @AllArgsConstructor生成全参构造法

    @NoArgsConstructor生成无参数构造法

    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public class User {
        private int id;
        private String name;
        private int age;
    }

    等价于

     

    @Data
    public class User {
        private int id;
        private String name;
        private int age;
    
        public User() {
        }
    
        public User(int id, String name, int age) {
            this.id = id;
            this.name = name;
            this.age = age;
        }
    }
    



     


     

  • 相关阅读:
    Android Span进阶之路——ClickableSpan
    技术面试面面观
    CANN算子:利用迭代器高效实现Tensor数据切割分块处理
    unity的debug.log无法显示console控制台
    PIGOSS BSM 监控系统采集方式Agent 3.0技术与使用简介
    OpenCV鼠标绘制线段
    TDesign的input标签
    线程中断机制和LockSupport
    你我都会遇到的需求:如何导出MySQL中的数据~ 简单!实用!
    python+django医院疫情防控管理系统vue
  • 原文地址:https://blog.csdn.net/m0_67930426/article/details/132974709