4
2

More than 3 years have passed since last update.

【Java・SpringBoot】Spring JDBC / BeanPropertyRowMapper(SpringBootアプリケーション実践編16)

Posted at

ホーム画面からユーザー一覧画面に遷移し、ユーザーの詳細を表示するアプリケーションを作成して、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;
    }
}

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2