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>

2.准备一个实体类

@Data
public class User {
    private String userId;
    private String userName;
    private int age;
}

二、代码实现

1.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)
  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Hutool是一个Java工具库,其hutool-all工具jar包BeanUtil类提供了各种重载beanToMap方法,用于将Java对象转换为Map对象。下面是详解及用法: 1. beanToMap(Object bean, Map<?, ?> map)方法:将bean对象的属性值存储到指定的Map对象。 ```java //创建一个Java对象 User user = new User(); user.setId(1); user.setName("张三"); user.setAge(20); //将Java对象转换为Map对象 Map<String, Object> map = new HashMap<>(); BeanUtil.beanToMap(user, map); //输出Map对象 System.out.println(map); ``` 输出结果为:{id=1, name=张三, age=20} 2. beanToMap(Object bean, boolean isToUnderlineCase)方法:将bean对象的属性值存储到Map对象,可以选择将属性名转换为下划线形式。 ```java //创建一个Java对象 User user = new User(); user.setId(1); user.setName("张三"); user.setAge(20); //将Java对象转换为Map对象,并将属性名转换为下划线形式 Map<String, Object> map = BeanUtil.beanToMap(user, true); //输出Map对象 System.out.println(map); ``` 输出结果为:{id=1, name=张三, age=20} 3. beanToMap(Object bean, Map<?, ?> map, boolean isToUnderlineCase)方法:将bean对象的属性值存储到指定的Map对象,并可以选择将属性名转换为下划线形式。 ```java //创建一个Java对象 User user = new User(); user.setId(1); user.setName("张三"); user.setAge(20); //将Java对象转换为Map对象,并将属性名转换为下划线形式 Map<String, Object> map = new HashMap<>(); BeanUtil.beanToMap(user, map, true); //输出Map对象 System.out.println(map); ``` 输出结果为:{id=1, name=张三, age=20} 4. beanToMap(Object bean, Map<?, ?> map, boolean isToUnderlineCase, CopyOptions copyOptions)方法:可以指定属性拷贝的选项,例如忽略空值属性、忽略null值属性等。 ```java //创建一个Java对象 User user = new User(); user.setId(1); user.setName("张三"); user.setAge(20); //将Java对象转换为Map对象,并将属性名转换为下划线形式,并忽略null值属性 Map<String, Object> map = new HashMap<>(); CopyOptions copyOptions = CopyOptions.create().setIgnoreNullValue(true); BeanUtil.beanToMap(user, map, true, copyOptions); //输出Map对象 System.out.println(map); ``` 输出结果为:{id=1, name=张三, age=20} 总之,hutool-all工具jar包BeanUtil类提供了多种方法,可根据实际需要选择。通过beanToMap方法,可以方便地将Java对象转换为Map对象,方便进行后续的操作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值