Skip to content

Commit d0359ea

Browse files
authored
Merge pull request #3 from kento-kotlin-sandbox/future/add_spring_jdbc_logic
Future/add spring jdbc logic
2 parents 4004571 + 71f1423 commit d0359ea

20 files changed

+930
-4
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package com.example.demo.domain.model;
2+
3+
import java.util.Date;
4+
5+
import lombok.Data;
6+
7+
8+
@Data
9+
public class User {
10+
// ユーザーID
11+
private String userId;
12+
// パスワード
13+
private String password;
14+
// ユーザー名
15+
private String userName;
16+
// 誕生日
17+
private Date birthday;
18+
// 年齢
19+
private int age;
20+
// 結婚ステータス
21+
private boolean marriage;
22+
// ロール
23+
private String role;
24+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package com.example.demo.domain.model.repository;
2+
3+
import java.util.List;
4+
5+
import org.springframework.dao.DataAccessException;
6+
7+
import com.example.demo.domain.model.User;
8+
9+
10+
public interface UserDao {
11+
// Userテーブルの件数を取得
12+
public int count() throws DataAccessException;
13+
14+
// Userテーブルのデータを1件insert
15+
public int insertOne(User user) throws DataAccessException;
16+
17+
// Userテーブルのデータを1件取得
18+
public User selectOne(String userId) throws DataAccessException;
19+
20+
// Userテーブルの全データを取得
21+
public List<User> selectMany() throws DataAccessException;
22+
23+
// Userテーブルのデータ1件を更新
24+
public int updateOne(User user) throws DataAccessException;
25+
26+
// Userテーブルのデータ1件を削除
27+
public int deleteOne(String userId) throws DataAccessException;
28+
29+
// SQL取得結果をサーバーにCSVで保存する
30+
public void userCsvOut() throws DataAccessException;
31+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,156 @@
1+
package com.example.demo.domain.model.repository.jdbc;
2+
3+
import java.util.ArrayList;
4+
import java.util.Date;
5+
import java.util.List;
6+
import java.util.Map;
7+
8+
import org.springframework.beans.factory.annotation.Autowired;
9+
import org.springframework.dao.DataAccessException;
10+
import org.springframework.jdbc.core.JdbcTemplate;
11+
import org.springframework.stereotype.Repository;
12+
13+
import com.example.demo.domain.model.User;
14+
import com.example.demo.domain.model.repository.UserDao;
15+
16+
// TODO: 各ロジックを埋める
17+
@Repository("UserDaoJdbcImpl")
18+
public class UserDaoJdbcImpl implements UserDao {
19+
20+
@Autowired
21+
JdbcTemplate jdbc;
22+
23+
// Userテーブルの件数を取得
24+
@Override
25+
public int count() throws DataAccessException {
26+
// 全件取得してカウント
27+
int count =jdbc.queryForObject("SELECT COUNT(*) FROM m_user", Integer.class);
28+
29+
return count;
30+
}
31+
32+
// Userテーブルにデータを1件insert
33+
@Override
34+
public int insertOne(User user) throws DataAccessException {
35+
// 1件登録
36+
int rowNumber =jdbc.update("INSERT INTO m_user(user_id,"
37+
+ "password,"
38+
+ "user_name,"
39+
+ "birthday,"
40+
+ "age,"
41+
+ "marriage,"
42+
+ "role) "
43+
+ "VALUES(?, ?, ?, ?, ?, ?, ?)"
44+
,user.getUserId()
45+
,user.getPassword()
46+
,user.getUserName()
47+
,user.getBirthday()
48+
,user.getAge()
49+
,user.isMarriage()
50+
,user.getRole());
51+
52+
return rowNumber;
53+
}
54+
55+
// Userテーブルのデータを1件取得
56+
@Override
57+
public User selectOne(String userId) throws DataAccessException {
58+
Map<String, Object> map = jdbc.queryForMap("SELECT * FROM m_user" + " WHERE user_id = ?", userId);
59+
60+
// 結果返却用変数
61+
User user = new User();
62+
63+
// 取得結果をインスタンスにセット
64+
// ユーザーID
65+
user.setUserId((String)map.get("user_id"));
66+
// パスワード
67+
user.setPassword((String)map.get("passoword"));
68+
// ユーザー名
69+
user.setUserName((String)map.get("user_name"));
70+
// 誕生日
71+
user.setBirthday((Date)map.get("birthday"));
72+
// 年齢
73+
user.setAge((Integer)map.get("age"));
74+
// 結婚ステータス
75+
user.setMarriage((Boolean)map.get("marriage"));
76+
// ロール
77+
user.setRole((String)map.get("role"));
78+
79+
return user;
80+
}
81+
82+
// Userテーブルの全データを取得
83+
@Override
84+
public List<User> selectMany() throws DataAccessException {
85+
// m_userテーブルのデータを全件取得
86+
List<Map<String, Object>> getList = jdbc.queryForList("SELECT * FROM m_user");
87+
88+
// 結果返却用リスト作成
89+
List<User> userList = new ArrayList<>();
90+
91+
// 取得したデータを結果返却用のListに格納
92+
for (Map<String, Object> map : getList) {
93+
// Userインスタンスの生成
94+
User user = new User();
95+
96+
// Userインスタンスに取得したデータをセット
97+
// ユーザーID
98+
user.setUserId((String)map.get("user_id"));
99+
// パスワード
100+
user.setPassword((String)map.get("password"));
101+
// ユーザー名
102+
user.setUserName((String)map.get("user_name"));
103+
// 誕生日
104+
user.setBirthday((Date)map.get("birthday"));
105+
// 年齢
106+
user.setAge((Integer)map.get("age"));
107+
// 結婚ステータス
108+
user.setMarriage((Boolean)map.get("marriage"));
109+
// ロール
110+
user.setRole((String)map.get("role"));
111+
112+
// 結果返却用リストに追加
113+
userList.add(user);
114+
}
115+
return userList;
116+
}
117+
118+
// Userテーブルを1件更新
119+
@Override
120+
public int updateOne(User user) throws DataAccessException {
121+
122+
// 1件更新
123+
int rowNumber = jdbc.update("UPDATE M_USER"
124+
+ " SET"
125+
+ " password=?,"
126+
+ " user_name=?,"
127+
+ " birthday=?,"
128+
+ " age=?,"
129+
+ " marriage=?"
130+
+ " WHERE user_id=?"
131+
, user.getPassword()
132+
, user.getUserName()
133+
, user.getBirthday()
134+
, user.getAge()
135+
, user.isMarriage()
136+
, user.getUserId()
137+
);
138+
139+
return rowNumber;
140+
}
141+
142+
// Userテーブルを1件削除
143+
@Override
144+
public int deleteOne(String userId) throws DataAccessException {
145+
// 1件削除
146+
int rowNumber = jdbc.update("DELETE FROM m_user WHERE user_id = ?", userId);
147+
148+
return rowNumber;
149+
}
150+
151+
// Userテーブルの全データをCSVに出力
152+
@Override
153+
public void userCsvOut() throws DataAccessException {
154+
155+
}
156+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package com.example.demo.domain.model.repository.jdbc;
2+
3+
import java.util.List;
4+
5+
import org.springframework.beans.factory.annotation.Autowired;
6+
import org.springframework.jdbc.core.JdbcTemplate;
7+
import org.springframework.jdbc.core.RowMapper;
8+
import org.springframework.stereotype.Repository;
9+
10+
import com.example.demo.domain.model.User;
11+
12+
13+
@Repository("UserDaoJdbcImpl2")
14+
public class UserDaoJdbcImpl2 extends UserDaoJdbcImpl {
15+
@Autowired
16+
private JdbcTemplate jdbc;
17+
18+
// ユーザー1件
19+
@Override
20+
public User selectOne(String userId) {
21+
// 1件取得用SQL
22+
String sql = "SELECT * FROM m_user WHERE user_id = ?";
23+
24+
// RowMappierの生成
25+
UserRowMapper rowMapper = new UserRowMapper();
26+
27+
// SQL実行
28+
return jdbc.queryForObject(sql, rowMapper, userId);
29+
}
30+
31+
// ユーザー全件取得
32+
@Override
33+
public List<User> selectMany() {
34+
// m_userテーブルのデータを全て取得するSQL
35+
String sql = "SELECT * FROM m_user";
36+
37+
// RowMapperの作成
38+
RowMapper<User> rowMapper = new UserRowMapper();
39+
40+
// SQL実行
41+
return jdbc.query(sql, rowMapper);
42+
}
43+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package com.example.demo.domain.model.repository.jdbc;
2+
3+
import java.util.List;
4+
5+
import org.springframework.beans.factory.annotation.Autowired;
6+
import org.springframework.jdbc.core.BeanPropertyRowMapper;
7+
import org.springframework.jdbc.core.JdbcTemplate;
8+
import org.springframework.jdbc.core.RowMapper;
9+
import org.springframework.stereotype.Repository;
10+
11+
import com.example.demo.domain.model.User;
12+
13+
14+
@Repository("UserDaoJdbcImpl3")
15+
public class UserDaoJdbcImpl3 extends UserDaoJdbcImpl {
16+
17+
@Autowired
18+
private JdbcTemplate jdbc;
19+
20+
// ユーザー1件取得
21+
@Override
22+
public User selectOne(String userId) {
23+
// 1件取得SQL
24+
String sql = "SELECT * FROM m_user WHERE user_id = ?";
25+
26+
// RowMapperの生成
27+
RowMapper<User> rowMapper = new BeanPropertyRowMapper<User>(User.class);
28+
29+
// SQL実行
30+
return jdbc.queryForObject(sql, rowMapper, userId);
31+
}
32+
33+
// ユーザー全件取得
34+
@Override
35+
public List<User> selectMany() {
36+
// m_userテーブルのデータを全件取得するSQL
37+
String sql = "SELECT * FROM m_user";
38+
39+
// RowMapperの生成
40+
RowMapper<User> rowMapper = new BeanPropertyRowMapper<User>(User.class);
41+
42+
// SQL実行
43+
return jdbc.query(sql, rowMapper);
44+
}
45+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package com.example.demo.domain.model.repository.jdbc;
2+
3+
import java.util.List;
4+
5+
import org.springframework.beans.factory.annotation.Autowired;
6+
import org.springframework.jdbc.core.JdbcTemplate;
7+
import org.springframework.stereotype.Repository;
8+
9+
import com.example.demo.domain.model.User;
10+
11+
12+
@Repository("UserDaoJdbcImpl4")
13+
public class UserDaoJdbcImpl4 extends UserDaoJdbcImpl {
14+
15+
@Autowired
16+
private JdbcTemplate jdbc;
17+
18+
@Override
19+
public List<User> selectMany() {
20+
// m_userテーブルのデータを全件取得するSQL
21+
String sql = "SELECT * FROM m_user";
22+
23+
// ResultSetExtractorの生成
24+
UserResultSetExtractor extractor = new UserResultSetExtractor();
25+
26+
// SQL実行
27+
return jdbc.query(sql, extractor);
28+
}
29+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package com.example.demo.domain.model.repository.jdbc;
2+
3+
import java.sql.ResultSet;
4+
import java.sql.SQLException;
5+
import java.util.List;
6+
import java.util.ArrayList;
7+
8+
import org.springframework.dao.DataAccessException;
9+
import org.springframework.dao.EmptyResultDataAccessException;
10+
import org.springframework.jdbc.core.ResultSetExtractor;
11+
12+
import com.example.demo.domain.model.User;
13+
14+
public class UserResultSetExtractor implements ResultSetExtractor<List<User>> {
15+
16+
@Override
17+
public List<User> extractData(ResultSet rs) throws SQLException, DataAccessException {
18+
19+
// User 格納用List
20+
List<User> userList = new ArrayList<>();
21+
22+
// 取得件数分のloop
23+
while(rs.next()) {
24+
// Listに追加するインスタンスを生成
25+
User user = new User();
26+
27+
// 取得したレコードをUserインスタンスに設定
28+
user.setUserId(rs.getString("user_id"));
29+
user.setPassword(rs.getString("password"));
30+
user.setUserName(rs.getString("user_name"));
31+
user.setBirthday(rs.getDate("birthday"));
32+
user.setAge(rs.getInt("age"));
33+
user.setMarriage(rs.getBoolean("marriage"));
34+
user.setRole(rs.getString("role"));
35+
36+
// ListにUserを追加
37+
userList.add(user);
38+
}
39+
40+
// 1件も存在しない場合
41+
if(userList.size() == 0) {
42+
throw new EmptyResultDataAccessException(1);
43+
}
44+
45+
return userList;
46+
}
47+
}

0 commit comments

Comments
 (0)