Java类库BeanUtils组件使用方法及实例详解
BeanUtils
BeanUtils是Apachecommens组件里面的成员,由Apache提供的一套开源api,用于简化对javaBean的操作,能够对基本类型自动转换。
JavaBean
BeanUtils组件是用于简化javaBean的操作,那么什么是javaBean呢?简单来说,javaBean实质就是java类,只不过是遵循了某种规范的java类。
javaBean的特点:
- 必须具有一个无参的构造方法
- 属性必须私有化
- 私有化的属性必须通过public类型的方法来暴露,也就是说要出现setXXX()、getXXX()或者isXXX()的方法
下载BeanUtils
http://commons.apache.org/proper/commons-beanutils/download_beanutils.cgi,下载好组件,再到项目里面引入jar文件。
导入核心包
- commons-beanutils-1.9.3.jar
- commons-logging-1.2.jar
注意:当缺少日志jar包,会出现如下的报错情况。
java.lang.NoClassDefFoundError:org/apache/commons/logging/LogFactory
logging组件的下载地址:http://commons.apache.org/proper/commons-logging/download_logging.cgi
javaBean实例
publicclassStudent{
privateStringname;
privateStringid;
privateintage;
privateStringsex;
privateDated;
publicStudent(){
super();
}
publicDategetD(){
returnd;
}
publicvoidsetD(Dated){
this.d=d;
}
publicStringgetName(){
returnname;
}
publicvoidsetName(Stringname){
this.name=name;
}
publicStringgetId(){
returnid;
}
publicvoidsetId(Stringid){
this.id=id;
}
publicintgetAge(){
returnage;
}
publicvoidsetAge(intage){
this.age=age;
}
publicStringgetSex(){
returnsex;
}
publicvoidsetSex(Stringsex){
this.sex=sex;
}
@Override
publicStringtoString(){
return"Student[name="+name+",id="+id+",age="+age
+",sex="+sex+",d="+d+"]";
}
}
BeanUtils用法
- 对象的拷贝,BeanUtils.copyProperties(Objectdest,Objectorig)
- 对象属性的拷贝,BeanUtils.copyProperties(Objectbean,Stringname,Objectvalue)或者BeanUtils.setProperty(Objectbean,Stringname,Objectvalue)
- map数据封装到Javabean,populate(Objectbean,Map
properties)
实例
对象的拷贝
@Test
publicvoidtest()throwsException{
//创建对象
Students=newStudent();
/**
*组件对JavaBean的操作
*bean:javaBean对象
*name:对象的属性名称
*value:对象的属性值
*/
//1.实现对象的属性拷贝,对于基本数据类型,会自动进行类型转换
BeanUtils.copyProperty(s,"id","2018100712");
//2.实现对象之间的拷贝:Objectdest<---Objectorig
Students2=newStudent();
BeanUtils.copyProperties(s2,s);
System.out.println(s2);
}
对象属性的拷贝
@Test
publicvoidtest()throwsException{
//创建对象
Students=newStudent();
/*一般的操作
s.setId("1221212");
s.setName("老王");
System.out.println(s);
*/
//1.实现对象的属性拷贝,对于基本数据类型,会自动进行类型转换
BeanUtils.copyProperty(s,"id","2018100712");
System.out.println(s)
}
map数据封装到javaBean
注意:要map中的数据封装到JavaBean中去,需要map中的key与JavaBean里面的私有化的属性要相匹配
@Test
publicvoidtest()throwsException{
//创建对象
Students2=newStudent();
//1.map的数据拷贝到对象中去
Mapmap=newHashMap();
map.put("id","12233");
map.put("name","老王");
map.put("sex","男");
BeanUtils.populate(s2,map);
System.out.println(s2);
}
类型转换器
当javaBean中出现非基本类型数据的私有化属性,并且需要对该数据进行封装时,就要去注册该数据类型的类型转换器了,不如就会出现错误,比如该Student对象中的日期类型。
日期类型转换出错:org.apache.commons.beanutils.converters.DateConvertertoDate警告: DateConverterdoesnotsupportdefaultStringto'Date'conversion,可以看出工具类converters在转换的时候出现了错误,为此我们可以去查看该类,以便我们接下来去实现类型转换。
converter
在解压出来的BeanUtils文件下的apidoc目录中的index.html里面可以找到该类的说明,会发现它是一个接口,有很多的实现类,我们可以使用里面的实现类来做日期类型的转换或者说我们可以自己去注册个类型转换器。
自定义类型转换器
去复写ConvertUtils里面的register(Converterconverter,Class>clazz)方法
@Test
publicvoidtest2()throwsException{
//假设网页表单提交过来的数据
Stringname="老王";
Stringid="121212";
Stringdate="2018-10-11";
Students=newStudent();
//1.自定义:注册日期类型转换器去复写ConvertUtils里面的register(Converterconverter,Class>clazz)方法
ConvertUtils.register(newConverter(){
//修改第三方jar引入方法的参数时候,可以关联源码,ctrl选择该类,点进去,选择Attachsource--->externalfile
@Override
publicObjectconvert(Classtype,Objectvalue){
//判断
if(value==null||"".equals(value.toString().trim())){
returnnull;
}
if(type!=Date.class){
returnnull;
}
try{
//字符串转换为日期
SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-dd");
returnsdf.parse(value.toString());
}catch(Exceptione){
thrownewRuntimeException(e);
}
}
},Date.class);
//把表单的数据封装到对象中去
BeanUtils.copyProperty(s,"name",name);
BeanUtils.copyProperty(s,"id",id);
BeanUtils.copyProperty(s,"d",date);
System.out.println(s);
}
使用工具类提供的类型转换器
@Test
publicvoidtest3()throwsException{
//利用组件提供的日期类型转换器,提供一个实现类
//假设表单的数据
Stringname="老王";
Stringid="121212";
//当日期字符串出现空字符串或者出现空格的情况,会报错org.apache.commons.beanutils.ConversionException
Stringdate="2018-09-12";
Students=newStudent();
ConvertUtils.register(newDateLocaleConverter(),Date.class);
//把表单的数据封装到对象中去
BeanUtils.copyProperty(s,"name",name);
BeanUtils.copyProperty(s,"id",id);
BeanUtils.copyProperty(s,"d",date);
System.out.println(s);
}
注意:当日期字符串是空字符串或者存在空格的时候,会报错!
BeanUtils在servlet的使用
获取表单提交的数据并封装到javabean中去,request.getParameterMap()获取所有的参数并存储到Map中去,并利用BeanUtils里面的populate(Objectbean,Map
1.jsp
<%@pagelanguage="java"import="java.util.*"pageEncoding="utf-8"%>注册 用户名称:
密 码:
联系方式:
jsp显示的结果:
2.servlet
packagecn.tan.servlet;
importjava.io.IOException;
importjava.lang.reflect.InvocationTargetException;
importjava.util.Map;
importjavax.servlet.ServletException;
importjavax.servlet.http.HttpServlet;
importjavax.servlet.http.HttpServletRequest;
importjavax.servlet.http.HttpServletResponse;
importorg.apache.commons.beanutils.BeanUtils;
importcn.tan.entry.Student;
publicclassGetDataServletextendsHttpServlet{
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException{
doPost(request,response);
}
publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException{
request.setCharacterEncoding("utf-8");
//获取所有参数
Mapmap=request.getParameterMap();
Students=newStudent();
try{
BeanUtils.populate(s,map);
//测试,输出封装的结果
System.out.println(s);
}catch(Exceptione){
thrownewRuntimeException(e);
}
}
}
输出结果:Student[name=老王,age=0,password=11111,phone=13232174361]
更多关于Java类库BeanUtils组件使用方法级实例请查看下面的相关链接
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。