栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

在IDEA中使用apache-dbutils查询返回对象时封装属性的问题

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在IDEA中使用apache-dbutils查询返回对象时封装属性的问题

此处是操作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 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给属性别名。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/760285.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号