Hutool工具包中 BeanUtil中主要方法 beanToMap ,toBean,copyProperties,fillBeanWithMap 的使用

1 准备工作

<dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.8.5</version>
            <scope>compile</scope>
</dependency>
@Data
public class User {
    private String userId;
    private String userName;
    private int age;
}

2 beanToMap 使用,bean转成map

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import java.util.HashMap;
import java.util.Map;


public class Test_2 {

    public static void main(String[] args) {

        // 创建用户对象
        User user = new User();
        user.setUserName("Tom");
        user.setAge(25);

        // 最简单的bean转map,忽略null值
        Map<String, Object> map_1 = BeanUtil.beanToMap(user);
        System.out.println("map_1 = " + map_1);
        System.out.println();

        // isToUnderlineCase 表示是否将字段名转换为下划线命名法,ignoreNullValue 表示是否忽略null值
        Map<String, Object> map_2 = BeanUtil.beanToMap(user, true, true);
        System.out.println("map_2 = " + map_2);
        System.out.println();

        // 自定义key编辑器,将key转为全小写并添加长度后缀
        Map<String, Object> map_3 = BeanUtil.beanToMap(user, new HashMap<>(), true, key -> key.toLowerCase() + "_" + key.length());
        System.out.println("map_3 = " + map_3);
        System.out.println();

        // targetMap:表示要添加到的map,也就是可以自己传输一个map。
        //          然后再将封装后的map键值对一一封装到里面返回。
        // 将user对象的属性映射到targetMap中,同时应用上述转换和null值忽略规则
        Map<String, Object> targetMap = new HashMap<>();
        targetMap.put("address","china");
        Map<String, Object> map_4 = BeanUtil.beanToMap(user, targetMap, true, false);
        System.out.println("map_4 = " + map_4);
        System.out.println();

        // copyOptions:通过这个参数可以自定义任何转换规则,如“忽略某字段”、“设置editor等”
        CopyOptions copyOptions = CopyOptions.create().setIgnoreProperties("age").setFieldNameEditor(key-> key.toUpperCase());
        Map<String, Object> map_5 = BeanUtil.beanToMap(user, new HashMap<>(), copyOptions);
        System.out.println("map_5 = " + map_5);
        System.out.println();
    }

}

效果如下

map_1 = {userId=null, userName=Tom, age=25}

map_2 = {user_name=Tom, age=25}

map_3 = {age_3=25, username_8=Tom}

map_4 = {address=china, user_id=null, user_name=Tom, age=25}

map_5 = {USERID=null, USERNAME=Tom}


2 toBean,将map转成bean

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import java.util.HashMap;
import java.util.Map;

public class Test_3 {
    public static void main(String[] args) {

        // 创建一个Map对象,包含User对象的部分属性
        Map<String, Object> map = new HashMap<>();
        map.put("userName", "Jerry");
        map.put("userId",1);
        map.put("age", 50);

        // 使用默认方式将map转换为User对象,键必须与User类属性名一致
        User userDefault = BeanUtil.toBean(map, User.class);
        System.out.println("userDefault = " + userDefault);
        System.out.println();

        // 使用CopyOptions自定义转换规则
        CopyOptions options = CopyOptions.create();
        options.setIgnoreProperties("age");
        User userCustom = BeanUtil.toBean(map, User.class, options);
        System.out.println("userCustom = " + userCustom);
    }
}

效果如下

userDefault = User(userId=1, userName=Jerry, age=50)

userCustom = User(userId=1, userName=Jerry, age=0)


3 copyProperties ,拷贝属性

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;

public class Test_4 {
    public static void main(String[] args) {

        // 创建源对象
        User source = new User();
        source.setUserId("5");
        source.setUserName("Alice");
        source.setAge(30);

        // 创建目标对象
        User target = new User();

        // 忽略年龄属性的复制
        BeanUtil.copyProperties(source, target, "age");
        System.out.println("target = " + target);

        // 或者使用CopyOptions忽略多个属性
        CopyOptions options = CopyOptions.create().setIgnoreProperties("age", "otherProperty");
        BeanUtil.copyProperties(source, target, options);
        System.out.println("target = " + target);
    }
}

效果如下

target = User(userId=5, userName=Alice, age=0)
target = User(userId=5, userName=Alice, age=0)


4 fillBeanWithMap,根据map填充生成bean

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.bean.copier.CopyOptions;
import java.util.HashMap;
import java.util.Map;

public class Test_5 {
    public static void main(String[] args) {

        // 同样创建一个Map对象和User对象
        Map<String, Object> dataMap = new HashMap<>();
        dataMap.put("userName", "Jane Doe"); // 键与User类属性名不完全匹配
        dataMap.put("age", 25);
        dataMap.put("userId","10");

        User user = BeanUtil.fillBeanWithMap(dataMap, new User(), false);
        System.out.println("user = " + user);
        System.out.println();

        // 创建一个CopyOptions实例以忽略'age'属性,并自定义键映射
        CopyOptions options = CopyOptions.create()
                .setIgnoreProperties("age");

        // 使用带有CopyOptions的fillBeanWithMap方法填充User对象
        User user1 = BeanUtil.fillBeanWithMap(dataMap, new User(), options);
        System.out.println("user1 = " + user1);
    }
}

效果如下

user = User(userId=10, userName=Jane Doe, age=25)

user1 = User(userId=10, userName=Jane Doe, age=0)

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值