Zuordnung von Datenbank-Spalte-Namen zu Java-Klasse, die Felder mithilfe von apache-commons-dbutils

Ich würde gerne zum füllen eines POJO - (State.java) von der DB mit Apache DBUtils Bibliothek. Da jedoch die Namen der Bean-Eigenschaften, die nicht genau übereinstimmen mit DB-Spalte mit Namen von einigen der Eigenschaften übrig sind ungefüllt.

Nun, ich habe einige der Forschung auf diesem durch googeln und fand, dass dies kann erreicht werden durch:

  1. Spalte aliasing beim schreiben einer SQL-Abfrage (was ich nicht bevorzugen, da ich mehrere verbindungen in einige größere Tabellen und daher würde erfordern viel aliasing)
  2. Mit BeanProcessor (konnte nicht finden einen wirklich guten Beispiel überall)

Kann jemand ein gutes Beispiel, wie BeanProcessor zuordnen von Spaltennamen zu den Eigenschaften? Tweaking das Beispiel würde mir noch besser.

DB-Tabelle

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
}

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

}
  • Siehe meine Antwort. Hatte eine Menge tun, um das Graben in den java-docs und den Quellcode, um zu einer Lösung zu kommen 🙂
  • Ja, bot ich gerade getan habe und immer ArrayIndexOutofBoundsException. Siehe mein code oben aktualisiert.
  • Das ist nicht wie stackoverflow funktioniert. Sie können nicht nehmen Sie eine Antwort zu Ihrer Frage und zu halten, erstellen Sie neue Fragen. Wenn Sie ein Problem mit meiner Antwort sind, können Sie post einen Kommentar auf meine Antwort.
  • Entschuldige mich für diese, wie ich nicht wussten, wie Sie die änderungen anzeigen, die ich Tat, um meinen code zu Sie und daher ich bearbeitet habe, die ursprüngliche Frage. Der "Kommentar" - Sektion nur erlaubt, mich zu fügen Sie sehr wenig Informationen.
  • Kein problem. Aber das ist nicht, wie stackoverflow funktioniert. Sie können nicht nur halten der Inkrementierung Ihre Frage. Sie können post eine neue Frage anstatt Sie zu verändern, diese Frage. Ich glaube, ich habe das beantwortet deine ursprüngliche Frage How to use BeanProcessor to map column names to properties
  • Vereinbart und es ist definitiv ein Fortschritt von der früheren version von meinem Programm 🙂

InformationsquelleAutor Nital | 2015-04-24
Schreibe einen Kommentar