常规使用:
BeanUtils不是java中的原生jar,是由第三方提供的插件。
作用:封装数据 - 主要用于封装javaBean。它可以将javaBean封装成一个字符串数据,也可以将一个表单提交的所有数据封装到javaBean中。
常用方法:**
- setProperty(Object obj,String name,Object value) - 设置属性值,如果指定属性不存在,不抛出异常(null)。
- getProperty(Object obj,String name) - 获得属性值,如果指定属性不存在,抛找不到异常。
**
package day1.demo.ba1;import org.apache.commons.beanutils.BeanUtils;import org.junit.Test;import java.lang.reflect.InvocationTargetException;public class BeanUtilsDemo {//常规的-向User对象中封装数据@Testpublic void test1(){User user = new User();user.setUid("u001");user.setUserName("张三");System.out.println(user);}//使用beanUtils工具进行封装@Testpublic void test2() throws InvocationTargetException, IllegalAccessException, NoSuchMethodException {//通过工具类的使用User user = new User();//封装配置文件BeanUtils.setProperty(user,"uid","u002");BeanUtils.setProperty(user,"userName","张三丰");BeanUtils.setProperty(user,"password","123456");System.out.println(user);//获取值String userName = BeanUtils.getProperty(user, "userName");System.out.println(userName);}}
populate方法的使用
BeanUtils下的方法讲解:
- populate方法作用:将map数据封装到指定的javabean中,一般用于将表单中的所有数据封装到javaBean
- populate(Object obj, Map
)
javaBean其实就是一个实体类(对象)**
package day1.demo.ba2;
import org.apache.commons.beanutils.BeanUtils;
import org.junit.Test;
import java.lang.reflect.InvocationTargetException;
import java.util.HashMap;
import java.util.Map;
public class BeanUtilsDemo {
@Test
public void test1() throws InvocationTargetException, IllegalAccessException {
//1.模拟数据,创建map,填充所需要的数据
Map<String,String[]> map = new HashMap<>();
map.put("uid",new String[]{"u007"});
map.put("userName",new String[]{"王语嫣"});
map.put("password",new String[]{"123"});
//2.使用populate方法进行填充
User user = new User();
BeanUtils.populate(user,map);
System.out.println(user);
}
/*
使用populate方法进行填充数据2
*/
@Test
public void test2() throws InvocationTargetException, IllegalAccessException {
//1.模拟数据,创建map,填充所需要的数据
Map<String,String[]> map = new HashMap<>();
map.put("uid",new String[]{"u008"});
//底层:就是调用了setUserName
map.put("userName",new String[]{"郭靖","黄蓉"});
map.put("password",new String[]{"321"});
map.put("hobbies",new String[]{"降龙十八掌","碧海潮生曲","打狗棒法"});
map.put("age",new String[]{"45"});
//2.使用populate方法进行填充
/*
可以指定属性,统一进行填充,需要的类型是[]
如果属性不是数组,将使用map.value表示数组中的第一个数据 - 黄蓉不是第一个数据所以不见了
BeanUtils支持的类型:基本类型和基本类型对应的包装类,自动将字符串转换为基本类型 - 自己做的
*/
User user = new User();
BeanUtils.populate(user,map);
System.out.println(user);
}
}
自定义一个BeanUtils工具类:
1.定义一个静态的工具类,定义的方法为populate,参数为
Object和Map
package day1.demo.ba3;
import org.apache.commons.beanutils.BeanUtils;
import java.util.Map;
public class MyBeanUtils {
//自动填充
public static void populate(Object bean,Map<String,String[]> properties){
try{
BeanUtils.populate(bean, properties);
} catch (Exception e){
throw new RuntimeException(e);
}
}
//自动填充的方法,并且返回bean对象
public static Object populate(Class beanClass, Map<String, String[]> properties){
//使用java的反射机制实例化
try{
Object bean = beanClass.newInstance();
//填充数据
BeanUtils.populate(bean,properties);
return bean;
} catch (Exception e){
//将编译时异常,转换成运行时异常,方法调用者处理
throw new RuntimeException(e);
}
}
}
package day1.demo.ba3;
import org.junit.Test;
import java.util.HashMap;
import java.util.Map;
public class MyBeanUtilsTest {
@Test
public void test1(){
//1.模拟数据,创建map,填充所需要的数据
Map<String, String[]> map = new HashMap<>();
map.put("uid",new String[]{"u007"});
//2.使用populate
User user = new User();
MyBeanUtils.populate(user,map);
System.out.println(user);
}
}
泛型使用
package day1.demo.ba4;
import org.apache.commons.beanutils.BeanUtils;
import java.util.Map;
/**
* 自定义BeanUtils工具类
*
* 该类定义的工具类,用于展示泛型的使用
*/
public class MyBeanUtils {
/*
Class<T>此时这个T就是一个变量,在运行的时候,接收具体的类型。例如:User
变量必须先定义再使用
泛型变量的定义方式,修饰符<变量名>返回值
*/
public static <T> T populate(Class<T> beanClass, Map<String,String[]> properties){
try{
//1.使用反射机制实例化
T bean = beanClass.newInstance();
//2.填充数据
BeanUtils.populate(bean,properties);
return bean;
}catch (Exception e){
throw new RuntimeException(e);
}
}
}
package day1.demo.ba4;
import org.junit.Test;
import java.util.HashMap;
import java.util.Map;
/**
* 测试自定义泛型的BeanUtils
*/
public class MyBeanUtilsTest {
@Test
public void test1(){
//1.模拟数据,创建map,填充所需要的数据
Map<String,String[]> map = new HashMap<>();
map.put("uid",new String[]{"u005"});
map.put("userName",new String[]{"jack","rose"});
map.put("password",new String[]{"666"});
//2.进行填充 - 使用泛型规则,所以不需要进行强制转换
User user = MyBeanUtils.populate(User.class,map);
System.out.println(user);//User{uid='u005', userName='jack', password='666', hobbies=null, age=0}
}
}
