Spring bootにてMy Batisを利用しupdate・delete処理作成中の質問
Q&A
Closed
解決したいこと
Spring解体新書という書籍で8章部分を実施中です。
エラーなくコーディング自体はできているのですが、ユーザ詳細画面より、削除ボタンを押しても、ユーザ一覧にリダイレクトされるだけで、ユーザが削除されない。
更新ボタンを押しても、ユーザ一覧にリダイレクトさえされず何も起こらないという状態です。。
(動作が期待通りの動きではない。)
本来であれば、更新ボタン押下で、ユーザ一覧画面に遷移&情報更新
削除ボタンでユーザ一覧画面より該当のユーザが削除されていることを実践したいです。
恐らくSQL関連が問題ではないだろうかと思っていますが、エラーではないのでどこを見れば良いか検討がつかず、改善策が見つかっていません。。可能でしたら気になる点をご指摘、アドバイスお願いいたします。。
発生している問題・エラー
■削除ボタン押下時のログ
2024-10-15T23:51:33.106+09:00[0;39m [32mDEBUG[0;39m [35m12856[0;39m [2m---[0;39m [2m[SpringBootSample] [nio-8080-exec-1][0;39m [2m[0;39m[36mc.e.d.repository.UserMapper.deleteOne [0;39m [2m:[0;39m ==> Preparing: delete from m_user where user_Id = ?
[2m2024-10-15T23:51:33.108+09:00[0;39m [32mDEBUG[0;39m [35m12856[0;39m [2m---[0;39m [2m[SpringBootSample] [nio-8080-exec-1][0;39m [2m[0;39m[36mc.e.d.repository.UserMapper.deleteOne [0;39m [2m:[0;39m ==> Parameters: (String)
[2m2024-10-15T23:51:33.118+09:00[0;39m [32mDEBUG[0;39m [35m12856[0;39m [2m---[0;39m [2m[SpringBootSample] [nio-8080-exec-1][0;39m [2m[0;39m[36mc.e.d.repository.UserMapper.deleteOne [0;39m [2m:[0;39m <== Updates: 0
[2m2024-10-15T23:51:33.149+09:00[0;39m [32mDEBUG[0;39m [35m12856[0;39m [2m---[0;39m [2m[SpringBootSample] [nio-8080-exec-8][0;39m [2m[0;39m[36mc.e.demo.repository.UserMapper.findMany [0;39m [2m:[0;39m ==> Preparing: select user_id as userId ,password ,user_name as userName ,birthday ,age ,gender ,department_id as departmentId ,role from m_user
[2m2024-10-15T23:51:33.150+09:00[0;39m [32mDEBUG[0;39m [35m12856[0;39m [2m---[0;39m [2m[SpringBootSample] [nio-8080-exec-8][0;39m [2m[0;39m[36mc.e.demo.repository.UserMapper.findMany [0;39m [2m:[0;39m ==> Parameters:
[2m2024-10-15T23:51:33.346+09:00[0;39m [32mDEBUG[0;39m [35m12856[0;39m [2m---[0;39m [2m[SpringBootSample] [nio-8080-exec-8][0;39m [2m[0;39m[36mc.e.demo.repository.UserMapper.findMany [0;39m [2m:[0;39m <== Total: 2
■更新ボタン押下時のログ
ボタンを押してもログも出ません。
該当するソースコード
■UserMapper.java
package com.example.demo.repository;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import com.example.demo.domain.user.model.MUser;
@Mapper
public interface UserMapper {
/**ユーザー登録*/
public int insertOne(MUser user);
/** ユーザー取得*/
public List<MUser> findMany();
/**ユーザー取得(1件) */
public MUser findOne(String userId);
/** ユーザー更新(1件)*/
public void updateOne(@Param("userId") String userId,
@Param("password") String password,
@Param("userName") String userName);
/**ユーザー削除(1件) */
public int deleteOne(@Param("userId") String userId);
}
■UserMapper.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- Mapperとxmlのマッピング -->
<mapper namespace="com.example.demo.repository.UserMapper">
<!-- マッピング定義(ユーザー) -->
<resultMap type="com.example.demo.domain.user.model.MUser" id="user">
<id column="user_id" property="userId" />
<result column="password" property="password" />
<result column="user_name" property="userName" />
<result column="birthday" property="birthday" />
<result column="age" property="age" />
<result column="gender" property="gender" />
<result column="department_id" property="departmentId" />
<result column="role" property="role" />
</resultMap>
<!-- ユーザー1件登録 -->
<insert id="insertOne">
insert into m_user(
user_id
,password
,user_name
,birthday
,age
,gender
,department_id
,role
)
values (
#{userId}
,#{password}
,#{userName}
,#{birthday}
,#{age}
,#{gender}
,#{departmentId}
,#{role}
)
</insert>
<!-- ユーザー複数件取得 -->
<select id="findMany" resultType="com.example.demo.domain.user.model.MUser">
select
user_id as userId
,password
,user_name as userName
,birthday
,age
,gender
,department_id as departmentId
,role
from
m_user
</select>
<!-- ユーザー1件検索 -->
<select id="findOne" resultMap="user">
select
user_id as userId
,password
,user_name as userName
,birthday
,age
,gender
,department_id as departmentId
,role
from
m_user
where
user_id =#{userId}
</select>
<!-- ユーザー1件更新 -->
<update id="updateOne">
update
m_user
set
password = #{password}
,user_Name = #{userName}
where
user_Id = #{userId}
</update>
<!-- ユーザー1件削除 -->
<delete id="deleteOne">
delete from
m_user
where
user_Id = #{userId}
</delete>
</mapper>
■UserService.java
package com.example.demo.domain.user.service;
import java.util.List;
import com.example.demo.domain.user.model.MUser;
public interface UserService {
/*ユーザー登録*/
public void signup(MUser user);
/** ユーザー取得 */
public List<MUser> getUsers();
/** ユーザ取得(1件)*/
public MUser getUserOne(String userId);
/** ユーザー更新(1件)*/
public void updateUserOne(String userId,String password, String userName);
/** ユーザー削除(1件)*/
public void deleteUserOne(String userId);
}
■UserServiceImpl.java
package com.example.demo.domain.user.service.impl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.example.demo.domain.user.model.MUser;
import com.example.demo.domain.user.service.UserService;
import com.example.demo.repository.UserMapper;
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper mapper;
/*ユーザ登録*/
@Override
public void signup(MUser user) {
user.setDepartmentId(1); //部署
user.setRole("ROLE_GENERAL");
mapper.insertOne(user);
}
/** ユーザー取得 */
@Override
public List<MUser> getUsers() {
return mapper.findMany();
}
/** ユーザー取得(1件)*/
@Override
public MUser getUserOne(String userId) {
return mapper.findOne(userId);
}
/** ユーザー更新(1件) */
@Override
public void updateUserOne(String userId, String password, String userName) {
// TODO 自動生成されたメソッド・スタブ
mapper.updateOne(userId, password, userName);
}
/** ユーザー削除(1件) */
@Override
public void deleteUserOne(String userId) {
// TODO 自動生成されたメソッド・スタブ
mapper.deleteOne(userId);
}
}
■UserDetailController.java
package com.example.demo.controller;
import org.modelmapper.ModelMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import com.example.demo.domain.user.model.MUser;
import com.example.demo.domain.user.service.UserService;
import com.example.demo.form.UserDetailForm;
@Controller
@RequestMapping("/user")
public class UserDetailController {
@Autowired
private UserService userService;
@Autowired
private ModelMapper modelMapper;
/** ユーザー詳細画面を表示 */
@GetMapping("/detail/{userId:.+}")
public String getUser(UserDetailForm form, Model model, @PathVariable("userId") String userId) {
// ユーザーを1件取得
MUser user = userService.getUserOne(userId);
user.setPassword(null);
// MUserをformに変換
form = modelMapper.map(user, UserDetailForm.class);
// Modelに登録
model.addAttribute("userDetailForm", form);
// ユーザー詳細画面を表示
return "user/detail";
}
/** ユーザー更新処理 */
@PostMapping(value ="/detail", params = "update")
public String updateUser(UserDetailForm form, Model model) {
//ユーザーを更新
userService.updateUserOne(form.getUserId(),form.getPassword(), form.getUserName());
//ユーザー一覧画面にリダイレクト
return "redirect:/user/list";
}
/** ユーザー削除処理*/
@PostMapping(value = "/detail", params="delete")
public String deleteUser(UserDetailForm form, Model model ) {
//ユーザーを削除
userService.deleteUserOne(form.getUserId());
//ユーザー一覧画面にリダイレクト
return "redirect:/user/list";
}
}
自分で試したこと
今実施しているupdate,delete処理における改修ソースはこれらになります。
もう少し自分でも見直しますが、ここじゃない?など指摘ありましたらよろしくお願いいたします。
※サンプルソースと全ファイルウィンマージにて比較し、合致していること確認できています。
益々、原因がわかっていません、、