• 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;
        }
    }
    



     


     

  • 相关阅读:
    Java多线程-线程同步简述
    概率论与数理统计---基本概念
    强化学习基础
    【C++ STL】string类-----迭代器(什么是迭代器?迭代器分哪几类?迭代器的接口如何使用?)
    vue3中通过ref获取子组件实例,取值为undefined
    Qt中Opencv转Qimage出现重影或者颜色不对
    情绪识别公开数据集汇总心电相关and申请方法详细描述 呕心沥血之作 全网唯一
    AcWing.505 火柴排队(离散化&逆序对)
    【活动报名】11月19日 | AI GC 的技术与应用构建
    Nginx图片防盗链
  • 原文地址:https://blog.csdn.net/m0_67930426/article/details/132974709