参数: 1.Connection conn: 连接对象 2.String sql: sql语句,参数用?代替 3.ResultSetHandler rsh: 结果集处理器,接口,必然传递实现类对象 实现类: 根据不同的方式处理ResultSet,返回不同结果 4.Object… params: 可变参数,传递参数列表,数组,不传参 作用: 给sql中?进行赋值的 BeanHandler: 返回指定类型的对象
@Test public void queryUserByUid() throws SQLException { /* 结果集处理器: BeanHandler 作用: 把查询结果的第一行,封装成指定类型的对象 构造方法: public BeanHandler(Class clazz): 传递Class类型的对象 */ QueryRunner qr = new QueryRunner(); String sql = "select * from users where uid=?"; /* new BeanHandler<Users>(Users.class): 告诉它,把结果封装成什么类型的对象 */ Users user = qr.query(C3P0Util.getConnection(), sql, new BeanHandler<Users>(Users.class), "u001"); System.out.println(user); }
public class BeanHandler<T> implements ResultSetHandler<T> { private final Class<T> type; private final RowProcessor convert; public BeanHandler(Class<T> type) { this(type, ArrayHandler.ROW_PROCESSOR); } public BeanHandler(Class<T> type, RowProcessor convert) { this.type = type; this.convert = convert; } public T handle(ResultSet rs) throws SQLException { return rs.next() ? this.convert.toBean(rs, this.type) : null; } } // 1、BeanHandler<T>是泛型,创建对象的时候需要指定泛型, // 2、有个Class类型的成员变量,public BeanListHandler(Class clazz): 传递Class类型的对象,告诉结果集处理器,List集合中存储的数据的类型 // 3、所以在new BeanHandler的时候把Class<T>写成User.class