问题解决:
1、使用DBUtils查询数据,如果使用ArrayListHandler等都能够返回正确值,但使用BeanListHandler 和 BeanHandler则一直返回null;
解决方法1(使用DBUtils1.5版本):
// 创建一个BeanProcessor对象
// GenerousBeanProcessor 仅仅重写了父类BeanProcessor的mapColumnsToProperties方法
BeanProcessor bean = new GenerousBeanProcessor ();
// 将GenerousBeanProcessor对象传递给BasicRowProcessor
RowProcessor processor = new BasicRowProcessor(bean);
// 最后使用GenerousBeanProcessor的mapColumnsToProperties处理表字段到javabean的属性映射
Users rs = runner.query(sql, new BeanHandler<Users>(Users.class, processor));
// Print: BeanHandler: Users{id=1, userName='测试用户1', loginName='test1', userPassword='jiseflwes', userLevel=10, userLock=true}
System.out.println("BeanHandler: " + rs);
2、DBUtils不要求实体类名称必须与数据库表名称一致,但写SQL语句时必须使用数据库表名
1、使用DBUtils查询数据,如果使用ArrayListHandler等都能够返回正确值,但使用BeanListHandler 和 BeanHandler则一直返回null;
解决方法1(使用DBUtils1.5版本):
使bean的字段与数据库字段名称一致即可,或者说,使该实体类各字段的setter和getter方法的名字要与结果集(也可以说是数据库表字段名称,但不要求该bean的私有成员与表结果集列名一致)一一对应,只有这样才能将结果集封装成JavaBean对象,对比可见Exceptionmodel和IP_LABEL_TYPE。但这一方法操作起来略麻烦,以下方法更好:
最终解决方法:使用DBUtils1.6版本提供的BeanProcessor类的子类GenerousBeanProcessor就可以解决。如下:
// 创建一个BeanProcessor对象
// GenerousBeanProcessor 仅仅重写了父类BeanProcessor的mapColumnsToProperties方法
BeanProcessor bean = new GenerousBeanProcessor ();
// 将GenerousBeanProcessor对象传递给BasicRowProcessor
RowProcessor processor = new BasicRowProcessor(bean);
// 最后使用GenerousBeanProcessor的mapColumnsToProperties处理表字段到javabean的属性映射
Users rs = runner.query(sql, new BeanHandler<Users>(Users.class, processor));
// Print: BeanHandler: Users{id=1, userName='测试用户1', loginName='test1', userPassword='jiseflwes', userLevel=10, userLock=true}
System.out.println("BeanHandler: " + rs);
2、DBUtils不要求实体类名称必须与数据库表名称一致,但写SQL语句时必须使用数据库表名