Hutool是一个Java工具包,它帮助我们简化每一行代码,避免重复造轮子。如果你有需要用到某些工具方法的时候,不妨在Hutool里面找找,可能就有。本文将对Hutool中的常用工具类和方法进行介绍。

导入的包名

<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.7.17</version>
</dependency>

这里只介绍BeanUtil常用的一些方法。它是JavaBean的工具类,可用于Map与JavaBean对象的互相转换以及对象属性的拷贝

        User user=new User();user.setAge(1);user.setName("红尘");//-----------------------------------------------------Map<String, Object> beanMap = BeanUtil.beanToMap(user);System.out.println("map = " + beanMap);//-----------------------------------------------------User user1 = BeanUtil.toBean(beanMap, User.class);System.out.println("user1 = " + user1);//-----------------------------------------------------User copyUse=new User();BeanUtil.copyProperties(user,copyUse);System.out.println("copyUse = " + copyUse);

beanToMap

beanToMap功能:将对象映射为map

beanToMap有下列几种实现

实现一:

//最简单的一种,直接将bean对象转换为map(若为null则对应的map的value为null)
public static Map beanToMap(Object bean);

实现二:

/*
isToUnderlineCase:对于驼峰的属性名称,其对应的key是否用'_'分割开
ignoreNullValue:对于空的属性值,是否忽略
这两个值默认都为false
*/
public static Map<String, Object> beanToMap(Object bean, boolean isToUnderlineCase, boolean ignoreNullValue)

实现三:

/*
targetMap:表示要添加到的map,也就是可以自己传输一个map。然后再将封装后的map键值对一一封装到里面返回。
*/
public static Map<String, Object> beanToMap(Object bean, Map<String, Object> targetMap,boolean isToUnderlineCase, boolean ignoreNullValue);

实现四:

/*
keyEditor:对key自定义编辑。也就是可以对map中的key进行改变。
是一个接口,要自定义实现类(内部实现类)
*/
public static Map<String, Object> beanToMap(Object bean, Map<String, Object> targetMap,boolean ignoreNullValue, Editor<String> keyEditor);

假设我现在要对原先map中key进行变换为:“原先key变为全小写+原先key长度”

实现五

/*
copyOptions:通过这个参数可以自定义任何转换规则,如“忽略某字段”、“设置editor等”
*/
public static Map<String, Object> beanToMap(Object bean, Map<String, Object> targetMap,CopyOptions copyOptions);  

(1)假设不将user对象中的‘age’属性映射到map,可以这样实现

标题setIgnoreProperties接受的参数可以传输多个“字段名称”

(2)设置editor

toBean

功能:

toBean是将map中的某一些字段转换为user中的某个属性。

注意:我这里说的是某一些,也就是说map可以存在user不存在的键值对,这样注入不会报错的。

实现一:

public static <T> T toBean(Object source, Class<T> clazz);

 这里map中的key一定要跟User中完全相同。比如:user中的属性名称为“userName”,如果写成“UserName”。那么注入就会为null。

实现二:

public static <T> T toBean(Object source, Class<T> clazz, CopyOptions options)

相对于实现一而言,多了一个CopyOptions 类型的参数。这个参数跟beanToMap介绍的差不多,也是对map中的key进行自定义然后转换为user中的属性。

copyProperties

功能:将一个变量属性拷贝到另一个对象上

主要有以下几个实现:

实现一:

/*
source:源变量
targer:目标变量
ignoreProperties:需要忽略的字段名称
*/
public static void copyProperties(Object source, Object target, String... ignoreProperties);

两个不同的类

@Data
@ToString
public class User {private int age;private String userName;
}@Data
@ToString
public class TestUser{private int id;    //比User多的属性private int age;private String userName;
}

 这里跟spring中的BeanUtils不同。 在这里的BeanUtil拷贝对象,source和target各自可以为不同的类,各自的属性字段都可以随意。 但拷贝的时候只会拷贝属性名称相同的属性(上述中TestUser包含了User不存在的id字段,还是可以拷贝的)

它还有的其他实现:

public static void copyProperties(Object source, Object target, boolean ignoreCase);public static void copyProperties(Object source, Object target, CopyOptions copyOptions);

Hutool中的工具类很多,可以参考:Hutool —

hutool包下BeanUtil常用方法相关推荐

  1. Hutool包下使用PinyinUtil获取汉字的拼音报错cn.hutool.extra.pinyin.PinyinException: No pinyin jar found! Please ...

    报错内容: Exception in thread "main" java.lang.RuntimeException: cn.hutool.extra.pinyin.Pinyin ...

  2. 【重难点】【Java基础 06】浅克隆与深克隆、Object类的常用方法、util包下的接口

    [重难点][Java基础 06]浅克隆与深克隆.Object对象的常用方法.util包下的接口 文章目录 [重难点][Java基础 06]浅克隆与深克隆.Object对象的常用方法.util包下的接口 ...

  3. io包下 文件类 字节流 字符流 缓冲流 转换流 序列化流 打印流

    第一章 File类 1.1 概述 java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建.查找和删除等操作. 1.2 构造方法 public File(String pat ...

  4. JAVA中J.U.C 包下并发类的应用

    文章目录 JUC包中的锁应用 Lock接口及ReentrantLock对象分析及应用? Condition接口对象分析与应用? ReadWriteLock接口及实现类分析与应用? StampedLoc ...

  5. 多线程十 JUC包下的常用工具类

    JUC包下的常用工具类 1. CountDownLatch-闭锁 2. CyclicBarrier-循环栅栏 3. Semaphore-信号量 4. Exchanger-线程数据交换器 这篇文章主要是 ...

  6. util包下的Date与sql包下的Date之间的转换

    Java中的时间类型 java.sql包下给出三个与数据库相关的日期时间类型,分别是: Date:表示日期,只有年月日,没有时分秒.会丢失时间: Time:表示时间,只有时分秒,没有年月日.会丢失日期 ...

  7. Android系统,动态找出一个包下所有的类

    最近在写一个android应用,由于针对不同机型功能很不同,为了隔离变化,希望将各项功能插件化,通过编译开关来控制不同版本的功能,而不是在代码中通过逻辑来判断. 我想了一个办法,用表驱动的方法,结合插 ...

  8. java.util.regex包下的Pattern和Matcher详解(正则匹配)

    java正则表达式通过java.util.regex包下的Pattern类与Matcher类实现(建议在阅读本文时,打开java API文档,当介绍到哪个方法时,查看java API中的方法说明,效果 ...

  9. 最新版idea如何在包下建立子包(dao包下建立impl包)

    本人Java新手,对idea也不太熟悉,最近想在src源文件夹下建立包后,再建立子包时出了问题(dao包下建impl),后来上网搜了资料才学会了操作.接下来给大家演示 假如我想建一个下图的体系:pro ...

最新文章

  1. 2012 12 12 (109)闪回操作
  2. pytorch dataloader加速
  3. Swift - 选择框(UIPickerView)的用法
  4. 区块链正本清源 – 从计算机科学评看区块链的起源和发展
  5. Vue报错:Elements in iteration expect to have ‘v-bind:key‘ directives的解决办法
  6. Java并发编程之synchronized关键字解析
  7. 微型计算机杂志合订本,微型计算机(2008上半年合订本)(上下)(附光盘)
  8. 数组维度超过了支持的范围_数组公式基础:多值和单值结果_
  9. python手机端编程环境_Python + Appium 环境搭建
  10. 工作工资不高,很普通的一个我
  11. 白宫发布太空系统网络安全防护指令
  12. 微博爬虫 ----- 微博发布时间清洗
  13. 处理javaweb中文乱码
  14. C++轻量级Json解析工具—TinyJson
  15. python算法书籍-推荐 10 本程序员必读的算法书
  16. 英语secuerity证券
  17. 为什么用交叉线而不是直通线连接相同的设备
  18. webscraper 爬取二级网页_web scraper 入门到精通之路
  19. vmware-nat模式下网络模型
  20. 累死你的不是工作方式

热门文章

  1. 族谱管理系统(孩子兄弟存储结构)
  2. 2010现首批30岁80后 调查显示近半无房无车
  3. 手牵手,简单的甜蜜。
  4. defy手机突然搜索不到wifi信号的问题
  5. matlab 变压器同名端,高频电路习题.doc
  6. Wi-Fi感知应用逐步进入实际生活---乐鑫公司推出的ESP-WIFI-CSI智能人体感知方案
  7. SZTUOJ 1019.总之就是不太可爱
  8. vue获取页面dom元素样式的方法
  9. 爬取房天下数据观察广州房租情况
  10. 重庆轻工职业学院计算机考试,2016重庆轻工职业学院单招测试题(含答案解析)-20210506084723.pdf-原创力文档...