ライブラリを使用して DB から POJO (State.java) を作成したいと思いApache DBUtils
ます。ただし、Bean プロパティの名前が DB 列名と正確に一致しないため、一部のプロパティは未入力のままです。
さて、グーグルでこれについていくつかの調査を行ったところ、これは次の方法で達成できることがわかりました。
- SQLクエリを書いているときの列のエイリアシング(いくつかの大きなテーブルに複数の結合があり、多くのエイリアシングが必要になるため、私は好まない)
- BeanProcessor の使用 (どこにも本当に良い例が見つかりませんでした)
BeanProcessor
列名をプロパティにマップする方法の良い例を誰か提供できますか? 私が提供した例を微調整すると、さらに良くなります。
DB テーブル
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,
)
状態.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);
}
}
}