回答編集履歴

1

2種類のJdbcTemplateの記述に変更。

2020/09/06 04:15

投稿

A-pZ
A-pZ

スコア12011

test CHANGED
@@ -1,6 +1,4 @@
1
- JdbcTemplateのqueryForObjectを使う場合のパラメータ指定、いわゆるPreparedStatementのSQLを使ます。
1
+ JdbcTemplateのqueryForObjectを使う場合のパラメータ指定ですが利用するJdbcTemplateで、いわゆるPreparedStatement(?で指定する方法)のSQLを使うか、変数を指定するプレースホルダにする NamedParameterJdbcTemplate を使う方法(id = :id で指定する方法)があります。
2
-
3
- (id = :id で指定する方法は、また別です)
4
2
 
5
3
 
6
4
 
@@ -16,7 +14,17 @@
16
14
 
17
15
 
18
16
 
19
- このテーブルに対して、id を指定して検索するSQL
17
+ このテーブルに対して、id を指定して検索するSQLを、NamedParameterJdbcTemplate ならば
18
+
19
+
20
+
21
+ ```sql
22
+
23
+ SELECT id, name FROM account WHERE id = :id
24
+
25
+ ```
26
+
27
+ 素のJdbcTemplateは、
20
28
 
21
29
 
22
30
 
@@ -48,9 +56,61 @@
48
56
 
49
57
 
50
58
 
51
- これを実行する処理は以下です。
59
+ これを実行する処理は、お使いのJdbcTemplateによりパラメータの格納方法が異なります。
60
+
61
+ NamedQuery~の方がパラメータの格納がしやすく(※)、視認性もとても高いので、ご希望されているNamedQuery~が良いですね!
52
62
 
53
63
 
64
+
65
+ ※SqlParameterSource param = new MapSqlParameterSource().addValue("id", id); や Beanを丸ごと定義できる BeanPropertySqlParameterSource(..) が使えます。
66
+
67
+
68
+
69
+ NamedParameterJdbcTemplate :
70
+
71
+
72
+
73
+ ```java
74
+
75
+ import org.springframework.jdbc.core.BeanPropertyRowMapper;
76
+
77
+ import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;
78
+
79
+ import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
80
+
81
+ import org.springframework.jdbc.core.namedparam.SqlParameterSource;
82
+
83
+ import org.springframework.stereotype.Repository;
84
+
85
+
86
+
87
+ import lombok.RequiredArgsConstructor;
88
+
89
+
90
+
91
+ @Repository
92
+
93
+ @RequiredArgsConstructor
94
+
95
+ public class NamedQueryAccountRepository {
96
+
97
+ private final NamedParameterJdbcTemplate template;
98
+
99
+
100
+
101
+ public Account findById(Integer id) {
102
+
103
+ SqlParameterSource param = new MapSqlParameterSource().addValue("id", id);
104
+
105
+ return template.queryForObject("SELECT id, name FROM account WHERE id = :id", param, new BeanPropertyRowMapper<Account>(Account.class));
106
+
107
+ }
108
+
109
+ ```
110
+
111
+
112
+
113
+ 素のJdbcTemplate :
54
114
 
55
115
  ```java
56
116
 
@@ -62,6 +122,18 @@
62
122
 
63
123
 
64
124
 
125
+ import lombok.RequiredArgsConstructor;
126
+
127
+
128
+
129
+ @Repository
130
+
131
+ @RequiredArgsConstructor
132
+
133
+ public class AccountRepository {
134
+
135
+ private final JdbcTemplate jdbcTemplate;
136
+
65
137
  public Account findById(int id) {
66
138
 
67
139
  return jdbcTemplate.queryForObject("SELECT id, name FROM account WHERE id=?"
@@ -72,4 +144,6 @@
72
144
 
73
145
  }
74
146
 
147
+ }
148
+
75
149
  ```