hutool包下BeanUtil常用方法
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,可以这样实现
(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常用方法相关推荐
- Hutool包下使用PinyinUtil获取汉字的拼音报错cn.hutool.extra.pinyin.PinyinException: No pinyin jar found! Please ...
报错内容: Exception in thread "main" java.lang.RuntimeException: cn.hutool.extra.pinyin.Pinyin ...
- 【重难点】【Java基础 06】浅克隆与深克隆、Object类的常用方法、util包下的接口
[重难点][Java基础 06]浅克隆与深克隆.Object对象的常用方法.util包下的接口 文章目录 [重难点][Java基础 06]浅克隆与深克隆.Object对象的常用方法.util包下的接口 ...
- io包下 文件类 字节流 字符流 缓冲流 转换流 序列化流 打印流
第一章 File类 1.1 概述 java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建.查找和删除等操作. 1.2 构造方法 public File(String pat ...
- JAVA中J.U.C 包下并发类的应用
文章目录 JUC包中的锁应用 Lock接口及ReentrantLock对象分析及应用? Condition接口对象分析与应用? ReadWriteLock接口及实现类分析与应用? StampedLoc ...
- 多线程十 JUC包下的常用工具类
JUC包下的常用工具类 1. CountDownLatch-闭锁 2. CyclicBarrier-循环栅栏 3. Semaphore-信号量 4. Exchanger-线程数据交换器 这篇文章主要是 ...
- util包下的Date与sql包下的Date之间的转换
Java中的时间类型 java.sql包下给出三个与数据库相关的日期时间类型,分别是: Date:表示日期,只有年月日,没有时分秒.会丢失时间: Time:表示时间,只有时分秒,没有年月日.会丢失日期 ...
- Android系统,动态找出一个包下所有的类
最近在写一个android应用,由于针对不同机型功能很不同,为了隔离变化,希望将各项功能插件化,通过编译开关来控制不同版本的功能,而不是在代码中通过逻辑来判断. 我想了一个办法,用表驱动的方法,结合插 ...
- java.util.regex包下的Pattern和Matcher详解(正则匹配)
java正则表达式通过java.util.regex包下的Pattern类与Matcher类实现(建议在阅读本文时,打开java API文档,当介绍到哪个方法时,查看java API中的方法说明,效果 ...
- 最新版idea如何在包下建立子包(dao包下建立impl包)
本人Java新手,对idea也不太熟悉,最近想在src源文件夹下建立包后,再建立子包时出了问题(dao包下建impl),后来上网搜了资料才学会了操作.接下来给大家演示 假如我想建一个下图的体系:pro ...
最新文章
- 2012 12 12 (109)闪回操作
- pytorch dataloader加速
- Swift - 选择框(UIPickerView)的用法
- 区块链正本清源 – 从计算机科学评看区块链的起源和发展
- Vue报错:Elements in iteration expect to have ‘v-bind:key‘ directives的解决办法
- Java并发编程之synchronized关键字解析
- 微型计算机杂志合订本,微型计算机(2008上半年合订本)(上下)(附光盘)
- 数组维度超过了支持的范围_数组公式基础:多值和单值结果_
- python手机端编程环境_Python + Appium 环境搭建
- 工作工资不高,很普通的一个我
- 白宫发布太空系统网络安全防护指令
- 微博爬虫 ----- 微博发布时间清洗
- 处理javaweb中文乱码
- C++轻量级Json解析工具—TinyJson
- python算法书籍-推荐 10 本程序员必读的算法书
- 英语secuerity证券
- 为什么用交叉线而不是直通线连接相同的设备
- webscraper 爬取二级网页_web scraper 入门到精通之路
- vmware-nat模式下网络模型
- 累死你的不是工作方式
热门文章
- 族谱管理系统(孩子兄弟存储结构)
- 2010现首批30岁80后 调查显示近半无房无车
- 手牵手,简单的甜蜜。
- defy手机突然搜索不到wifi信号的问题
- matlab 变压器同名端,高频电路习题.doc
- Wi-Fi感知应用逐步进入实际生活---乐鑫公司推出的ESP-WIFI-CSI智能人体感知方案
- SZTUOJ 1019.总之就是不太可爱
- vue获取页面dom元素样式的方法
- 爬取房天下数据观察广州房租情况
- 重庆轻工职业学院计算机考试,2016重庆轻工职业学院单招测试题(含答案解析)-20210506084723.pdf-原创力文档...