泛型(二)封装工具类CommonUtils-把一个Map转换成指定类型的javabean对象
1、commons-beanutils的使用
commons-beanutils-1.9.3.jar 依赖 commons-logging-1.2.jar
代码1:
String className = "cn.itcast.domain.Person";
Class clazz = Class.forName(className);
Object bean = clazz.newInstance(); BeanUtils.setProperty(bean, "name", "张三");
BeanUtils.setProperty(bean, "age", "20"); // age是int类型,会自动转换
BeanUtils.setProperty(bean, "xxx", "XXX"); // 没有xxx属性,也不会抛异常 String age = BeanUtils.getProperty(bean, "age");
代码2:
需求:把map中的属性直接封装到一个bean类中。map:{"username:zhangsan","password:123"}。 我们要把map的数据封装到一个javaBean中!要求map的key值于bean的属性名相同。
首先,新建一个javabean,User.java 有两个属性username,password。
public void fun1() throws Exception {
Map<String, String> map = new HashMap<String, String>();
map.put("username", "zhangsan");
map.put("password", "123");
User user = new User();
BeanUtils.populate(user, map);
System.out.println(user); // User [username=zhangsan, password=123]
}
代码3:封装工具类(用到泛型)
public class CommonUtils {// 把一个Map转换成指定类型的javabean对象
public static <T> T tobean(Map<String, ?> map, Class<T> clazz) {
try {
T bean = clazz.newInstance();
BeanUtils.populate(bean, map);
return bean;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
2、测试封装的工具类
package com.oy;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Map;
/**
* @author oy
* @version 1.0
* @date 2019年5月7日
* @time 下午10:10:35
*/
public class User {
private Integer id;
private String name;
private Boolean status;
private BigDecimal balance;
private Double salary; public static void main(String[] args) {
Map<String, Object> map = new HashMap<>();
map.put("id", 1);
map.put("name", "张三");
map.put("status", true);
map.put("balance", 1000.123456789);
map.put("salary", 1000.123456789);
System.out.println(CommonUtils.tobean(map, User.class));
} //getter、setter和toString方法省略
}
map的key对应的值全部写成字符串格式也是可以的:
Map<String, Object> map = new HashMap<>();
map.put("id", "1");
map.put("name", "张三");
map.put("status", "true");
map.put("balance", "1000.123456789");
map.put("salary", "1000.123456789");
// User [id=1, name=张三, status=true, balance=1000.123456789, salary=1000.123456789]
System.out.println(CommonUtils.tobean(map, User.class));
泛型(二)封装工具类CommonUtils-把一个Map转换成指定类型的javabean对象的更多相关文章
- JAVA之旅(五)——this,static,关键字,main函数,封装工具类,生成javadoc说明书,静态代码块
JAVA之旅(五)--this,static,关键字,main函数,封装工具类,生成javadoc说明书,静态代码块 周末收获颇多,继续学习 一.this关键字 用于区分局部变量和成员变量同名的情况 ...
- java反射+java泛型,封装BaseDaoUtil类。供应多个不同Dao使用
当项目是ssh框架时,每一个Action会对应一个Service和一个Dao.但是所有的Ation对应的Dao中的方法是相同的,只是要查的表不一样.由于封装的思想,为了提高代码的重用性.可以使用jav ...
- MySQL JDBC常用知识,封装工具类,时区问题配置,SQL注入问题
JDBC JDBC介绍 Sun公司为了简化开发人员的(对数据库的统一)操作,提供了(Java操作数据库的)规范,俗称JDBC,这些规范的由具体由具体的厂商去做 对于开发人员来说,我们只需要掌握JDBC ...
- 浅谈Java工具类CommonUtils的使用
package com.xushouwei.cn; import java.util.HashMap; import java.util.Map; import org.junit.Test; imp ...
- Android OkHttp网络连接封装工具类
package com.lidong.demo.utils; import android.os.Handler; import android.os.Looper; import com.googl ...
- 题目要求:建立一个类Str,将一个正整数转换成相应的字符串,例如整数3456转换为字符串"3456".
题目要求:建立一个类Str,将一个正整数转换成相应的字符串,例如整数3456转换为字符串"3456". 关键:怎么将一个数字转换为字符? [cpp] view plaincopy ...
- JS---动画函数封装:设置任意的一个元素,移动到指定的目标位置
动画函数封装:设置任意的一个元素,移动到指定的目标位置 <!DOCTYPE html> <html lang="en"> <head> < ...
- 利用阿里巴巴封装的FastJSON来解析json并转换成map
利用阿里巴巴封装的FastJSON来解析json并转换成map package com.zkn.newlearn.json; import com.alibaba.fastjson.JSON; i ...
- 把一个序列转换成严格递增序列的最小花费 CF E - Sonya and Problem Wihtout a Legend
//把一个序列转换成严格递增序列的最小花费 CF E - Sonya and Problem Wihtout a Legend //dp[i][j]:把第i个数转成第j小的数,最小花费 //此题与po ...
随机推荐
- 联盟周赛2019810 csgo (动态规划、不下降子序列)
今天起晚了...就做了俩题 难受的一批... 题目描述 著名第一人称射击游戏 csgo 因其优秀的平衡性,爽快的射击感和科学的战术配比赢得了世界广大玩家的好评. 在一局游戏中,分为两个阵营,他们的目标 ...
- etcd租约机制
新建租约 新建一个过期时间为120s的租约 # etcdctl lease grant lease 018f6d7bb11aba0d granted with TTL(120s) 查看新建的租约信息 ...
- 几个关于json序列化 的注解
一.@JsonProperty 1.此注解用于属性上,作用是把该属性的名称序列化为另外一个名称.例如: @JsonProperty("name") private String N ...
- python中几个常见的魔法方法
首先,什么是魔法方法呢?在python中方法名如果是__xxxx__()的,那么就有特殊的功能,因此叫做"魔法"方法. __ init__()方法 当一个实例被创建的时候调用的初始 ...
- 会引起全表扫描的几种SQL 以及sql优化 (转)
出处: 查询语句的时候尽量避免全表扫描,使用全扫描,索引扫描!会引起全表扫描的几种SQL如下 1.模糊查询效率很低: 原因:like本身效率就比较低,应该尽量避免查询条件使用like:对于like ‘ ...
- 腾讯万亿级分布式消息中间件TubeMQ正式开源
TubeMQ是腾讯在2013年自研的分布式消息中间件系统,专注服务大数据场景下海量数据的高性能存储和传输,经过近7年上万亿的海量数据沉淀,目前日均接入量超过25万亿条.较之于众多明星的开源MQ组件,T ...
- [WPF]使用CheckAccess检测是否在控件的ui线程上执行
private void Parallel(object sender, RoutedEventArgs e) { Task.Run(() => ChangeColour(Brushes.Red ...
- 03-Spring基于xml的IOC配置--spring的依赖注入
1.概念 依赖注入:Dependency Injection(简称DI注入).它是 spring 框架核心 ioc 的具体实现. 简单理解:可以在一个类中不通过new的方式依赖其它对象.目的是为了解耦 ...
- sql认识
DDL – Data Definition Language数据定义语言DML – Data Manipulation Language数据操作语言DCL – Data Control Languag ...
- chrom插件1
本文是稀土掘金投稿,虽然其中有倔金的私货,是篇推广文,但我看过后认为内容确实不错,有些好插件还是第一次知道,对我很有帮助,考虑过后还是决定推荐给大家,最近我比较关注各种提高开发效率的工具与技巧,今后看 ...