ホーム画面からユーザー一覧画面に遷移し、ユーザーの詳細を表示するアプリケーションを作成して
Spring JDBCの使い方について学びます⭐️
今回は前回作った画面に引き続き、JDBC Templateを実装して、**データを登録(insert)**する方法について学んでいきます^^
構成は前回の記事を参考にしてください
⭐️前回の記事
[【Java・SpringBoot】Spring JDBC(SpringBootアプリケーション実践編9)](【Java・SpringBoot】Spring JDBC(SpringBootアプリケーション実践編9))
#データの登録(insert)
###updateメソッド
- リポジトリー用クラスのinsert用メソッドを作成
- JdbcTemplateクラスを使って登録・更新・削除する
//例
int rowNumber = jdbc.update("INSERT INTO m_user(user_id," + " password," + " user_name," + " role)" + " VALUES(?, ?, ?, ?, ?, ?, ?)",
user.getUserId(),
user.getPassword(),
user.getUserName(),
user.getBirthday(),
user.getAge(),
user.isMarriage(),
user.getRole());
- 第1引数:SQL文を入れます
- 第2引数以降:PreparedStatement
- PreparedStatementには、SQL文の?の部分に入れる変数を引数にセット
VALUES(?, ?, ?, ?, ?, ?, ?)
- 引数にセットした順番にSQL文に代入される
- PreparedStatementには、SQL文の?の部分に入れる変数を引数にセット
- 戻り値には、登録したレコード数が返る
UserDaoJdbcImpl.java
package com.example.demo.login.domain.repository.jdbc;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
import com.example.demo.login.domain.model.User;
import com.example.demo.login.domain.repository.UserDao;
@Repository("UserDaoJdbcImpl")
public class UserDaoJdbcImpl implements UserDao {
@Autowired
JdbcTemplate jdbc;
// Userテーブルの件数を取得.
@Override
public int count() throws DataAccessException {
return 0;
}
/**
Userテーブルにデータを1件insert.
*/
@Override
public int insertOne(User user) throws DataAccessException {
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;
}
// Userテーブルのデータを1件取得
@Override
public User selectOne(String userId) throws DataAccessException {
return null;
}
// Userテーブルの全データを取得.
@Override
public List<User> selectMany() throws DataAccessException {
return null;
}
// Userテーブルを1件更新.
@Override
public int updateOne(User user) throws DataAccessException {
return 0;
}
// Userテーブルを1件削除.
@Override
public int deleteOne(String userId) throws DataAccessException {
return 0;
}
//SQL取得結果をサーバーにCSVで保存する
@Override
public void userCsvOut() throws DataAccessException {
}
}
#サービスクラスにinsert用のメソッド追加
- insertメソッドでリポジトリークラスのinsertOneメソッドを呼び出す
- 戻り値が0より大きければ、"insert成功"の判定結果をリターン
UserService.java
package com.example.demo.login.domain.service;
import org.springframework.beans.factory.annotation.Autowired;
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
UserDao dao;
public boolean insert(User user) {
// insert実行
int rowNumber = dao.insertOne(user);
// 判定用変数
boolean result = false;
if (rowNumber > 0) {
// insert成功
result = true;
}
return result;
}
}
#ユーザー登録画面のコントローラークラス
###サービスクラスのinsertメソッドを呼び出す
- サービスクラスのメソッドに渡すUserクラスをnewする
- Userクラスには、画面から入力された値をセット
- サービスクラスのinsertメソッドを呼び出す
boolean result = userService.insert(user);
- コンソールにinsert結果出力
SignupController.java
package com.example.demo.login.controller;
import java.util.LinkedHashMap;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import com.example.demo.login.domain.model.GroupOrder;
import com.example.demo.login.domain.model.SignupForm;
import com.example.demo.login.domain.model.User;
import com.example.demo.login.domain.service.UserService;
@Controller
public class SignupController {
@Autowired
private UserService userService;
//ラジオボタン用変数
private Map<String, String> radioMarriage;
private Map<String, String> initRadioMarrige() {
Map<String, String> radio = new LinkedHashMap<>();
// 既婚、未婚をMapに格納
radio.put("既婚", "true");
radio.put("未婚", "false");
return radio;
}
@GetMapping("/signup")
public String getSignUp(@ModelAttribute SignupForm form, Model model) {
// ラジオボタンの初期化メソッド呼び出し
radioMarriage = initRadioMarrige();
// ラジオボタン用のMapをModelに登録
model.addAttribute("radioMarriage", radioMarriage);
// signup.htmlに画面遷移
return "login/signup";
}
@PostMapping("/signup")
public String postSignUp(@ModelAttribute @Validated(GroupOrder.class) SignupForm form,
BindingResult bindingResult,
Model model) {
// 入力チェックに引っかかった場合、ユーザー登録画面に戻る
if (bindingResult.hasErrors()) {
// GETリクエスト用のメソッドを呼び出して、ユーザー登録画面に戻ります
return getSignUp(form, model);
}
// formの中身をコンソールに出して確認します
System.out.println(form);
// insert用変数
User user = new User();
user.setUserId(form.getUserId()); //ユーザーID
user.setPassword(form.getPassword()); //パスワード
user.setUserName(form.getUserName()); //ユーザー名
user.setBirthday(form.getBirthday()); //誕生日
user.setAge(form.getAge()); //年齢
user.setMarriage(form.isMarriage()); //結婚ステータス
user.setRole("ROLE_GENERAL"); //ロール(一般)
// ユーザー登録処理
boolean result = userService.insert(user);
// ユーザー登録結果の判定
if (result == true) {
System.out.println("insert成功");
} else {
System.out.println("insert失敗");
}
// login.htmlにリダイレクト
return "redirect:/login";
}
}
#SpringBootで新規登録画面を確認!
- http://localhost:8080/signup
- ユーザー登録画面からフォーム入力し、ユーザーを登録
- 成功すれば、コンソールに
insert成功
と出ました〜〜〜^o^ - 次回は、insert結果を確認できるように、複数件のselectとカウントを実装します!
//コンソール画面
メソッド開始: String com.example.demo.login.controller.SignupController.postSignUp(SignupForm,BindingResult,Model)
SignupForm(userId=nekosan@example.com, password=1, userName=NekoMohu, birthday=Sat Nov 11 00:00:00 JST 1111, age=22, marriage=false)
メソッド開始: int com.example.demo.login.domain.repository.jdbc.UserDaoJdbcImpl.insertOne(User)
メソッド終了: int com.example.demo.login.domain.repository.jdbc.UserDaoJdbcImpl.insertOne(User)
insert成功
メソッド終了: String com.example.demo.login.controller.SignupController.postSignUp(SignupForm,BindingResult,Model)
メソッド開始: String com.example.demo.login.controller.LoginController.getLogin(Model)
メソッド終了: String com.example.demo.login.controller.LoginController.getLogin(Model)