java Lombok之@Accessors用法及说明

 更新时间:2023年03月13日 15:43:19   作者:ouseika  
这篇文章主要介绍了java Lombok之@Accessors用法及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

java Lombok之@Accessors用法

之前用Lombok,只是为了省去写get和set方法,在学习的时候,突然发现,Accessors这个特殊的属性注解竟然还有如此强大的功能,特此为自己的无知记录一下。

fluent属性

fluent:流畅的,流利的意思,设置为true,则getter和setter方法的方法名都是基础属性名,且setter方法返回当前对象。

@Data
@Accessors(fluent = true)
public class User {
    private int id;
    private String name;
}

可以看到,当我们使用get或者set方法的时候,方法名都是基础的属性名称,非常的简洁

chain属性

chain:链式的,设置为true,则setter方法返回当前对象。

@Data
@Accessors(chain = true)
public class User {
    private int id;
    private String name;
}

如上图可以看出,和常规的get和set方法名称一致,不过区别就是set方法返回的是对象名称,更加的直观,适合对象赋值时的连续赋值参数。

prefix属性

prefix:前缀,用于生成getter和setter方法的字段名会忽视指定前缀(遵守驼峰命名)。

@Data
@Accessors(prefix = {"tb","tbn"})
public class User {
    private int tb_id;
    private String tbn_name;
}

可以看出,方法中的get和set方法均过滤了相关的前缀属性,看起来更加的简洁。

Lombok @Data @Accessors注解遇到的坑

碰到个反射的问题,原数据是一个 map,对应数据库表的键值对,此时需要将这个 map 转换成 Entity,所以会用到反射。

用了 Apache BeanUtils,用了 BeanMap 都是不行,无法反射。

如下代码

import com.alibaba.fastjson.JSON;
import lombok.Data;
import lombok.experimental.Accessors;
import org.springframework.cglib.beans.BeanMap;
 
import java.util.HashMap;
import java.util.Map;
 
public class Test {
 
    public static void main(String[] args) {
        Map<String, Object> map = new HashMap<>();
        map.put("id", "111");
        map.put("name", "xxxx");
 
        Model model = new Model();
        BeanMap.create(model).putAll(map);
        System.out.println(JSON.toJSONString(model));
    }
 
    @Data
    @Accessors(chain = true)
    public static class Model {
        private String id;
        private String name;
    }
}

此时你会发现其实没问题,但是输出结果如下:

{}

此时办法已经试遍了,后来修改 Entity,将 lombok 注解去掉,发现就OK了。此时不用想,肯定是遇到坑了,然后排查之后发现是 @Accessors 的问题,将其去掉就OK了。

如下:

import com.alibaba.fastjson.JSON;
import lombok.Data;
import lombok.experimental.Accessors;
import org.springframework.cglib.beans.BeanMap;
 
import java.util.HashMap;
import java.util.Map;
 
public class Test {
 
    public static void main(String[] args) {
        Map<String, Object> map = new HashMap<>();
        map.put("id", "111");
        map.put("name", "xxxx");
 
        Model model = new Model();
        BeanMap.create(model).putAll(map);
        System.out.println(JSON.toJSONString(model));
    }
 
    @Data
    public static class Model {
        private String id;
        private String name;
    }
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • java如何多线程批量更新10万级的数据

    java如何多线程批量更新10万级的数据

    在处理大数据量的批量更新时,直接使用mybatis的updateBatch可能导致效率低下甚至OOM,通过每次处理5000条数据的方式虽然安全但效率低,更优的解决方案是使用多线程处理,将数据分批并多线程执行,有效提高了处理速度并保证了系统稳定性
    2024-10-10
  • 排查Java应用内存泄漏问题的步骤

    排查Java应用内存泄漏问题的步骤

    这篇文章主要介绍了排查Java应用内存泄漏问题的步骤,帮助大家更好的理解和学习Java,感兴趣的朋友可以了解下
    2020-11-11
  • SpringBoot中集成screw(螺丝钉)实现数据库表结构文档生成方法

    SpringBoot中集成screw(螺丝钉)实现数据库表结构文档生成方法

    这篇文章主要介绍了SpringBoot中集成screw(螺丝钉)实现数据库表结构文档生成,下面以连接mysql数据库并生成html格式的数据库结构文档为例,插件的使用方式除可以使用代码外,还可以使用Maven插件的方式,需要的朋友可以参考下
    2024-07-07
  • 在lambda的foreach遍历中break退出操作(lambda foreach break)

    在lambda的foreach遍历中break退出操作(lambda foreach break)

    这篇文章主要介绍了在lambda的foreach遍历中break退出操作(lambda foreach break),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • 谈谈Java中对象,类和this,super,static关键字的使用

    谈谈Java中对象,类和this,super,static关键字的使用

    对象:对象是类的一个实例,有状态和行为。类:类是一个模板,它描述一类对象的行为和状态。本文就来和大家聊聊Java中对象,类和关键字的使用,需要的可以参考一下
    2022-08-08
  • Java线程中的ThreadLocal详细分析

    Java线程中的ThreadLocal详细分析

    这篇文章主要介绍了Java线程中的ThreadLocal详细分析,ThreadLocal 提供线程的局部变量,每个线程都可以通过 get()和 set()对局部变量进行操作而不会对其他线程的局部变量产生影响,实现了线程之间的数据隔离,需要的朋友可以参考下
    2023-09-09
  • MyBatis Plus构建一个简单的项目的实现

    MyBatis Plus构建一个简单的项目的实现

    这篇文章主要介绍了MyBatis Plus构建一个简单的项目的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-11-11
  • 如何使用Java 8中DateTimeFormatter类型转换日期格式详解

    如何使用Java 8中DateTimeFormatter类型转换日期格式详解

    这篇文章主要介绍了如何使用Java 8中DateTimeFormatter类型转换日期格式详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • C++字符串的处理详解

    C++字符串的处理详解

    这篇文章主要介绍了C++ string字符串类,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-08-08
  • JVM中的守护线程示例详解

    JVM中的守护线程示例详解

    这篇文章主要给大家介绍了关于JVM中守护线程的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-01-01

最新评论