java中beanutils_java bean

java中beanutils_java beanBeanUtils<!–原型设计模式:复制属性–> Maven包<dependency><groupId>commons-beanutils</groupId><artifactId>commons-beanutils</artifactId><version>1.9.3</version>

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

BeanUtils

<!--        原型设计模式:复制属性-->
	Maven<dependency>
            <groupId>commons-beanutils</groupId>
            <artifactId>commons-beanutils</artifactId>
            <version>1.9.3</version>
        </dependency>

copyProperties方法 A和重B合的属性 可以进行copy

User user = new User(1,"a","b",1.1,10);
User1 user1 = new User1();
BeanUtils.copyProperties(user1,user);
System.out.println(user1);

使用getParameterMap方法 接收接送前台传输的字段和值 parametermap方法可以把所以的字段值放入对象里面,

但对象的属性必须要有前台传输过来的字段值

比如:页面传入后台的数据有 username,pwd,id

用于接收的user对象里面的属性必须要有username,pwd,id这三个属性才可以接收

Map<String, String[]> parameterMap = req.getParameterMap();
User1 user = new User1();
BeanUtils.populate(user,parameterMap);
System.out.println(user);

BeanCopier

<!-- https://mvnrepository.com/artifact/cglib/cglib -->
        <dependency>
            <groupId>cglib</groupId>
            <artifactId>cglib</artifactId>
            <version>3.3.0</version>
        </dependency>

例子:https://blog.csdn.net/lan12334321234/article/details/70048786

		//在beancopier存入 被copy的类型 和 copy的类型
        BeanCopier beanCopier = BeanCopier.create(User.class, UserDemo.class, false);
        User user = new User();
        user.setId(1);
        user.setName("zhangsan");
        user.setAge(22);

        UserDemo userDemo = new UserDemo();
        //第一个参数代表 被copy的对象 第二个参数代表copy的对象 
        beanCopier.copy(user,userDemo,null);
        System.out.println(userDemo);

第三个参数useConverter,是否开启Convert。 默认BeanCopier只会做同名,同类型属性的copier,否则就会报错。如果类型需要转换比如Date转换成String则自定义Convert类实现Convert接口。

BeancopierUtil 工具类

import net.sf.cglib.beans.BeanCopier;

import java.util.HashMap;
import java.util.Map;

public class BeancopierUtils { 
   
    //构造方法私有化
    private BeancopierUtils() { 
   }

    //为了提高效率 每一个copy出来的对象我们都存在map集合里面 下次需要相同的就直接拿 不需要再次创建
    //缓存
    private static Map<String, BeanCopier> copierMap = new HashMap<>();

    /** * 把source的属性拷贝到 target * @param source * @param target */
    public static void copy(Object source,Object target){ 
   
        //为每一个不同的copy对象创建一个编号
        //方便判断map集合里是否相同的对象
        String key = source.getClass().toString() + target.getClass().toString();
        //判断集合中是否存在相同对象
        BeanCopier beanCopier = null;
        if(!copierMap.containsKey(key)){ 
   
            synchronized (BeancopierUtils.class){ 
   
                if(!copierMap.containsKey(key)){ 
   
                    //当不存在的时候就创建新的
                    beanCopier = BeanCopier.create(source.getClass(), target.getClass(), false);
                    //把新创建的对象存入map
                    copierMap.put(key,beanCopier);
                }
            }
        }
        beanCopier = copierMap.get(key);
        //获取到对象以后就进行copy
        beanCopier.copy(source,target,null);
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/197162.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 分苹果算法「建议收藏」

    分苹果算法「建议收藏」题目内容:把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?M,N为自然数。说明:如有7个苹果,2个盘子,则(5,1,1)和(1,5,1)和(1,1,5)都是同一种分法。输入描述第一行一个整数表示数据的组数(多组数据),对于每组数据第一行是苹果个数M(1≤m≤100),第二行是盘子个数N(1≤n≤

    2022年10月12日
    3
  • 启动、关闭ubuntu Linux防火墙

    启动、关闭ubuntu Linux防火墙由于 LInux 原始的防火墙工具 iptables 过于繁琐 所以 ubuntu 默认提供了一个基于 iptable 之上的防火墙工具 ufw sudoufwstatu 检查防火墙的状态 sudoufwversi 防火墙版本 ubuntu 系统默认已安装 ufw 2 启用运行以上两条命令后 防火墙在系统启动时自动开启 关闭所有外部对本机的访问 但本机访问外部正常打开或关闭某个端口 例如 sudoufwallow 允许所有的外部 IP 访问本机的 25 tcp smtp 端口 sudo

    2025年10月27日
    4
  • (转)C# Assembly.Load 使用

    (转)C# Assembly.Load 使用在C#中,我们要使用反射,首先要搞清楚以下命名空间中几个类的关系:在C#中,我们要使用反射,首先要搞清楚以下命名空间中几个类的关系:System.Reflection命名空间(1)AppDoma

    2022年7月1日
    19
  • ES6中set和map「建议收藏」

    ES6中set和map「建议收藏」一。set数据容器能够存储无重复值数据的有序列表1.通过newset()方法创建容器通过add()方法添加2.set.size获取存储的数据的数量例: varset=newSet() set.add(1); set.add(‘1’); console.log(set)console.log(set.size)3.Set内部使用Obj…

    2025年9月27日
    2
  • activity任意节点跳转

    activity任意节点跳转前言在实际业务中,总会碰到一些特殊的需求,比如要实现任意两个审批节点之间的跳转,举例来说,某个审批流程有3级审批,来了这么个需求,一级审批完结之后在满足特定的条件下,可以直接进入到3级审批,即跳过中间的二级审批,所幸activity提供了这样的解决方案本例我们用代码简单演示一下其实现流程1、定义流程文件2、部署与启动流程实例 //部署publicstaticvoidmain(String[]args){ProcessEngineprocessEngine

    2022年5月21日
    42
  • 我的世界服务器作弊指令大全_我的世界服务器称号指令

    我的世界服务器作弊指令大全_我的世界服务器称号指令原标题:我的世界指令代码大全一、我的世界指令代码大全单机指令(部分多人也适用)/gamemode0是生存(极限)模式/gamemode1是创造模式/gamemode2是冒险模式(必须用特定的武器才能消除方块)/gamemode3是生存(极限)模式/give你的名字1371能得到命令方块,在里面输死亡不掉落:/gamerulekeepInventorytrue防爆:/game…

    2022年9月23日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号