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( ...
随机推荐
- phpexcel 读取日期的问题?
phpexcel 读取excel数字时,显示为一串数字(时间都是类似于这样的数字:41890.620138889),如何将数字转换为对应的日期来显示呢?特别是例如星期一这种的时间. 可以用phpexc ...
- docker容器互连
三种方式 1.使用容器连接的示例如下: $ docker run --name some-app --link itbilu-mysql:mysql -d application-that-uses- ...
- SVN提交项目时版本冲突解决方案
版本冲突原因: 假设A.B两个用户都在版本号为7的时候,更新了index.jsp这个文件,A用户在修改完成之后提交index.jsp到服务器,这个时候提交成功,这个时候index.jsp文件的版本号已 ...
- 分页技术框架(Pager-taglib)学习一(页面分页)
一.Pager-taglib简介 1.Pager-taglib,支持多种风格的分页显示.实际上她是一个Jsp标签库,为在JSP上显示分页信息而设计的一套标签,通过这些标签的不同的组合,会形成多 ...
- php新版本废弃 preg_replace /e 修饰符
php新版本废弃 preg_replace /e 修饰符 分类: PHP -- : 3531人阅读 评论() 收藏 举报 php正则 最近服务器php版本升级到了 5.6 发现出了很多警告 [php] ...
- ERROR C2676
直接上代码: nl.h #ifndef NL_H #define NL_H #include <iosfwd> namespace ZJ { /** Insert a newline ch ...
- CSRF学习笔记之CSRF的攻击与防御以及审计【00x3】
Hight.php完整代码如下: <?php if (isset($_GET['Change'])) { // Turn requests into variables $pass_curr = ...
- PHP标签
1.PHP原标签 2.脚本标签 3.短标签 需要short_open_tag=on,默认情况下为on 4.asp标签 需要asp_tags为on,默认为off
- [转]JVM内存溢出的几种方式比较
转载自:https://github.com/pzxwhc/MineKnowContainer/issues/25 包括: 1. 栈溢出(StackOverflowError) 2. 堆溢出(OutO ...
- a标签点击事件
onclick="detail(this,'${vo.id}')" function detail(obj,id){ var lb = $("#lb").val ...