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

Nit*_*tal 2 java jdbc apache-commons-dbutils

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

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

  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,
) 
Run Code Online (Sandbox Code Playgroud)

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
}
Run Code Online (Sandbox Code Playgroud)

Main.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);
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

袁文涛*_*袁文涛 6

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);    
Run Code Online (Sandbox Code Playgroud)

  • 你应该解释你的答案。 (3认同)
  • 抱歉,我是中国人,我的英语不好,我认为您只需要获取关键字。只需使用hashMap将列名转换为bean属性即可。您可以单击此处https://commons.apache.org/proper/ commons-dbutils / examples.html (2认同)