码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • BeanUtils.copyProperties的用法


    常见场景

    我们如果有两个具有很多相同属性名的JavaBean对象a和b,想把a中的属性赋值到b,例如

    • 接口中将接收到的前端请求参数XxxReqVo,我们想把这个入参转化为XxxQuery对象作为数据库的查询条件对象

    传统做法是手动set,即

    1. XxxQuery xxxQuery = new XxxQuery();
    2. xxxQuery .setAxx(xxxReqVo.getAxx());
    3. xxxQuery .setBxx(xxxReqVo.getBxx());
    4. xxxQuery .setCxx(xxxReqVo.getCxx());

    如果有几十个需要赋值的的字段呢?那就很头疼了

    org.springframework.beans.BeanUtils,它提供了对java反射和自省API的包装。它里面还有很多工具类,这里我们介绍一下该类下面的copyProperties方法,该工具方法可以帮我们大大简化这一步

    1. @Data
    2. public class User {
    3. private String id;
    4. private String name;
    5. private String age;
    6. private String account;
    7. private String password;
    8. }
    1. @Data
    2. public class Person {
    3. private String id;
    4. private String name;
    5. private String age;
    6. private String sex;
    7. }
    1. public class Test {
    2. public static void main(String[] args) {
    3. User user = new User();
    4. user.setId("1");
    5. user.setAge("2");
    6. user.setName("wzh");
    7. user.setAccount("wangzh");
    8. user.setPassword("1111");
    9. Person person = new Person();
    10. BeanUtils.copyProperties(user,person);
    11. }
    12. }

    结果

    Person(id=1, name=wzh, age=2, sex=null)
    

    通过上述测试我们就可以总结出相关结论,基本用法为

    BeanUtils.copyProperties(source,target);
    

    相当于把源对象source的属性值赋给目标对象target中与源对象source的中有着同属性名的属性,如上述案例中Person作为目标对象与源对象User中有着共同的同名属性id,name,age,所以person中的这三个字段被赋值成功,赋值的数据来源正是user对象,sex这个字段是Person类所特有的,所以不会被赋值,同时还要特别注意赋值操作相关类的属性一定要有对应的setter/getter,即

    • 源对象source的属性拷贝值赋给目标对象target的过程中,属性名和属性类型都相同的属性才能被成功拷贝赋值,例如id,name,age这三个目标对象的属性被赋值成功,目标对象中的sex属性,由于源对象中没有同名的属性所以没法被赋值成功。

    • 做赋值的属性一定要有对应的setter/getter才能成功赋值

  • 相关阅读:
    推荐一款性价比高、功能完善的资产管理系统
    【如何学习CAN总线测试】——CAN物理层测试
    操作系统—进程间通信方式
    基于Java的高校竞赛管理系统设计与实现(亮点:发起比赛、报名、审核、评委打分、获奖排名,可随意更换主题如蓝桥杯、ACM、王者荣耀、吃鸡等竞赛)
    被忽视的数据中心非业务网络规划
    面经-框架-事务失效的几种场景
    【ffmpeg】视频解码器
    强大的Perl正则表达式实例详解
    unity学习笔记-assetbundle
    [随笔] 具有产品意识的工程师
  • 原文地址:https://blog.csdn.net/weixin_46039745/article/details/134086018
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号