JDBC--使用beanutils工具类操作JavaBean

1、在JavaEE中,Java类的属性通过getter,setter来定义;

2、可使用BeanUtils工具包来操作Java类的属性:

--Beanutils是由Apache公司开发,能够方便对Bean类进行简便的操作

--涉及到的包:

(1)   BeanUtils相关包

commons-beanutils-1.8.3.jar

commons-beanutils-1.8.3-javadoc.jar

commons-beanutils-1.8.3-javadoc.jar

commons-beanutils-bean-collections-1.8.3.jar

commons-beanutils-core-1.8.3.jar

(2)   Logic4j相关包

commons-logging.jar

3、使用举例:

Bean类Customer:

public class Customer {

    private int id;
    private String name;
    private Date birth;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Date getBirth() {
        return birth;
    }

    public void setBirth(Date birth) {
        this.birth = birth;
    }

    public Customer(int id, String name, Date birth) {
        super();
        this.id = id;
        this.name = name;
        this.birth = birth;
    }

    public Customer() {
    }
}

使用BeanUtils的setProperty()和getProperty()方法设置和获取属性:

public void testBeanUtils() throws Exception{
    Customer customer = new Customer();
    //设置customer的name属性
    BeanUtils.setProperty(customer, "name", "Bob");
    System.out.println(customer);
    //获取customer的属性值
    String name = (String)BeanUtils.getProperty(customer, "name");
    System.out.println(name);
}

4、在JDBC中,当我们在编写DAO中的通用方法来进行查询时,可以使用BeanUtils类来为属性赋值(第32行):

 1 public <T> T get(Class<T> clazz, String sql, Object ...args){
 2     T entity = null;
 3     Connection conn = null;
 4     PreparedStatement ps = null;
 5     ResultSet rs = null;
 6     try{
 7         conn = DAO.getConnection();
 8         ps = conn.prepareStatement(sql);
 9         for(int i = 0; i < args.length; i++){
10             ps.setObject(i + 1, args[i]);
11         }
12         
13         rs = ps.executeQuery();
14         Map<String, Object> map = new HashMap<String, Object>();
15         ResultSetMetaData rsmd = rs.getMetaData();
16         
17         if(rs.next()){
18             for(int i = 0; i < rsmd.getColumnCount(); i++){
19                 String columnLabel = rsmd.getColumnLabel(i + 1);
20                 Object columnValue = rs.getObject(columnLabel);
21             
22                 map.put(columnLabel, columnValue);
23             }
24         }
25         
26         if(map.size() > 0){
27             entity = clazz.newInstance();
28             for(Map.Entry<String, Object> entry : map.entrySet()){
29                 String fieldName = entry.getKey();
30                 Object value = entry.getValue();
31                 //使用BeanUtils工具类来为属性赋值
32                 BeanUtils.setProperty(entity, fieldName, value);
33                 /**使用反射的方式为属性赋值
34                 Field field = clazz.getDeclaredField(key);
35                 field.setAccessible(true);
36                 field.set(entity, value);*/
37             }
38             return entity;
39         }
40         
41     }catch(Exception e){
42         e.printStackTrace();
43     }finally{
44         if(rs != null){
45             try {
46                 rs.close();
47             } catch (SQLException e) {
48                 e.printStackTrace();
49             }
50         }
51         if(ps != null){
52             try {
53                 ps.close();
54             } catch (SQLException e) {
55                 e.printStackTrace();
56             }
57         }
58         if(conn != null){
59             try {
60                 conn.close();
61             } catch (SQLException e) {
62                 e.printStackTrace();
63             }
64         }
65     }
66     return entity;
67 }

 

posted on 2015-11-20 20:11  _taoGe  阅读(532)  评论(0编辑  收藏  举报