BeanUtils工具
在实际的开发中我们经常需要将用户的录入的数据进行封装为对象,那么如果使用反射和内省技术就会变得吃力。因此本节主要给大家讲解一个开源的操作JavaBean的一个工具即BeanUtils。
下载:
beanutils-1.8.0.zip
commons-logging.jar
包的引入:
在项目中创建一个文件夹如libs,然后将整个项目需要的第三方的jar包可以直接拷贝带该目录,随后打开该目录全选à右键àBuild path à add path -> 看到奶瓶子即可
举例1:使用BeanUtils工具封装用户提交的数据。
1 public static void main(String[] args)throws Exception { 2 // 模拟用户的输入的数据如下 3 String name = "XML基础"; 4 String author = "某人"; 5 String price = "99.99"; 6 String date = "2013-01-04"; 7 Book book = new Book(); 8 // 任务是将以上的属性设置给指定的Book对象 9 BeanUtils.setProperty(book, "name", name); 10 BeanUtils.setProperty(book, "author", author); 11 BeanUtils.setProperty(book, "price",price ); 12 // 查看属性是否封装好 13 System.out.println(book); 14 }
发现使用上面的代码可以省略基本数据类型的转型的问题。进而提高代码的开发效率。
举例2:自定义一个类型转换器类。
1 public static void main(String[] args)throws Exception { 2 // 模拟用户的输入的数据如下 3 String name = "XML基础"; 4 String author = "某人"; 5 String price = "99.99"; 6 String date = "2013-01-04"; 7 8 Book book = new Book(); 9 10 // 注册一个自己的转换器 11 /** 12 * converter指定具体的转换器 13 * clazz遇到什么类型调用上面的转换器 14 */ 15 ConvertUtils.register( 16 new Converter(){ 17 // 回调方法 18 @Override 19 public Object convert(Class type, Object value) { 20 if(value == null){ 21 return null; 22 } 23 // 转换为String 24 String data = (String)value; 25 // 将指定格式的字符串转换为Date 26 SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); 27 Date date = null; 28 try { 29 date = format.parse(data); 30 return date; 31 } catch (ParseException e) { 32 e.printStackTrace(); 33 return null; 34 } 35 } 36 }, 37 Date.class); 38 // 任务是将以上的属性设置给指定的Book对象 39 BeanUtils.setProperty(book, "name", name); 40 BeanUtils.setProperty(book, "author", author); 41 BeanUtils.setProperty(book, "price",price ); 42 BeanUtils.setProperty(book, "date",date ); 43 // 查看属性是否封装好 44 System.out.println(book); 45 }
如果每次遇到一个复杂类型都需要自定义转换器,那样的话实在麻烦。大家看在开发的时候可以先查看该接口是否提供了有效的实现类。
ConvertUtils.register(new DateLocaleConverter(), Date.class);
其实真正的封装好的数据需要存储在数据库中,那么javabean的数据类型应该和数据库的数据类型保持一致,那么在声明持久化javabean的时候需要全部为数据库的基本数据类型。
因此大家在JavaBean中需要导入的是java.sql.Date类,这样就直接可以将日期自动转换了。
举例3:实现封装好的JavaBean对象的属性拷贝。
1 // 实现属性封装数据的一个拷贝 2 Book copy = new Book(); 3 System.out.println(copy); 4 PropertyUtils.copyProperties(copy, book); 5 System.out.println(copy);
思考:如果使用BeanUtils封装用户的数据,那么也就是一个一个设置啊?岂不是也很麻烦?
其实在真是的环境中我们可以直接获取用户提交的所有的数据信息,只需要进行遍历即可,但是为了方便快速的设置,那么可以将javabean中的属性名和用户提交的数据名保持一致。