SpringBootでDBから情報を取得する。
SpringBootのJDBCを使ってDBから情報を取得する実装(お勉強)をした。
備忘録としてまとめます。
ちなみにNamedParameterJdbcTemplateやRowMapperを使う方法があるみたいですが、今やるとこんがらがるので、とりあえずはベーシックな方法をまとめました。
おそらくはNamedParameterJdbcTemplateが主流なのかな?
アノテーション
@Repository→DAOクラスに付与する系。
@Autowired→Beanを自動的にInjectionしてくれる。ざっくり言うとnewしてくれるみたいな感じ。
今回は「JdbcTemplate」をnewする。
@Autowired
JdbcTemplate jdbc;
// SpringJDBCを使う(ドライバーのインストール、DBへのconnectionをやってくれる)
// こいつを@Autowiredを使ってインスタンス化して、「jdbc.メソッド」の様に使う。
DAO側の実際のコード
・レコード1件取得(カウント数とか)
jdbc.queryForObject(【SELECT文】)
→レコード件数とか結果が1つの場合はqueryForObjectメソッドを使う。
@Override
public int count() throws DataAccessException {
// 全件取得してカウント(カラムを一つだけ取得→queryForObject)
int count = jdbc.queryForObject("SELECT COUNT(*) FROM m_user", Integer.class);
return count;
}
・レコード登録、更新、削除。
jdbc.update(【INSERT、UPDATE、DELETE文】)
→レコードを更新する場合はupdateを使う。
また返値は正常終了なら0が返る。0以外は異常終了。
@Override
public int insertOne(User user) throws DataAccessException {
//1件登録。登録、更新、削除はupdateを使う。第一引数はSQL、第二はPreparedStatement。
int rowNumber = jdbc.update("INSERT INTO m_user(user_id,"
+ " password,"
+ " user_name,"
+ " birthday,"
+ " age,"
+ " marriage,"
+ " role)"
+ " VALUES(?, ?, ?, ?, ?, ?, ?)",
user.getUserId(),
user.getPassword(),
user.getUserName(),
user.getBirthday(),
user.getAge(),
user.isMarriage(),
user.getRole());
return rowNumber; //正常終了なら0を返す。異常は0以外を返す。
}
・テーブルのデータを1件取得。
→queryForMapメソッドを使う。
※受け取る値はMap型。
@Override
public User selectOne(String userId) throws DataAccessException {
// 1件取得
Map<String, Object> map = jdbc.queryForMap("SELECT * FROM m_user"
+ " WHERE user_id = ?", userId);
// 結果返却用の変数
User user = new User();
// 取得したデータを結果返却用の変数にセットしていく
user.setUserId((String) map.get("user_id")); //ユーザーID
user.setPassword((String) map.get("password")); //パスワード
user.setUserName((String) map.get("user_name")); //ユーザー名
user.setBirthday((Date) map.get("birthday")); //誕生日
user.setAge((Integer) map.get("age")); //年齢
user.setMarriage((Boolean) map.get("marriage")); //結婚ステータス
user.setRole((String) map.get("role")); //ロール
return user;
}
・テーブルの全データを取得。
→queryForListメソッドを使う。
※受け取る値は上記Map型を更にList化。
@Override
public List<User> selectMany() throws DataAccessException {
// M_USERテーブルのデータを全件取得(queryForList)
// map→keyとvalueの組み合わせ。それをListで受け取る。
List<Map<String, Object>> getList = jdbc.queryForList("SELECT * FROM m_user");
System.out.println("リスト=" + getList);
// 結果返却用の変数
List<User> userList = new ArrayList<>();
// 取得したデータを結果返却用のListに格納していく
for (Map<String, Object> map : getList) {
System.out.println("Map=" + map);
//Userインスタンスの生成
User user = new User();
// Userインスタンスに取得したデータをセットする
user.setUserId((String) map.get("user_id")); //ユーザーID
user.setPassword((String) map.get("password")); //パスワード
user.setUserName((String) map.get("user_name")); //ユーザー名
user.setBirthday((Date) map.get("birthday")); //誕生日
user.setAge((Integer) map.get("age")); //年齢
user.setMarriage((Boolean) map.get("marriage")); //結婚ステータス
user.setRole((String) map.get("role")); //ロール
//結果返却用のListに追加
userList.add(user);
}
System.out.println("リスト=" + getList);
return userList;
}
とりあえず以上です。
ちなみに@Overrideと書いているのは、DAO自体をinterface化して、implimentsするのが主流らしく、基本的にはメソッドには@Overrideするとのことです。
Author And Source
この問題について(SpringBootでDBから情報を取得する。), 我々は、より多くの情報をここで見つけました https://qiita.com/YJ2222/items/ee9b344c58c23af142dc著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .