在使用apache-dbutils的时候,查询过程中如果创建的javabean对象里的属性比查询到的字段多,则此时创建的对象属性值是null,引用类型的属性默认null。
创建测试表和测试类:
#创建一个测试表 CREATE TABLE test0( id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(10)); INSERT INTO test0 VALUES(NULL,'a'); INSERT INTO test0 VALUES(NULL,'b'); INSERT INTO test0 VALUES(NULL,'c');
//创建一个多一个属性 pwd 的javabean类
public class test0 {
private Integer id;
private String name;
private String pwd;
public test0() {
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
@Override
public String toString() {
return "test0{" +
"id=" + id +
", name='" + name + ''' +
", pwd='" + pwd + ''' +
'}';
}
}
测试方法:
public void query(){
QueryRunner qr = new QueryRunner();
Connection connection= null;
try {
connection = JDBCUtilsByDruid.getConnection();
//这里是使用的一个自己创建的管理数据库连接关闭的工具类
List query = qr.query(connection, "select * from test0", new BeanListHandler(test0.class));
for (test0 t : query){
System.out.println(t);
}
} catch (SQLException throwables) {
throw new RuntimeException(throwables);
} finally {
JDBCUtilsByDruid.closeConnection(null,null,connection);
}
}
结果如下:
可以看到如果创建的javabean对象中比表中的字段多,并不会报错,此时值为null(因为在类中属性都有默认值,引用类型对应的是null)。
如果创建的javabean类里面的属性名和需要查询的表里的字段名不相同,则无法赋值成功,会是Null。因为底层是通过我们给出的Class对象通过反射找到和表中字段对应的属性,利用setXX()方法给它赋值,找不到这个对应的属性则无法复制,而属性是有默认值的,引用类型默认是Null。
例如在创建表的时候将name换成name0:
CREATE TABLE test0( id INT PRIMARY KEY AUTO_INCREMENT, NAME0 VARCHAR(10));
此时运行结果为:
如果在多表查询的时候有表中有相同名字的字段,此时应该在查询的时候使用AS给属性别名。



