Java——BeanUtils基本用法
为了操作JavaBean的属性,sun公司自己写了一套内省的api(在Java.beans.*)中,但是我们发现操作起来还是比较复杂的,所以apache公司就自己写了一套api替代了它,大大方便了开发者去调用,并大大的提高了效率。接下来我们通过几个demo来简单的熟悉一下这套api,首先你需要准备两个jar包(commons-logging.jar和org.apache.commons.beanutils.jar)。
1.创建一个简单的JavaBean Student
package com.day09;
import java.util.Date;
public class Student {
@Override
public String toString() {
return "Student [name=" + name + ", password=" + password + ", age=" + age + ", birthday=" + birthday + "]";
}
private String name;
private String password;
private int age;
private Date birthday;
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
protected String getNames() {
return name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
2.通过junit的方式进行方法测试
package com.day09; import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map; import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.ConversionException;
import org.apache.commons.beanutils.ConvertUtils;
import org.apache.commons.beanutils.Converter;
import org.apache.commons.beanutils.locale.converters.DateLocaleConverter;
import org.junit.Test; /**
* apache感觉Java的内省api写的太麻烦了,自己开发了一套api就是BeanUtils,大大的简化了内省操作Javabean的属性,提高了效率
*
* @author Administrator
*
*/
public class BeanUtilsDemo {
/**
* 使用BeanUtils来给属性设置
*
* @throws Exception
*/
@Test
public void setProperties() throws Exception {
Student s = new Student();
// 传入bean的对象,属性名,属性值即可
BeanUtils.setProperty(s, "age", 23);
System.out.println(s.getAge());
} /**
* BeanUtils支持8中基本数据类型进行数据转换(从String转换到对应的八种基本数据类型)
*
* @throws Exception
*/
@Test
public void setPropertiesOnBaseDataType() throws Exception {
String name = "zhangsan";
String password = "123456";
String age = "23";
Student s = new Student();
BeanUtils.setProperty(s, "name", name);
BeanUtils.setProperty(s, "password", password);
BeanUtils.setProperty(s, "age", age);
System.out.println(s);
} /**
* BeanUtis虽然支持8中基本类型,但是它可提供了注册转换器机制,可以让除8中基本类型之外的其他类型也可以自动转换
*
* @throws Exception
*/
@Test
public void setPropertiesOnDateType() throws Exception {
String birthday = "1993-9-25";
Student s = new Student();
// 为了让日期赋值到bean的属性上,我们需要给Date注册一个日期转换器
ConvertUtils.register(new Converter() { @Override
public Object convert(Class type, Object value) {
if (value == null) {
return null;
}
if (!(value instanceof String)) {
throw new ConversionException("只支持String类型");
}
String str = (String) value;
if ("".equals(str.trim())) {
return null;
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try {
return sdf.parse(str);
} catch (ParseException e) {
throw new RuntimeException(e);// 要带上e,因为异常链不能断
}
}
}, Date.class);
BeanUtils.setProperty(s, "birthday", birthday);
System.out.println(s.getBirthday());
} /**
* BeanUtis虽然支持8中基本类型,但是它可提供了注册转换器机制,可以让除8中基本类型之外的其他类型也可以自动转换
*
* @throws Exception
*/
@Test
public void setPropertiesOnDateType2() throws Exception {
Student s = new Student(); String birthday = "1993-09-25";
// 为了让日期赋值到bean的属性上,我们需要给Date注册一个日期转换器,而BanUtils框架也为我们提供了一个日期转换器
ConvertUtils.register(new DateLocaleConverter(Locale.CHINESE, "yy-MM-dd"), Date.class);
BeanUtils.setProperty(s, "birthday", birthday);
System.out.println(s.getBirthday());
} /**
* 从map集合上做数据的映射
*
* @throws Exception
* @throws IllegalAccessException
*/
@Test
public void setPropertiesOnMap() throws IllegalAccessException, Exception {
Student s = new Student();
Map<String, String> map = new HashMap<String, String>();
// 这里同样要注册一个日期转换器
ConvertUtils.register(new DateLocaleConverter(Locale.CHINESE, "yy-MM-dd"), Date.class);
map.put("name", "zhangsan");
map.put("age", "23");
map.put("birthday", "1993-9-25");
BeanUtils.populate(s, map);
System.out.println(s);
}
}
至此,我们已将常见的几种通过反射获得类中字段的方法演示完毕,有不足的地方,希望大家多多提意见!
Java——BeanUtils基本用法的更多相关文章
- java Beanutils.copyProperties( )用法
这是一篇开发自辩甩锅稿~~~~ 昨天测试小姐姐将我的一个bug单重开了,emmmm....内心OS:就调整下对象某个属性类型这么简单的操作,我怎么可能会出错呢,一定不是我的锅!!but再怎么抗拒,bu ...
- (转载)BeanUtils.copyProperties() 用法
BeanUtils.copyProperties() 用法 标签: hibernateuserjdbc数据库strutsjava 2009-10-17 23:04 35498人阅读 评论(6) 收藏 ...
- BeanUtils.copyProperties用法
spring的BeanUtils.copyProperties用法 原创 2010年06月03日 13:43:00 标签: spring / struts / 数据库 / 工具 / action 一. ...
- JAVA的continue用法
JAVA的continue用法: public class test{ public static void main(String [] args){ for(int i=0;i<=10;i ...
- Java Spring AOP用法
Java Spring AOP用法 Spring AOP Java web 环境搭建 Java web 项目搭建 Java Spring IOC用法 spring提供了两个核心功能,一个是IoC(控制 ...
- Java Spring IOC用法
Java Spring IOC用法 Spring IoC 在前两篇文章中,我们讲了java web环境搭建 和 java web项目搭建,现在看下spring ioc在java中的运用,开发工具为In ...
- 四种Java线程池用法解析
本文为大家分析四种Java线程池用法,供大家参考,具体内容如下 http://www.jb51.net/article/81843.htm 1.new Thread的弊端 执行一个异步任务你还只是如下 ...
- JAVA中ArrayList用法
JAVA中ArrayList用法 2011-07-20 15:02:03| 分类: 计算机专业 | 标签:java arraylist用法 |举报|字号 订阅 Java学习过程中做题时 ...
- this在java中的用法
this在java中的用法 1.使用this关键字引用成员变量 作用:解决成员变量与参数或局部变量命名冲突的问题 public class Dog { String name; public Dog( ...
随机推荐
- rownum使用说明
参考:http://www.blogjava.net/conans/articles/219693.html 参考:http://www.blogjava.net/freeman1984/archiv ...
- Openresty配置文件上传下载
1. 下载包安装Openresty openresty-1.13.6.1下载地址 https://openresty.org/download/openresty-1.13.6.1.tar.gz 安装 ...
- Atitit.png 图片不能显示 php环境下
Atitit.png 图片不能显示 php环境下 1.1. 不能显示png 下载png 检查使用bcompare与正常png对比.. 多了bom头 , "\xEF\xBB\xBF" ...
- Tomcat 学习进阶历程之Tomcat架构与核心类分析
前面的http及socket两部分内容,主要是为了后面看Tomcat源代码而学习的一些网络基础.从这章開始.就開始实际深入到Tomcat的'内在'去看一看. 在分析Tomcat的源代码之前,准备先看一 ...
- django的html模板中获取字典的值
在django的html模板中获取字典中的值应当直接使用 字典.[key] 的方式 {% for i in lists %} <li id="{{i.id}}" class ...
- 浅谈P2P终结者原理及其突破
P2P终结者按正常来说是个很好的网管软件,但是好多人却拿它来,恶意的限制他人的流量,使他人不能正常上网,下面我们就他的功能以及原理还有突破方法做个详细的介绍! 我们先来看看来自在网上PSP的资料:P2 ...
- PHP学习笔记(14)班级和学生管理---学生
两个文件夹,一个班级cls,一个学生stu. 两个表,一个班级cls,一个学生stu. 每个文件夹里有7个php文件:主界面stu.php-------增add.php,insert.php----- ...
- VM下redhat9.0不能上网
近期本人在学习linux时,安装Red Hat Linux9后,可是上不了网,弄得查资料还得切换到虚拟机上去,特耗时间.还好没有疯掉! 首先,测试下你的linux看是否是这类问题,输入ping www ...
- Java 中 byte 类型初始化问题
很早的时候由于工作需要,接触过一点 Java,于是有了这个坑,今天回头看到自己在 Stackoverflow 上提的问题发现了它,于是再记录下. 在使用中,需要将 byte 类型的的每一位都置 1.我 ...
- angular 输入属性@Input , 输出属性@Output , 中间人模式
1 输入属性 通常用于父组件向子组件传递信息 举个栗子:我们在父组件向子组件传递股票代码,这里的子组件我们叫它app-order 首先在app.order.component.ts中声明需要由父组件传 ...