精华内容
下载资源
问答
  • @Data注解

    万次阅读 2019-08-10 16:47:51
    常常需要应用大量的get、set方法,需要写大量的重复代码,即有的工具有自动生成功能,当时也会使实体类中产生大量冗余代码,使得代码变,springboot为我们提供了相应注解可以解决这类问题----@Data 接下来简明扼要...

    在实体类的编写过程中,常常需要应用大量的get、set方法,需要写大量的重复代码,即有的工具有自动生成功能,当时也会使实体类中产生大量冗余代码,使得代码变,springboot为我们提供了相应注解可以解决这类问题----@Data
        接下来简明扼要的介绍一下@Data注解的功能与使用方法
        ## 注解功能
            1、@Data可以为类提供读写功能,从而不用写get、set方法。
            2、他还会为类提供 equals()、hashCode()、toString() 方法。
            ## 使用方法--一下仅提供idea的使用方法
            1、下安装lombok插件
        ![settings/plugins在插件库中搜索安装即可。](https://img-blog.csdnimg.cn/20190501112839630.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3Jlbnh0MDUwOA==,size_16,color_FFFFFF,t_70)
        2、重启idea
        3、在maven库中添加依赖
                <dependency>
                    <groupId>org.projectlombok</groupId>
                    <artifactId>lombok</artifactId>
                    <version>1.16.10</version>
                </dependency>
        4、在实体类上添加@Data注解即可生效

    展开全文
  • lombok是一款在java开发中简洁化代码十分有用的插件工具,这篇博客对较为常用的几种注解进行记录,分享学习心得。...@Data 使用这个注解,就不用再去手写Getter,Setter,equals,canEqual,hasCode,toS...

    lombok是一款在java开发中简洁化代码十分有用的插件工具,这篇博客对较为常用的几种注解进行记录,分享学习心得。

    使用lombok注解,目的和作用就在于不用再去写经常反复去写的(如Getter,Setter,Constructor等)一些代码了。

    首先,用到的几个注解:

    • @Data
      使用这个注解,就不用再去手写Getter,Setter,equals,canEqual,hasCode,toString等方法了,注解后在编译时会自动加进去。
    • @AllArgsConstructor
      使用后添加一个构造函数,该构造函数含有所有已声明字段属性参数
    • @NoArgsConstructor
      使用后创建一个无参构造函数
    • @Builder
      关于Builder较为复杂一些,Builder的作用之一是为了解决在某个类有很多构造函数的情况,也省去写很多构造函数的麻烦,在设计模式中的思想是:用一个内部类去实例化一个对象,避免一个类出现过多构造函数,

    然后,通过一个简单的代码例子说明:

    1)首先,建立一个简单的类,并用lombok进行注解:注意这是注解前的代码,可以与后面贴出的注解生成的代码进行比较

    @Data //生成getter,setter等函数
    @AllArgsConstructor //生成全参数构造函数
    @NoArgsConstructor//生成无参构造函数
    @Builder
    public class test1 {
        String name;
        String age;
        String sex;
    }
    

    2)测试入口:

     public static void main(String[] args) {
     //使用@Builder注解后,可以直接通过Builder设置字段参数
            test1 t1=new test1.test1Builder()
                    .name("wang")
                    .age("12")
                    .sex("man")
                    .build();
    
            System.out.println("name is"+t1.getName()+'\n'+"age is :"+t1.getAge());
    
        }
    

    3)通过查看编译后的类,比较注解前后的代码量,发现会省去了很多代码的书写:

    public class test1 {
        String name;
        String age;
        String sex;
    
        public static test1.test1Builder builder() {
            return new test1.test1Builder();
        }
    
        public String getName() {
            return this.name;
        }
    
        public String getAge() {
            return this.age;
        }
    
        public String getSex() {
            return this.sex;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public void setAge(String age) {
            this.age = age;
        }
    
        public void setSex(String sex) {
            this.sex = sex;
        }
    
        public boolean equals(Object o) {
            if (o == this) {
                return true;
            } else if (!(o instanceof test1)) {
                return false;
            } else {
                test1 other = (test1)o;
                if (!other.canEqual(this)) {
                    return false;
                } else {
                    label47: {
                        Object this$name = this.getName();
                        Object other$name = other.getName();
                        if (this$name == null) {
                            if (other$name == null) {
                                break label47;
                            }
                        } else if (this$name.equals(other$name)) {
                            break label47;
                        }
    
                        return false;
                    }
    
                    Object this$age = this.getAge();
                    Object other$age = other.getAge();
                    if (this$age == null) {
                        if (other$age != null) {
                            return false;
                        }
                    } else if (!this$age.equals(other$age)) {
                        return false;
                    }
    
                    Object this$sex = this.getSex();
                    Object other$sex = other.getSex();
                    if (this$sex == null) {
                        if (other$sex != null) {
                            return false;
                        }
                    } else if (!this$sex.equals(other$sex)) {
                        return false;
                    }
    
                    return true;
                }
            }
        }
    
        protected boolean canEqual(Object other) {
            return other instanceof test1;
        }
    
        public int hashCode() {
            int PRIME = true;
            int result = 1;
            Object $name = this.getName();
            int result = result * 59 + ($name == null ? 43 : $name.hashCode());
            Object $age = this.getAge();
            result = result * 59 + ($age == null ? 43 : $age.hashCode());
            Object $sex = this.getSex();
            result = result * 59 + ($sex == null ? 43 : $sex.hashCode());
            return result;
        }
    
        public String toString() {
            return "test1(name=" + this.getName() + ", age=" + this.getAge() + ", sex=" + this.getSex() + ")";
        }
    
        @ConstructorProperties({"name", "age", "sex"})
        public test1(String name, String age, String sex) {
            this.name = name;
            this.age = age;
            this.sex = sex;
        }
    
        public test1() {
        }
    
        public static class test1Builder {
            private String name;
            private String age;
            private String sex;
    
            test1Builder() {
            }
    
            public test1.test1Builder name(String name) {
                this.name = name;
                return this;
            }
    
            public test1.test1Builder age(String age) {
                this.age = age;
                return this;
            }
    
            public test1.test1Builder sex(String sex) {
                this.sex = sex;
                return this;
            }
    
            public test1 build() {
                return new test1(this.name, this.age, this.sex);
            }
    
            public String toString() {
                return "test1.test1Builder(name=" + this.name + ", age=" + this.age + ", sex=" + this.sex + ")";
            }
        }
    }
    

    总结:lombok注解使用起来会很方便,可以多去了解不同注解的作用。
    另贴一些相关的博客:
    lombok 安装使用及一些注解功能:
    https://blog.csdn.net/motui/article/details/79012846
    java Builder:
    http://www.cnblogs.com/moonz-wu/archive/2011/01/11/1932473.html
    https://www.cnblogs.com/begin1949/p/4930896.html

    展开全文
  • 下面是一篇关于@Data详细介绍的文章: http://yayihouse.com/yayishuwu/chapter/2226

    下面是一篇关于@Data详细介绍的文章:
    http://yayihouse.com/yayishuwu/chapter/2226

    展开全文
  • 问题描述mybatisPlus同时使用@Builder和@Data报错 mybatisPlus版本3.2.0 lombok版本 1.18.10 问题复现:同时使用@Builder和@Data @Builder @Data 实体类 @Builder @Data @EqualsAndHashCode(callSuper = false) @...

    lombok同时使用@Builder和@Data报错

    mybatisPlus版本3.2.0

    lombok版本 1.18.10

    问题复现:同时使用@Builder和@Data

    @Builder
    @Data
    

    实体类

    @Builder
    @Data
    @EqualsAndHashCode(callSuper = false)
    @Accessors(chain = true)
    @TableName("COLUMNS")
    public class Column {
    
        /**
         * TABLE_CATALOG 表限定符
         * MySQL官方文档中说,这个字段值永远是def,但没写这个字段是干嘛用的。
         */
        @MdTableInfo(name = "表限定符")
        private String tableCatalog;
    
        /**
         * TABLE_SCHEMA 表所有者,就是属于哪个库
         */
        @MdTableInfo(name = "数据库名称")
        private String tableSchema;
    
        /**
         * TABLE_NAME 表名
         */
        @MdTableInfo(name = "表名")
        private String tableName;
    
        /**
         * COLUMN_NAME 列名
         */
        @MdTableInfo(name = "字段名")
        private String columnName;
    
        /**
         * ORDINAL_POSITION 应该是该列在该表中的顺序
         */
        @MdTableInfo(name = "字段序号")
        private Long ordinalPosition;
    }
    

    测试

     	@Test
        void test3() throws IOException {
            List<Column> columns = columnMapper.selectList(null);
            System.out.println(columns);
        }
    
    

    报错信息

    org.springframework.dao.DataIntegrityViolationException: Error attempting to get column 'data_type' from result set.  Cause: java.sql.SQLDataException: Cannot determine value type from string 'varchar'
    ; Cannot determine value type from string 'varchar'; nested exception is java.sql.SQLDataException: Cannot determine value type from string 'varchar'
    
    

    原因分析,在同时使用@Builder和@Data的时候实体类只有一个全参构造,mybatis在拿到结果resultSet之后进行映射使用全参构造,但是查询的sql却和字段的顺序不一致,全参构造和字段顺序不一致(说明1)这样会导致参数类型匹配错误,导致报错。

    解决办法:

    • 两个用一个就行 ,个人感觉实体类用builder模式不好

    • 加上无参构造,并且在无参构造之上加上注解 @Tolerate ,不加的话编辑器不通过

    • 降低版本,亲测1.16.22版本可以用(说明2

    说明1:jdk自带的反射明确说明反射获取字段的顺序不保证是按照代码编写的顺序,但是本人多次测试,jdk8和jdk11通过反射可以正确的获取反射的字段顺序,mybatisPlus拼接的sql代码我还没看,但是其结果和字段顺序不一致,特别说明,反射获取的方法顺序是乱的

    说明2:lombok版本1.16.22可以用的原因在于,通过javap查看class文件发现其中有了两个init方法,表名其有两个构造函数,一个是private的无参,这时就算编辑器不通过,你还是可以在本类里面进行new的

    本文为作者原创,转载请申明

    展开全文
  • @Data @Setter @Getter 注解失效问题

    千次阅读 2019-05-08 11:42:32
    @Data @Setter @Getter 注解失效问题 今天换了台新电脑,重新安装了idea后,导入项目发现lombok的@Data注解都不生效了,最后发现是idea 还需要下载lombok插件。settings-plugins 下载即可 ...
  • lombok @Data @Accessors

    2020-11-19 23:18:13
    @Accessors(fluent = true) 生产的 Get Set 不会使用驼峰方式命名 并且不会有get set ... import lombok.Data; import lombok.experimental.Accessors; /** * @Accessors(fluent = true) 生产的 Get Set ...@Data publi
  • @AllArgsConstructor @NoArgsConstructor @Data 但是发现我的代码中一直都有问题,定义的三个变量也一直都有警告,并且查看Outline,这三个注解对于的方法没有生成, 于是我就觉得有问题,在网上找了一下原因...
  • Lombok之@Data使用

    2019-10-16 09:21:25
    为什么要用@Data?二. @Data如何使用?三. @Data源码四. 特别说明 一. 为什么要用@Data? 二. @Data如何使用? 三. @Data源码 四. 特别说明 本文已经收录在Lombok注解系列文章总览中,并继承上文中所提的特别说明。 ...
  • @Data和@NoArgsConstructor的用处

    千次阅读 2020-03-15 13:05:12
    两者都属于类上注解 @Data: 加了@Data注解的类,编译后会自动加上下列方法: 所有属性的get和set方法 toString 方法 hashCode方法 equals方法 @ NoArgsConstructor: 生成一个无参的构造方法 ...
  • import lombok.Data; import lombok.AllArgsConstructor; import lombok.NoArgsConstructor;...@Data @NoArgsConstructor @AllArgsConstructor public class User{ ... } @NoArgsConstructor和@AllArgsConstruto...
  • 05. 《Lombok 实战 —— @Data & @Value》

    千次阅读 2019-01-23 11:00:30
    @Data1.1 @Data 实战使用1.2 @Data 注解配置详解1.3 @Data 使用注意事项1.4 @Data 全局配置2. @Value2.1 @Value 实战使用2.2 @Value 注解详解2.3 @Value 全局配置参考文档 《道空 Lombok 实战 —— @Data &amp;...
  • Springboot @Data注解

    2019-12-03 11:32:30
    @Data 注解 @Data 注解在类上,提供类所有属性的 getting 和 setting 方法,此外还提供了equals、canEqual、hashCode、toString 方法 使用教程如下: 下载 Lombok 插件 File --> Setting --> Plugins 导入...
  • 记录使用lombok注解中@Data@AllArgsConstructor@NoArgsConstructor@Builder的含义 @Data 加了这个注解后,就无需再去手写Getter,Setter,equals,canEqual,hasCode,toString等方法了,注解后在编译时会自动加进去。 @...
  • Lombok的@Data踩坑记录

    2021-01-23 22:31:37
    Lombok的@Data踩坑记录 前言 面试问你@Data注解的作用,一般人回答就是生成get/set/toString 真是这样吗? 其实不然,其实@Data注解作用是 1.get/set 2.toString 3.hashcode and equals @Data会自动生成hashcode和...
  • Java Lombok @Data @Builder

    万次阅读 多人点赞 2016-12-04 20:56:43
    常用的 lombok 注解@EqualsAndHashCode:实现...@Data :注解在类上;提供类所有属性的 getting 和 setting 方法,此外还提供了equals、canEqual、hashCode、toString 方法 @Setter:注解在属性上;为属性提供 settin
  • @Data注解的使用

    千次阅读 2019-05-01 11:34:45
    springboot @data注解的使用 在实体类的编写过程中,常常需要应用大量的get、set方法,需要写大量的重复代码,即有的工具有自动生成功能,当时也会使实体类中产生大量冗余代码,使得代码变,springboot为我们提供了...
  • Lombok中关于@Data的坑

    2020-12-12 15:02:54
    目录@Data内部实现内部实现总结 @Data内部实现 注:这里使用的是org.projectlombok.lombok-1.18.16 定义一个类Father @Data public class Father { String f_name; } 定义一个类Son @Data public class Son ...
  • lombok@Data和@Builder冲突

    2020-10-13 21:00:19
    报错:Unsupported conversion from TIMESTAMP to java.lang.Integer与@Builder @Data之间的冲突问题:原因:解决@Tolerate场景 问题: 字段创建时间: 数据库:datetime类型 实体:Date类型 mapper:TimeStamp类型 ...
  • 练习SpringMVC boot 框架的时候,用到lombok.jar里@Data @NoArgsConstructor @AllArgsConstructor三个注解的时候,eclipse使用方法报错, 如:getter和setter方法,具体解决方法如下: 1.在eclipse安装目录下...
  • lombok的@Data与@Value注解额

    千次阅读 2019-02-22 19:48:37
    @Data测试类: package lombok; @Data public class TestData { private String name1; private Integer id; } @Data注解作用: 1)生成无参构造方法; 2)属性的set/get方法; 3)equals(), hashCode(), ...
  • @Data的坑

    2020-03-18 11:10:16
    @Data注解中包括了@EqualsAndHashCode注解,该注解重写了equals()和hashcode()方法,两个对象的判断不再根据地址而是根据内容,可能导致问题:内容相同的两个对象放在一个set中,其中一个会被覆盖 解决方式: 1.用@...
  • lombok插件之@Data注解

    千次阅读 2020-09-07 14:32:01
    @Data注解为lombok插件中常用的一个注解,此注解在实体类上,自动提供类所有属性的get和set方法。 同时还提供equals,hashCode,toString等方法.使用起来极大的减少了代码量. 1:使用@Data注解的代码 @Data public ...
  • Lombok @Data ,@Setter ,@Getter

    万次阅读 2019-01-16 14:06:20
    lombok 提供的注解不多,可以参考官方视频的讲解和官方文档。 Lombok 注解在线帮助文档:...下面介绍几个我常用的 lombok 注解: @Data:注解在类上;提供类所有属性的 getting 和 setting 方法...
  • 今天和小伙伴讨论一个mybatis-plus的一个诡异问题,最后定位到原因竟然是lombok@Data和@Builder一起用无法添加无参构造方法引起的,非常隐蔽。 很多框架都是同反射等调用无参数构造方法来创建实例的,需要注意。 ...
  • lambok@Builder和@Data不能共用

    千次阅读 2019-08-18 16:34:24
    由于添加@Builder会将@Data让类缺失无参构造器,加上即可。 @Tolerate public OrderExtendEntity(){}
  • Lombok的@Data、@Setter、@Getter注解没反应问题解决
  • @Data注解如何使用

    千次阅读 2019-02-27 13:39:50
    这个注解来自于 lombok,lombok 能够减少大量的模板代码,减少了在使用@Data 注解时, 需要导入lombok.Data lombok提供的注解: 例:配置maven依赖,导入lombok@Data注解,减少了getter,toString等代码 ...
  • TestNG中@Factory与@DataProvider的功能大相径庭,但是在多次执行的问题上常常理不清。 1.@DataProvider 首先,必须明确,使用@DataProvider修饰的方法,只负责提供测试数据,而且是测试执行前就确定了的静态数据...
  • @Data 注解

    千次阅读 2019-04-11 18:08:20
    @Data : 注解在类上, 为类提供读写属性(提供get/set方法), 此外还提供了 equals()、hashCode()、toString() 方法 添加lombok依赖 <dependency> <groupId>org.projectlombok</groupId> <...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 72,625
精华内容 29,050
热门标签
关键字:

@data