精华内容
下载资源
问答
  • 1.2.支持lombok的@Accessors(chain = true) 2.1.首先这是3.1.0 目前的最新版 不支持java8 所以我拓展了一部分 如果有需要请留言继续拓展 之后发email发您 2.2然后支持lombok的@Accessors(chain = true) 如果未...
  • @Accessorschain = true)注解的作用

    千次阅读 2021-07-26 20:12:09
    @Accessorschain = true】注解的作用1.@Accessors(chain = true)注解 1.@Accessors(chain = true)注解 在我们平时写代码的时候,用到@Getter,@Setter 以及@ToString注解便够了,那么这个@Accessors(chain = true)...

    @Accessors【chain = true】注解的作用

    1.@Accessors(chain = true)注解

    在我们平时写代码的时候,用到@Getter,@Setter 以及@ToString注解便够了,那么这个@Accessors(chain = true)注解是用来干嘛的?

    这个注解是来自与Lombok里的,具体的作用是开启链式编程,让我们写代码更加方便。

    展开全文
  • EasyExcelEasyExcel是一个基于Java的简单、省内存的... github地址: https://github.com/alibaba/easyexcelAccessors@Accessors 注解用来配置lombok如何产生和显示getters和setters的方法。public @interface Acce...

    EasyExcel

    EasyExcel是一个基于Java的简单、省内存的读写Excel的开源项目。在尽可能节约内存的情况下支持读写百M的Excel. github地址: https://github.com/alibaba/easyexcel

    Accessors

    @Accessors 注解用来配置lombok如何产生和显示getters和setters的方法。

    public @interface Accessors { /**

    * 如果为true,则访问器将以该字段命名,并且不包含 get 或 set *前缀,且省略了chain,则 chain 默认为true。

    * *默认值:false

    */ boolean fluent() default false; /**

    * *如果为true,setter将返回this而不是void。

    * *默认:false

    */ boolean chain() default false; String[] prefix() default {}; }

    测试案例

    pom.xml

    org.projectlomboklomboktruecom.alibabaeasyexcel2.2.6

    Student.java

    @Data @Accessors(chain = true) public class Student { @ExcelProperty("编码") private Long id; @ExcelProperty("姓名") private String name; @ExcelProperty("性别") private String sex; @ExcelProperty("年龄") private Integer age; }

    StudentControllerTest.java

    public class StudentControllerTest { /**

    * 导出Excel上传模板

    */ @Test public void importTemplate() { String filePath = "D:/student.xlsx"; EasyExcel.write(filePath, Student.class).sheet("student").doWrite(null); } /**

    * 导入Excel数据

    */ @Test public void importExcel() { String filePath = "D:/student.xlsx"; List list = EasyExcel.read(filePath, Student.class, null).sheet("student").doReadSync(); for (Object obj : list) { System.out.println(obj.toString()); } } }

    student.xlsx 数据

    执行 importExcel 导入Excel 结果: 可以看到, 导入数据条数能解析, 但数据没有读取成功

    原因详解

    通过删减无关代码的方法, 发现当删减 @Accessors(chain = true)或修改为 @Accessors(chain = false)后, 能够正常读取到了, 定位到是该注解的影响, 为什么会影响呢? 带着这个疑问我们继续往下看

    EasyExcel 解析Excel 过程

    ModelBuildEventListener

    private Object buildUserModel(Map cellDataMap, ReadHolder currentReadHolder, AnalysisContext context) { ExcelReadHeadProperty excelReadHeadProperty = currentReadHolder.excelReadHeadProperty(); Object resultModel; try { resultModel = excelReadHeadProperty.getHeadClazz().newInstance(); } catch (Exception e) { throw new ExcelDataConvertException(context.readRowHolder().getRowIndex(), 0, new CellData(CellDataTypeEnum.EMPTY), null, "Can not instance class: " + excelReadHeadProperty.getHeadClazz().getName(), e); } Map headMap = excelReadHeadProperty.getHeadMap(); Map map = new HashMap(headMap.size() * 4 / 3 + 1); Map contentPropertyMap = excelReadHeadProperty.getContentPropertyMap(); for (Map.Entry entry : headMap.entrySet()) { Integer index = entry.getKey(); if (!cellDataMap.containsKey(index)) { continue; } CellData cellData = cellDataMap.get(index); if (cellData.getType() == CellDataTypeEnum.EMPTY) { continue; } ExcelContentProperty excelContentProperty = contentPropertyMap.get(index); Object value = ConverterUtils.convertToJavaObject(cellData, excelContentProperty.getField(), excelContentProperty, currentReadHolder.converterMap(), currentReadHolder.globalConfiguration(), context.readRowHolder().getRowIndex(), index); if (value != null) { map.put(excelContentProperty.getField().getName(), value); } } BeanMap.create(resultModel).putAll(map); return resultModel; }

    当Excel每行数据解析后, 会调用 buildStringList 将解析到的数据由Map转存到Bean中, 关键代码如下:

    BeanMap.create(resultModel).putAll(map);

    可见, EasyExcel是使用 net.sf.cglib.beans.BeanMap 工具类拷贝的, 这正是造成 使用@Accessors(chain = true)后, EasyExcel解析不到数据的原因所在.

    为什么使用了@Accessors(chain = true)后, BeanMap会拷贝不成功呢?

    @Accessors(chain = true) 的作用

    使set方法返回的不是void, 而是当前对象, 例如:

    // 不加 @Accessors(chain = true) 时 @Data public class Student { private String name; } // 相当于 public class Student { private String name; public String getName() { return this.name; } public void setName(String name) { this.name = name; } } // 加了 @Accessors(chain = true) 时 @Data @Accessors(chain = true) public class Student { private String name; } // 相当于, 添加的好处: 可以支持 new Student().setName("zhang").setXXX("xxx").setXXXX("XXX")这样的操作 public class Student { private String name; public String getName() { return this.name; } public Student setName(String name) { this.name = name; return this; } }

    BeanMap 从Map拷贝到Bean的测试

    参考: 使用CGlib实现Bean拷贝(BeanCopier)

    可见, 需要使用BeanMap从Map拷贝到Bean, 需要Map 的Key与Bean的变量名一致, 并有对应的 set方法, 且set方法为 void, 才能拷贝成功

    已经找到了原因, 如何解决呢? 到GitHub里看了看, 作者表示现在还没法解决, 小编只能暂时不用 @Accessors(chain = true), 还是提醒广大网友, 在使用MybatisPlus生成代码时,一定要注意是否带有@Accessors(chain = true)注解,如果带有,会影响EasyExcel读取数据哦

    本文地址:https://blog.csdn.net/qq_28036249/article/details/108035369

    如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

    展开全文
  • 注解@Accessors(chain= true)的作用 在我们平时写代码的时候,一般实体类上会加@lombok注解代替@Getter,@Setter注解或者代替set,get方法,以及@ToString等注解即可,来显得代码简洁,那么这个@Accessors(chain=...

    注解@Accessors(chain= true)的作用

            在我们平时写代码的时候,一般实体类上会加@lombok注解代替@Getter,@Setter注解或者代替set,get方法,以及@ToString等注解即可,来显得代码简洁,那么这个@Accessors(chain=true)注解是干嘛的呢?

            其实这个注解是来自Lombok里面的,具体的作用是开启链式编程,让我们写代码更加方便。 

    展开全文
  • @Accessors(chain = true)

    2021-11-04 14:04:11
    @Accessors(chain = true) 注解是lombok里面的 只需要在实体类加上就可以开启链式编程

    @Accessors(chain = true)

    注解是lombok里面的 只需要在实体类加上就可以开启链式编程

     

    展开全文
  • EasyExcel与@Accessors(chain = true)不兼容分析_qq_28036249的博客-CSDN博客 总结: EasyExcel是使用net.sf.cglib.beans.BeanMap工具类拷贝的, 该工具类的set方法为void,而@Accessors(chain = true)的set方法返回...
  • @Accessors(chain=true)

    千次阅读 2021-05-10 17:59:48
    这样就可以用链式访问,该注解设置为chain=true,生成setter方法返回this(也就是返回的是对象),代替了默认的返回...@Accessors(chain=true) public class User { private Integer userId; private String name;
  • @Accessors 注解用来配置lombok如何产生和显示get和set的方法,@Accessors(chain = true)加上参数以后就可以开启链式编程. 传统set方法赋值(臃肿、占空间) Person person = new Person(); person.setName("wang")...
  • @Accessors(chain = true) 这个注解是来至于lombok里面的 只需要在实体类加上就可以开启链式编程了 跳转:什么是链式链接
  • 链式写法: Dept dept = new Dept(); dept.setDeptNo(11).setDname('ssss').setDb_source('001'); 使用方法: @Data ...在实体类上面使用注解@Accessors(chain = true),就可以实现链式写法了 ...
  • @Accessors(chain = true)开启链式编程

    万次阅读 2020-10-20 17:53:16
    @Accessors(chain = true) 这个注解是来至于lombok里面的 只需要在实体类加上就可以开启链式编程了 什么叫链式编程以及好处:链式编程
  • Lombok也许好多人都用过@Data注解,就不用写Getter,...@Accessors(chain = true) //链式set @RequiredArgsConstructor(staticName = "of") 生成有参数的构造 和@NonNull一起 ------------------------------ ...
  • 子类继承父类都加了@Accessors注解,实例化对象是子类,不可以用链式编程写法; 父类: 子类: 错误链式编程写法: √正确写法 算是一个坑
  • 1.@Accessors(chain = true)注解的含义 公司原来的实体类上有lombok的@Accessors(chain = true)注解 网上百度了一下这个注解,改注解会将我们的setter方法的返回值进行修改,我将这个编译后的class类反编译一下...
  • @Accessors(chain = true)注解 解决报错

    千次阅读 2020-03-25 23:36:32
    上述报错的解决方法如下: 在定义的实体类上加上注解:@Accessors(chain = true) 实体类代码如下: @Data @Accessors(chain = true) public static class RefundOrderItem implements Serializable { /** * 商品...
  • 在使用Lombok 的时候,@Data这个注解很常用,有些时候在使用Accessors(chain = true)这个注解后会发现文件赋值不能使用,BeanCopier 和PropertyUtils.copyProperties这个俩都不能使用,可以使用org.springframework....
  • 工作问题记录:使用Lombok的@Accessors(chain = true)注解后BeanCopier后值为null问题 1 问题描述 项目中使用的MybatisPlus插件的代码自动生成功能,生成的实体类自动标记@Accessors(chain = true)注解,使用原来...
  • 解决加了Lombok的@Accessors(chain=true)后无法使用cglib的beanCopier拷贝复制bean的问题 查看beancopier的源码,发现无法获取包含返回值不为void的set方法. 所以修改beancopier的源码: 加入了set方法的获取 改变了...
  • 前言时光小说网 wap.youxs.org 这次新建了一个工程,因为 Lombok 用得很习惯,但以前的...那这个Accessors(chain = true)注解是干嘛的呢? 用了这个注解后,生成的set方法是这样的: #加了Accessors(chain = true) ...
  • 1、问题:前些日子公司线上服务保存数据异常。问题复现代码如下: @Data @AllArgsConstructor public class OrderDTO { private Integer orderId;...@Accessors(chain = true) public class Ord...
  • 去掉这个注解就行了 应该是 mybatis 会调用实体类的 getter setter 方法, 返回值可能会有所影响 转载于:https://www.cnblogs.com/virgosnail/p/11003336.html
  • 今天在开发中因为父类新增了一个@Accessor(chain=true) 但是子类没有使用, 导致原本可以编译通过的老代码 现在编译错误, 提示“子类 不能覆盖 父类的 *** 字段”. 查了一下 原因是: 编译之后的set方法 默认为 返回...
  • (二)、@Builder流程分析三、@Accessors(一)、@Accessors流程分析(二)、@Accessors其他字段使用四、项目收获杂谈总结 前言 之前项目有用过@Accessors这个注解,但是没有很好实际的感触到这个注解的好处。前段...
  • 在讨论@Builder和@Accessors之前,需要了解下为什么要使用这两者: 当我们想方便的将其进行实例化和赋值,往往会调用其构造方法来创建对象。 但一个POJO有很多参数的时候,我们想灵活的为其赋值,往往需要调用其set...
  • @Accessors @Builder用法

    千次阅读 2019-10-14 22:23:02
    @Accessors 翻译是存取器。通过该注解可以控制getter和setter方法的形式。...fluent 若为true,则getter和setter方法的方法名都是属性名,且setter方法返回当前对象。 @Data @Accessors(fluent =...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,933
精华内容 3,573
关键字:

@accessors(chain=true)

友情链接: snake.zip