zoukankan      html  css  js  c++  java
  • BeanUtils框架的简单运用

    Sun公司的内省API过于繁琐,所以Apache组织结合很多实际开发中的应用场景开发了一套简单、易用的API操作Bean的属性——BeanUtils
    Beanutils工具包的常用类:
    •BeanUtils
    •PropertyUtils
    •ConvertUtils.regsiter(Converter convert, Class clazz)
    •自定义转换器
     
    首先我们需要导入两个Jar包
     
    package com.cn.gbx;
    
    import java.util.Date;
    
    public class Person {
    	
    	private String name;
    	private String password;
    	private int age;
    	private Date date = null;
    	
    	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;
    	}
    	public Date getDate() {
    		return date;
    	}
    	public void setDate(Date date) {
    		this.date = date;
    	}
    	
    	@Override
    	public String toString() {
    		return name + " " + password + " " + age + " " + date.toLocaleString();
    	} 
    }
    

      

    package com.cn.gbx;
    
    import java.lang.reflect.InvocationTargetException;
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.HashMap;
    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;
    
    public class BeanUtilsDemo {
    	@Test
    	public void test1() throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
    		Person p = new Person();
    		BeanUtils.setProperty(p, "name", "gbx");
    		System.out.println(p.getName());
    		
    		String name = null;
    		BeanUtils.getMappedProperty("name", name);
    		System.out.println(name);
    	}
    	
    	@Test
    	public void test2() throws IllegalAccessException, InvocationTargetException {
    		
    		//为BeanUtils 注册转自己的换器     String to 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 sf = new SimpleDateFormat("yyyy-MM-dd");
    				Date date = null;
    				try {
    					date = sf.parse(str);
    				} catch (ParseException e) { 
    					throw new RuntimeException(e); //异常连不可断
    				}
    				return date;
    			}
    		},
    		Date.class);
    		
    		String name = "gbx";
    		String age = "23";
    		String password = "123";
    		String birth = "1990-11-14";
    		
    		Person p = new Person();
    		BeanUtils.setProperty(p, "name", name);
    		BeanUtils.setProperty(p, "age", age);   // BeanUtils自动帮我们完成了转换, 自动的只支持八中基本数据类型
    		BeanUtils.setProperty(p, "password", password);
    		
    		//非八种基本数据类型 我们需要注册自己的转换器
    		BeanUtils.setProperty(p, "date", birth);
    		
    		System.out.println(p);
    	}
    	
    	@Test
    	public void test3() throws IllegalAccessException, InvocationTargetException {
    		String name = "gbx";
    		String age = "23";
    		String password = "123";
    		String birth = "1990-11-14";
    		
    		//注册系统为我们提供的转换器
    		ConvertUtils.register(new DateLocaleConverter(), Date.class);
    		
    		Person p = new Person();
    		BeanUtils.setProperty(p, "name", name);
    		BeanUtils.setProperty(p, "age", age);   // BeanUtils自动帮我们完成了转换, 自动的只支持八中基本数据类型
    		BeanUtils.setProperty(p, "password", password);
    		
    	
    		BeanUtils.setProperty(p, "date", birth);
    		
    		System.out.println(p);
    	}
    	
    	//这样可以直接把表单提交 request交给对象了
    	@Test
    	public void test4() throws IllegalAccessException, InvocationTargetException {
    		ConvertUtils.register(new DateLocaleConverter(), Date.class);
    		Person p = new Person();
    		Map<String, String> info = new HashMap<String, String>();
    		info.put("name", "gbx");
    		info.put("age","23");
    		info.put("password","123");
    		info.put("date", "1990-11-14");
    		
    		BeanUtils.populate(p, info); // 。。。
    		System.out.println(info);
    	}
    	
    
    }
    

      

  • 相关阅读:
    你是一直认为 count(1) 比 count(*) 效率高么?
    秒杀系统是如何防止超卖的?
    百亿流量微服务网关的设计与实现
    中台
    Token 、Cookie、Session
    HyperLedger Fabric 1.4 区块链应用场景(3.1)
    HyperLedger Fabric 1.4 区块链工作过程(2.3)
    HyperLedger Fabric 1.4 区块链技术原理(2.2)
    HyperLedger Fabric 1.4 区块链技术定义(2.1)
    HyperLedger Fabric 1.4 区块链技术发展(1.3)
  • 原文地址:https://www.cnblogs.com/E-star/p/3488760.html
Copyright © 2011-2022 走看看