今日学习目标 :
- 可以说出BeanUtils的做用
- 可以使用BeanUtils封装数据
- 可以编写XML综合案例
- BeanUtils (*****了解*****)
JavaBean 介绍 :java
JavaBean 它是一个简单的Java类, 这个类拥有 get 和 set 方法便可. 但要求这个类必须有一个公开的空参构造方法.apache
后期开发中, 这个类通常会保存在名为 domain 或者 beans 包中.dom
BeanUtils 介绍 :ide
在 Servlet 中通常须要获取页面提交的form表单中的数据, 而后封装到一个JavaBean上.工具
这样咱们须要书写大量的 getParameter 获取提交的参数, 同时还要使用 JavaBean 的 setParameter 方法把数据所有封装到对象上.学习
因而 Apache 公司给咱们提供了能够快速获取页面数据, 并将数据封装到JavaBean对象上的方式.this
BeanUtils 类的功能是把一个Map集合中的数据, 封装到一个 JavaBean 上. 使用BeanUtils工具类中的populate方法就能够把Map集合中的数据封装到指定的bean上.Map中的key名称必须和bean对象的属性名称保持一致.spa
Request 请求 -> getParameter -> getParameterMap(); -> populate 填充 -> JavaBean 类的对象..net

BeanUtils 做用 :orm
能够为JavaBean的属性设置值, 获取值, 并经过Map为JavaBean的数值赋值.
连接 : http://commons.apache.org/proper/commons-beanutils/download_beanutils.cgi
连接 : http://commons.apache.org/proper/commons-logging/download_logging.cgi
BeanUtils 是 Apache commons组件的成员之一,主要用于简化JavaBean封装数据的操做。它能够给JavaBean封装一个字符串数据,也能够将一个表单提交的全部数据封装到JavaBean中。
使用第三方工具,须要导入jar包:

|
方法 |
描述 |
BeanUtils对象 |
populate(Object bean, Map<String,String[]> properties) |
将Map数据封装到指定Javabean中,通常用于将表单的全部数据封装到javabean |
setProperty(Object obj,String name,Object value) |
设置属性值 |
getProperty(Object obj,String name) |
得到属性值 |
- 提供JavaBean User ,并提供对应的构造方法
- package cn.itcast.domain;
-
- public class User {
- // 属性
- private String id;
- private String username;
- private String pwd;
- private int age;
- private float scores;
-
- public User(String id, String username, String pwd, int age, float scores) {
- super();
- this.id = id;
- this.username = username;
- this.pwd = pwd;
- this.age = age;
- this.scores = scores;
- }
-
- public User() {
- super();
- }
-
- @Override
- public String toString() {
- return "User [id=" + id + ", username=" + username + ", pwd=" + pwd + ", age=" + age + ", scores=" + scores
- + "]";
- }
- public int getAge() {
- return age;
- }
- public float getScores() {
- return scores;
- }
- public void setAge(int age) {
- this.age = age;
- }
- public void setScores(float scores) {
- this.scores = scores;
- }
- public String getId() {
- return id;
- }
- public String getUsername() {
- return username;
- }
- public String getPwd() {
- return pwd;
- }
- public void setId(String id) {
- this.id = id;
- }
- public void setUsername(String username) {
- this.username = username;
- }
- public void setPwd(String pwd) {
- this.pwd = pwd;
- }
- }
- 功能1:设置属性
- 功能2:得到属性
- import org.apache.commons.beanutils.BeanUtils;
- import org.junit.Test;
-
- public class BeanUtilsDemo01 {
- @Test
- public void demo01() throws Exception {
- User user = new User();
-
- // 设置
- BeanUtils.setProperty(user, "id", "u001");
- BeanUtils.setProperty(user, "username", "Jack");
- BeanUtils.setProperty(user, "pwd", "123456");
- BeanUtils.setProperty(user, "age", 18);
- BeanUtils.setProperty(user, "scores", 99.5f);
-
- System.out.println(user);
- }
-
- @Test
- public void demo02() throws Exception {
- User user = new User("u001", "Jack", "123456", 18, 99.5f);
-
- String id = BeanUtils.getProperty(user, "id");
- String username = BeanUtils.getProperty(user, "username");
- String pwd = BeanUtils.getProperty(user, "pwd");
- String age = BeanUtils.getProperty(user, "age");
- String scores = BeanUtils.getProperty(user, "scores");
-
- System.out.println(id + ", " + username + ", " + pwd + ", " + age + ", " + scores);
- }
- }
- 功能3:封装表单数据,使用Map 模拟 request.getParameterMap()

- import java.util.HashMap;
- import java.util.Map;
-
- import org.apache.commons.beanutils.BeanUtils;
-
- public class BeanUtilsDemo02 {
- public static void main(String[] args) throws Exception {
-
- // 功能3 : 封装表单数据, 使用 Map 模拟 request.getParameterMap();
- // 需求 : 将数据封装到 JavaBean 对象中
- User user = new User();
- BeanUtils.populate(user, Request.getParameterMap());
- System.out.println(user);
- }
- }
-
- class Request {
- // 方法
- public static Map<String, Object> getParameterMap() {
- HashMap<String, Object> map = new HashMap<String, Object>();
- map.put("id", "u001");
- map.put("username", "Jack");
- map.put("pwd", "123456");
- map.put("age", 18);
- map.put("scores", 99.5f);
- return map;
- }
- }

- 综合案例1 (*****练习*****)
读取XML中的配置文件信息,使用BeanUtils工具类建立JavaBean对象,将XML中的数据保存到JavaBean类的属性中.

xml文件 :
<?xml version="1.0" encoding="UTF-8"?>
<beans>
<bean className="cn.itcast.bean.Employee">
<property name="id" value="1"></property>
<property name="name" value="张三"></property>
<property name="salary" value="20000.00"></property>
</bean>
<bean className="cn.itcast.bean.Student">
<property name="name" value="翠花"></property>
<property name="age" value="18"></property>
<property name="gender" value="女"></property>
<property name="score" value="99.5f"></property>
</bean>
</beans>
建立两个 JavaBean 类 :
- package cn.itcast.domain;
-
- public class Employee {
- // 属性
- private int id;
- private String name;
- private double salary;
-
- // 构造方法重载
- public Employee(int id, String name, double salary) {
- super();
- this.id = id;
- this.name = name;
- this.salary = salary;
- }
-
- @Override
- public String toString() {
- return "Employee [id=" + id + ", name=" + name + ", salary=" + salary + "]";
- }
-
- // setter & getter
- public Employee() {
- super();
- }
- public int getId() {
- return id;
- }
- public String getName() {
- return name;
- }
-
- public double getSalary() {
- return salary;
- }
-
- public void setId(int id) {
- this.id = id;
- }
- public void setName(String name) {
- this.name = name;
- }
- public void setSalary(double salary) {
- this.salary = salary;
- }
- }
- package cn.itcast.domain;
-
- public class Student {
- // 属性
- private String name;
- private int age;
- private char gender;
- private float score;
- public Student(String name, int age, char gender, float score) {
- super();
- this.name = name;
- this.age = age;
- this.gender = gender;
- this.score = score;
- }
- public Student() {
- super();
- }
- @Override
- public String toString() {
- return "Student [name=" + name + ", age=" + age + ", gender=" + gender + ", score=" + score + "]";
- }
- public String getName() {
- return name;
- }
- public int getAge() {
- return age;
- }
- public char getGender() {
- return gender;
- }
- public float getScore() {
- return score;
- }
- public void setName(String name) {
- this.name = name;
- }
- public void setAge(int age) {
- this.age = age;
- }
- public void setGender(char gender) {
- this.gender = gender;
- }
- public void setScore(float score) {
- this.score = score;
- }
- }
解析 xml 并实现为 JavaBean 对象赋值 :
- import java.util.List;
-
- import org.apache.commons.beanutils.BeanUtils;
- import org.dom4j.Document;
- import org.dom4j.Element;
- import org.dom4j.io.SAXReader;
-
- @SuppressWarnings("all")
- public class BeanUtilsDemo03 {
- public static void main(String[] args) throws Exception {
-
- // 1. 建立一个 SAXReader 解析器
- SAXReader saxReader = new SAXReader();
- // 2. 读取 xml 文档, 获取 docuemnt 对象
- Document document = saxReader.read("employee.xml");
- // 3. 获取根标签
- Element rootElement = document.getRootElement();
- // 4. 获取beans标签下的子标签bean
- List<Element> beanElements = rootElement.elements();
- // 5.1 遍历集合, 获取集合中的 bean 标签
- for (Element bean : beanElements) {
- // 5.2 获取bean标签中的className属性值
- String className = bean.attributeValue("className");
- // System.out.println(className);
- // 5.3 根据className字符串, 使用反射技术, 建立一个该类的实例对象
- Class<?> cls = Class.forName(className);
- Object obj = cls.newInstance();
- // 5.4 获取 bean 标签的 property 标签
- List<Element> propElements = bean.elements();
- // 5.5 遍历集合, 获取集合中的每个 property 标签
- for (Element prop : propElements) {
- // 5.6 获取 prop 标签中的 name 和 value 属性值
- String name = prop.attributeValue("name");
- String value = prop.attributeValue("value");
- // System.out.println(name + " = " + value);
- // 5.7 使用 BeanUtils 工具给对象的相应属性设置数值
- BeanUtils.setProperty(obj, name, value);
- }
- System.out.println(obj);
- }
- }
- }

- 综合案例2 (*****练习*****)
student.xml
<?xml version="1.0" encoding="UTF-8"?>
<students>
<student stuNo="it001">
<name>章子怡</name>
<age>20</age>
<gender>女</gender>
<score>99</score>
</student>
<student stuNo="it002">
<name>汪峰</name>
<age>22</age>
<gender>男</gender>
<score>100</score>
</student>
<student stuNo="it003">
<name>高圆圆</name>
<age>18</age>
<gender>女</gender>
<score>98</score>
</student>
</students>
Student.java
- public class Student {
- // 属性
- private String stuNo;
- private String name;
- private int age;
- private char gender;
- private float score;
- public Student(String stuNo, String name, int age, char gender, float score) {
- super();
- this.stuNo = stuNo;
- this.name = name;
- this.age = age;
- this.gender = gender;
- this.score = score;
- }
- public Student() {
- super();
- }
- @Override
- public String toString() {
- return "Student [stuNo=" + stuNo + ", name=" + name + ", age=" + age + ", gender=" + gender + ", score=" + score
- + "]";
- }
- public String getStuNo() {
- return stuNo;
- }
- public String getName() {
- return name;
- }
- public int getAge() {
- return age;
- }
- public char getGender() {
- return gender;
- }
- public float getScore() {
- return score;
- }
- public void setStuNo(String stuNo) {
- this.stuNo = stuNo;
- }
- public void setName(String name) {
- this.name = name;
- }
- public void setAge(int age) {
- this.age = age;
- }
- public void setGender(char gender) {
- this.gender = gender;
- }
- public void setScore(float score) {
- this.score = score;
- }
- }
StudentDemo01.java
- import java.util.ArrayList;
- import java.util.List;
-
- import org.apache.commons.beanutils.BeanUtils;
- import org.dom4j.Document;
- import org.dom4j.Element;
- import org.dom4j.io.SAXReader;
-
- @SuppressWarnings("all")
- public class StudentDemo01 {
- public static void main(String[] args) throws Exception {
- // 建立一个集合, 存储 Student 类型的对象
- ArrayList<Student> list = new ArrayList<Student>();
-
- // 解析 xml
- SAXReader saxReader = new SAXReader();
- Document document = saxReader.read("student.xml");
- Element rootElement = document.getRootElement();
- List<Element> stuElements = rootElement.elements();
- for (Element stu : stuElements) {
- // 获取 stuNo 的属性值
- String stuNo = stu.attributeValue("stuNo");
- System.out.println(stuNo);
- // 建立一个学生对象, 并为学生对象的 stuNo 的属性赋值
- Student s = new Student();
- s.setStuNo(stuNo);
- // 再获取 stu 标签下的全部子标签
- List<Element> elements = stu.elements();
- for (Element element : elements) {
- String name = element.getName(); // 获取标签名
- String value = element.getText(); // 获取标签中的文本信息
- System.out.println("\t" + name + " = " + value);
- // 将 name 和 value 赋值给建立的学生对象
- BeanUtils.setProperty(s, name, value);
- }
- // 将建立的 Student 对象添加到集合中
- list.add(s);
- }
-
- // 遍历查看集合
- for (Student stu : list) {
- System.out.println(stu);
- }
- }
- }
输出结果 :
