BeanHandler、BeanListHandler和BeanMapHandler
BeanHandler、BeanListHandler和BeanMapHandler实现类是将结果集中的数据封装到对应的JavaBean实例中,这也是实际开发中最常用的结果集处理方法。在演示这三个类的使用之前,需要先创建一个JavaBean实例类User,具体实现方式如例1所示:
例1 User.java
1 package cn.itcast.jdbc.example.domain;
2 public class User {
3 private int id;
4 private String name;
5 private String password;
6 public int getId() {
7 return id;
8 }
9 public void setId(int id) {
10 this.id = id;
11 }
12 public String getName() {
13 return name;
14 }
15 public void setName(String name) {
16 this.name = name;
17 }
18 public String getPassword() {
19 return password;
20 }
21 public void setPassword(String password) {
22 this.password = password;
23 }
24 }
创建类ResultSetTest3,在类ResultSetTest3中写一个方法testBeanHandler(),具体代码如例2所示:
例2 ResultSetTest3.java
1 package cn.itcast.jdbc.example.dao;
2 import java.sql.SQLException;
3 import org.apache.commons.dbutils.handlers.BeanHandler;
4 import cn.itcast.jdbc.example.domain.User;
5 public class ResultSetTest3 {
6 public static void testBeanHandler() throws SQLException {
7 BaseDao basedao=new BaseDao();
8 String sql="select * from user where id=?";
9 User user =
10 (User) basedao.query(sql,new BeanHandler(User.class),1);
11 System.out.print("id为1的User对象的name值为:"+user.getName());
12 }
13 public static void main(String[] args) throws SQLException {
14 testBeanHandler ();
15 }
16 }
运行类ResultSetTest3,执行结果如图1所示。
图1 运行结果
由输出结果可以看出,BeanHandler成功将id为1的数据存入到了实体对象user中。
接下来创建类ResultSetTest4,写一个方法testBeanListHandler()来演示BeanListHandler类对结果集的处理结果,具体如例3所示:
例3 ResultSetTest4.java
1 package cn.itcast.jdbc.example.dao;
2 import java.sql.SQLException;
3 import java.util.ArrayList;
4 import org.apache.commons.dbutils.handlers.BeanListHandler;
5 import cn.itcast.jdbc.example.domain.User;
6 public class ResultSetTest4 {
7 public static void testBeanListHandler() throws SQLException {
8 BaseDao basedao = new BaseDao();
9 String sql = "select * from user ";
10 ArrayList<User> list = (ArrayList<User>) basedao.query(sql,
11 new BeanListHandler(User.class));
12 for (int i = 0; i < list.size(); i++) {
13 System.out.println("第" + (i + 1) + "条数据的username值为:"
14 + list.get(i).getName());
15 }
16 }
17 public static void main(String[] args) throws SQLException {
18 testBeanListHandler ();
19 }
20 }
运行类ResultSetTest4,执行结果如图2所示。
图2 运行结果
由输出结果可以看出,testBeanListHandler ()方法可以将每一行的数据都封装到user实例中,并存放到list中。接下来创建类ResultSetTest5,写一个方法testBeanMapHandler()来演示BeanMapHandler类对结果集的处理结果,具体如例4所示:
例4 ResultSetTest5.java
1 package cn.itcast.jdbc.example.dao;
2 import java.sql.SQLException;
3 import java.util.Map;
4 import org.apache.commons.dbutils.handlers.BeanMapHandler;
5 import cn.itcast.jdbc.example.domain.User;
6 public class ResultSetTest5 {
7 public static void testBeanMapHandler() throws SQLException {
8 String sql = "select id, name, password from user";
9 Map<Integer, User> map = (Map<Integer, User>) BaseDao.query(sql,
10 new BeanMapHandler<Integer, User>(User.class, "id"));
11 // zhangsan的id值为1
12 User u = map.get(1);
13 String uName = u.getName();
14 String uPassword = u.getPassword();
15 System.out.print("id为1的User对象的name值为:" + uName + ",
16 password值为:"+ uPassword);
17 }
18 public static void main(String[] args) throws SQLException {
19 testBeanMapHandler();
20 }
21 }
运行类ResultSetTest5,执行结果如图3所示。
图3 运行结果
由输出结果可以看出,testBeanMapHandler()方法成功的将每一行的数据都封装到user实例中,并存放到Map中。