Goalist Developers Blog

簡易O/Rマッパー作ってみた。

ども、開発部の小野です。

今、簡易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句の要素だけ渡して、クエリを実行してくれるやつも紹介出来たらいいですね~。