ホーム画面からユーザー一覧画面に遷移し、ユーザーの詳細を表示するアプリケーションを作成して、Spring JDBCの使い方について学びます⭐️
前回はRowMapperについて学びました。今回はBeanPropertyRowMapperを実践して学びます^^
構成は前回/これまでの記事を参考にしてください
⭐️前回の記事
【Java・SpringBoot】Spring JDBC / RowMapper(SpringBootアプリケーション実践編15)
#BeanPropertyRowMapper
-
RowMapper自体を用意しなくてOK!
- BeanPropertyRowMapperでは、データベースから取得してきたカラム名と同一のフィールド名がクラスにあれば、自動でマッピングをしてくれる!
- →つまり、RowMapperのようにどのカラムとどのフィールドを一致させるか、いちいち用意する必要がない
- 自動でマッピングするためのルール
- 1.カラム名は単語をアンダースコアで区切る(スネークケース)例:user_id
- 2.フィールド名は2つ目の単語から大文字にする(キャメルケース)例:StringuserId;
- AS句を使用して別名でもマッピングが可能
- 以下のUserDaoJdbcImpl3では、UserDaoJdbcImplをextends(継承)し、select文の部分だけをOverride
UserDaoJdbcImpl3.java
package com.example.demo.login.domain.repository.jdbc;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Repository;
import com.example.demo.login.domain.model.User;
@Repository("UserDaoJdbcImpl3")
public class UserDaoJdbcImpl3 extends UserDaoJdbcImpl {
@Autowired
private JdbcTemplate jdbc;
//ユーザー1件取得
@Override
public User selectOne(String userId) {
//1件取得用SQL
String sql = "SELECT * FROM m_user WHERE user_id = ?";
//RowMapperの生成
RowMapper<User> rowMapper = new BeanPropertyRowMapper<User>(User.class);
//SQL実行
return jdbc.queryForObject(sql, rowMapper, userId);
}
//ユーザー全件取得
@Override
public List<User> selectMany() {
//M_USERテーブルのデータを全件取得するSQL
String sql = "SELECT * FROM m_user";
//RowMapperの生成
RowMapper<User> rowMapper = new BeanPropertyRowMapper<User>(User.class);
//SQL実行
return jdbc.query(sql, rowMapper);
}
}
#サービスクラスでBean指定
- サービスクラスからUserDaoJdbcImpl3を使うように、Bean名をセット
- コード全文は下記参考
UserService.java
//中略
@Service
public class UserService {
@Autowired
@Qualifier("UserDaoJdbcImpl3")
UserDao dao;
//中略
#SpringBootを起動してホーム画面確認!
- http://localhost:8080/home
- ユーザー一覧、ユーザー詳細画面に移ると、コンソールの表示がUserDaoJdbcImpl3に変わっています
- これでBeanPropertyRowMapperを使うことができました〜^o^
メソッド開始: String com.example.demo.login.controller.HomeController.getUserDetail(SignupForm,Model,String)
userId = nekomofu@xxx.co.jp
メソッド開始: User com.example.demo.login.domain.repository.jdbc.UserDaoJdbcImpl3.selectOne(String)
メソッド終了: User com.example.demo.login.domain.repository.jdbc.UserDaoJdbcImpl3.selectOne(String)
メソッド終了: String com.example.demo.login.controller.HomeController.getUserDetail(SignupForm,Model,String)
#(参考)コード全文
UserService.java
package com.example.demo.login.domain.service;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.example.demo.login.domain.model.User;
import com.example.demo.login.domain.repository.UserDao;
@Service
public class UserService {
@Autowired
@Qualifier("UserDaoJdbcImpl3")
UserDao dao;
public boolean insert(User user) {
// insert実行
int rowNumber = dao.insertOne(user);
// 判定用変数
boolean result = false;
if (rowNumber > 0) {
// insert成功
result = true;
}
return result;
}
public int count() {
return dao.count();
}
public List<User> selectMany() {
// 全件取得
return dao.selectMany();
}
public User selectOne(String userId) {
// selectOne実行
return dao.selectOne(userId);
}
public boolean updateOne(User user) {
// 判定用変数
boolean result = false;
// 1件更新
int rowNumber = dao.updateOne(user);
if (rowNumber > 0) {
// update成功
result = true;
}
return result;
}
public boolean deleteOne(String userId) {
// 1件削除
int rowNumber = dao.deleteOne(userId);
// 判定用変数
boolean result = false;
if (rowNumber > 0) {
// delete成功
result = true;
}
return result;
}
}