gpt4 book ai didi

java - 如何使用 apache-commons-dbutils 将数据库列名映射到 Java 类字段

转载 作者:行者123 更新时间:2023-12-04 08:40:42 25 4
gpt4 key购买 nike

我想使用 Apache DBUtils 库从数据库中填充 POJO (State.java)。但是,由于 Bean 属性的名称与数据库列名称不完全匹配,因此某些属性未填充。

现在,我通过谷歌搜索对此做了一些研究,发现这可以通过以下方式实现:

  1. 在编写 SQL 查询时使用列别名(我不喜欢这样做,因为我在一些较大的表中有多个连接,因此需要大量别名)
  2. 使用 BeanProcessor(无法在任何地方找到真正好的示例)

谁能提供一个很好的例子来说明如何使用 BeanProcessor 将列名映射到属性?调整提供给我的示例会更好。

数据库表

CREATE TABLE public.states (
state_id INTEGER DEFAULT nextval('states_seq'::regclass) NOT NULL,
state_cd VARCHAR(2) NOT NULL,
name VARCHAR(100) NOT NULL,
tax_pct NUMERIC(10,2) DEFAULT 0.00 NOT NULL,
active CHAR(1) DEFAULT 'Y'::bpchar NOT NULL,
)

State.java

  public class State implements Serializable {

private int stateId;
private String stateCode;
private String name;
private BigDecimal taxPct = new BigDecimal(0);
private Date expiryDate;
private String createdBy;
private Date createdOn;
private String active;

//getters and setters here
}

主.java

    public class Main {

public static void main(String[] args) {
String url = "jdbc:postgresql://gsi-547576.gsiccorp.net:5432/istore-db";
String driver = "org.postgresql.Driver";
String user = "postgres";
String pwd = "postgres";
Connection conn = null;
List<State> states = null;

try {
DbUtils.loadDriver(driver);
conn = DriverManager.getConnection(url, user, pwd);

states = (List<State>) new QueryRunner().query(conn, "select * from states a where a.active='Y'", new BeanListHandler(State.class);

System.out.println("states:: " + states);

} catch (SQLException ex) {
ex.printStackTrace();
} finally {
DbUtils.closeQuietly(conn);
}
}

}

最佳答案

Map<String,String> mapColumnsToProperties = new HashMap<>();
//mapping you database to entity here;
mapColumnsToProperties.put("database_column","entity_property");
BeanProcessor beanProcessor = new BeanProcessor(mapColumnsToProperties);
RowProcessor rowProcessor = new BasicRowProcessor( beanProcessor);
ResultSetHandler<List<Entity>> resultSetHandler = new BeanListHandler<Entity>(Entity.class,rowProcessor);
List<Entity> entityLists = queryRunner.query(findListSQL, resultSetHandler);

关于java - 如何使用 apache-commons-dbutils 将数据库列名映射到 Java 类字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29849200/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com