ども、開発部の小野です。
今、簡易O/Rマッパー作っています。今回は簡易O/Rマッパーについて書いてみます。
O/Rマッパーって何?
sqlを直で全部書かなくても、DBにsqlを投げてくれるやつです。
検索条件をちょっと書いてあげるだけで、sqlを投げてくれます。時短ですね。
実際
作ってみた簡易O/Rマッパーです。
public class Work1 { public static void main (String[] arg) throws SQLException{ JdbcManager ajm = new JdbcManager("jdbc:mysql://localhost:3306/data?characterEncoding=UTF-8","root","password"); List<Map<String,Object>> resultMap1 = ajm.selectBySql("select emp_nm from emp_mst").getResultList(); } }
このWork1クラスで簡易O/Rマッパーを実際に使っています。JdbcManagerがそれですね。
ではJdbcManagerクラスを見てみましょう。
public class JdbcManager { String db_url; String db_user_id; String db_user_password; public JdbcManager(String db_url,String db_user_id,String db_user_password){ this.db_url = db_url; this.db_user_id = db_user_id; this.db_user_password = db_user_password; } public SqlSelect selectBySql(String sql){ SqlSelect ss = new SqlSelect(this,sql); return ss; } public AutoSelect from(String tableNm){ AutoSelect as = new AutoSelect(this, tableNm); return as; } }
selectBySqlというメソッドがありますね。このメソッドの引数にsqlを渡して、検索を実行しています。
ではselectBySqlメソッドの戻り値である、SqlSelectクラスを見てみましょう。
public class SqlSelect { JdbcManager ajm; String sql; public SqlSelect(JdbcManager ajm, String sql) { this.ajm = ajm; this.sql = sql; } public List<Map<String, Object>> getResultList() throws SQLException{ Select sl =new Select(this.ajm,this.sql); return sl.sqlExecute(); } }
getResultListというメソッドがありますね。このメソッドを実行することで、検索結果がListになって帰ってきます。上で見ると分かるようにMapのListですね。
メソッドの中を見てみると、さらにSelectクラスのslというインスタンスでsqlExecuteというメソッドを使用しています。
このメソッドで、実際にクエリーを実行しています。
Selectクラスを見てみましょう。
public class Select { JdbcManager ajm; String sql; public Select(JdbcManager ajm, String sql) { this.ajm = ajm; this.sql = sql+";"; } public List<Map<String, Object>> sqlExecute() throws SQLException { try (Connection connection = DriverManager.getConnection(this.ajm.db_url, this.ajm.db_user_id, this.ajm.db_user_password); Statement statement = connection.createStatement();) { ResultSet rs = statement.executeQuery(this.sql); ResultSetMetaData rsmd = rs.getMetaData(); List<Map<String, Object>> resultList = new ArrayList<Map<String, Object>>(); while (rs.next()) { Map<String, Object> map = new HashMap<String, Object>(); for (int i = 1; i <= rsmd.getColumnCount(); i++) { map.put(rsmd.getColumnName(i), rs.getObject(i)); } resultList.add(map); } rs.close(); return resultList; } } }
ConnectionにJdbcManagerインスタンスに持たせた、DBのURL,user名,パスワードを渡して、DBサーバーに接続しています。
あとは、Work1クラスから持ってきたsqlをexecuteQueryでDBに投げ込んでみるだけです。単簡ですね。
帰ってきた結果をリストに整理してチョチョイです。
まとめ
O/Rマッパーで単簡に時短。
次はテーブル名やwhere句の要素だけ渡して、クエリを実行してくれるやつも紹介出来たらいいですね~。