此处是操作MySQL数据库
-
在使用
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<test0> query = qr.query(connection, "select * from test0", new BeanListHandler<test0>(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
给属性别名。