バインドが出来ないです。
NamedParameterJdbcTemplateの使い方が間違っていますでしょうか?
バインドさせずに直接パラメータを記述すると、期待した結果が得られています。
java
1 2 public List<WebboardDto> selectBySearch(String id, String name, String editName, String message) { 3 4 var sb = new StringBuilder(); 5 sb.append("SELECT "); 6 sb.append(" * "); 7 sb.append("FROM "); 8 sb.append(" MESSAGE_BOARD "); 9 sb.append("WHERE "); 10 sb.append(" ID = :id "); 11 sb.append(" AND CREATED_ID = :name "); 12 sb.append(" AND NAME = :editName "); 13 sb.append(" AND MESSAGE LIKE :message "); 14 sb.append(" AND DELETE_FLAG = 0 "); 15 sb.append("ORDER BY "); 16 sb.append(" ID DESC "); 17 18 // バインド用のインスタンスを生成します 19 var ps = new MapSqlParameterSource(); 20 ps.addValue("id", StringUtils.isNotBlank(id) ? id : "ID"); 21 ps.addValue("name", StringUtils.isNotBlank(name) ? name : "CREATED_ID"); 22 ps.addValue("editName", StringUtils.isNotBlank(editName) ? editName : "NAME"); 23 ps.addValue("message", StringUtils.isNotBlank(message) ? "%" + message + "%" : "MESSAGE"); 24 25 BeanPropertyRowMapper<WebboardDto> rm = BeanPropertyRowMapper.newInstance(WebboardDto.class); 26 27 return namedParameterJdbcTemplate.query(sb.toString(), ps, rm); 28
ソースはこちら
java
1 2package jp.co.sandbox.dao; 3 4import java.util.List; 5import org.apache.commons.lang3.StringUtils; 6import org.springframework.beans.factory.annotation.Autowired; 7import org.springframework.jdbc.core.BeanPropertyRowMapper; 8import org.springframework.jdbc.core.namedparam.MapSqlParameterSource; 9import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; 10import org.springframework.stereotype.Repository; 11import jp.co.careritz.sandbox.dto.WebboardDto; 12 13/** 14 * 掲示板DAO. 15 * 16 * @author ryosuke.tahara 17 */ 18 19@Repository 20public class WebboardDao { 21 22 /** 23 * NamedParameterJdbcTemplateクラスのインスタンスを宣言 24 */ 25 26 private NamedParameterJdbcTemplate np; 27 28 /** 29 * コンストラクタ 30 * 31 * @param np NamedParameterJdbcTemplate 32 */ 33 34 @Autowired 35 public WebboardDao(NamedParameterJdbcTemplate np) { 36 this.np = np; 37 } 38 39 /** 40 * 全投稿取得 41 * 42 * @return 全投稿 43 */ 44 45 public List<WebboardDto> select() { 46 47 var sb = new StringBuilder(); 48 49 sb.append("SELECT "); 50 sb.append(" ID "); 51 sb.append(" , NAME "); 52 sb.append(" , MESSAGE "); 53 sb.append(" , CREATED_ID "); 54 sb.append(" , CREATED_AT "); 55 sb.append(" , UPDATED_ID "); 56 sb.append(" , UPDATED_AT "); 57 sb.append("FROM "); 58 sb.append(" MESSAGE_BOARD "); 59 sb.append("WHERE "); 60 sb.append(" DELETE_FLAG = 0 "); 61 sb.append("ORDER BY "); 62 sb.append(" ID DESC "); 63 BeanPropertyRowMapper<WebboardDto> rm = BeanPropertyRowMapper.newInstance(WebboardDto.class); 64 65 return np.query(sb.toString(), rm); 66 } 67 68 /** 69 * 投稿取得(id指定) 70 * 71 * @param id 取得対象のidをServiceクラスから受け取っています 72 * @return 取得対象の投稿 73 */ 74 75 public WebboardDto selectById(int id) { 76 77 var sb = new StringBuilder(); 78 79 sb.append("SELECT "); 80 sb.append(" ID "); 81 sb.append(" , NAME "); 82 sb.append(" , MESSAGE "); 83 sb.append(" , CREATED_ID "); 84 sb.append(" , CREATED_AT "); 85 sb.append(" , UPDATED_ID "); 86 sb.append(" , UPDATED_AT "); 87 sb.append("FROM "); 88 sb.append(" MESSAGE_BOARD "); 89 sb.append("WHERE "); 90 sb.append(" ID = :id "); 91 92 // バインド用のインスタンスを生成します 93 var ps = new MapSqlParameterSource(); 94 ps.addValue("id", id); 95 96 BeanPropertyRowMapper<WebboardDto> rm = BeanPropertyRowMapper.newInstance(WebboardDto.class); 97 98 return np.queryForObject(sb.toString(), ps, rm); 99 100 } 101 102 /** 103 * 投稿取得(id, name, editName, message指定) 104 * 105 * @param id 取得したい投稿のid情報をServiceクラスから受け取っています 106 * @param name 取得したい投稿のname情報をServiceクラスから受け取っています 107 * @param editName 取得したい投稿のeditName情報をServiceクラスから受け取っています 108 * @param message 取得したい投稿のmessage情報をServiceクラスから受け取っています 109 * @return 取得対象の投稿 110 */ 111 112 public List<WebboardDto> selectBySearch(String id, String name, String editName, String message) { 113 114 var sb = new StringBuilder(); 115 sb.append("SELECT "); 116 sb.append(" * "); 117 sb.append("FROM "); 118 sb.append(" MESSAGE_BOARD "); 119 sb.append("WHERE "); 120 sb.append(" ID = :id "); 121 sb.append(" AND CREATED_ID = :name "); 122 sb.append(" AND NAME = :editName "); 123 sb.append(" AND MESSAGE LIKE :message "); 124 sb.append(" AND DELETE_FLAG = 0 "); 125 sb.append("ORDER BY "); 126 sb.append(" ID DESC "); 127 128 // バインド用のインスタンスを生成します 129 var ps = new MapSqlParameterSource(); 130 ps.addValue("id", StringUtils.isNotBlank(id) ? id : "ID"); 131 ps.addValue("name", StringUtils.isNotBlank(name) ? name : "CREATED_ID"); 132 ps.addValue("editName", StringUtils.isNotBlank(editName) ? editName : "NAME"); 133 ps.addValue("message", StringUtils.isNotBlank(message) ? "%" + message + "%" : "MESSAGE"); 134 135 BeanPropertyRowMapper<WebboardDto> rm = BeanPropertyRowMapper.newInstance(WebboardDto.class); 136 137 return np.query(sb.toString(), ps, rm); 138 139 } 140 141 /** 142 * 新規投稿処理 143 * 144 * @param name 入力されたnameをServiceクラスから受け取っています 145 * @param message 入力されたmessageをServiceクラスから受け取っています 146 */ 147 148 public void post(String name, String message) { 149 150 var sb = new StringBuilder(); 151 sb.append("INSERT "); 152 sb.append("INTO MESSAGE_BOARD( "); 153 sb.append(" NAME "); 154 sb.append(" , MESSAGE "); 155 sb.append(" , DELETE_FLAG "); 156 sb.append(" , CREATED_ID "); 157 sb.append(" , CREATED_AT "); 158 sb.append(" , UPDATED_ID "); 159 sb.append(" , UPDATED_AT "); 160 sb.append(") "); 161 sb.append("VALUES (:name, :message, 0, :name, NOW(), :name, NOW()) "); 162 163 // バインド用のインスタンスを生成します 164 var ps = new MapSqlParameterSource(); 165 ps.addValue("name", name); 166 ps.addValue("message", message); 167 168 // バインド後、SQLを実行します 169 np.update(sb.toString(), ps); 170 } 171 172 /** 173 * 削除処理 174 * 175 * @param id 削除対象のidをServiceクラスから受け取っています 176 */ 177 178 public void delete(int id) { 179 180 var sb = new StringBuilder(); 181 sb.append("UPDATE MESSAGE_BOARD "); 182 sb.append("SET "); 183 sb.append(" DELETE_FLAG = 1 "); 184 sb.append("WHERE "); 185 sb.append(" ID = :id "); 186 187 var ps = new MapSqlParameterSource(); 188 ps.addValue("id", id); 189 190 np.update(sb.toString(), ps); 191 } 192 193 /** 194 * 編集処理 195 * 196 * @param id 編集対象のidをServiceクラスから受け取っています 197 * @param name 編集後のnameをServiceクラスから受け取っています 198 * @param message 編集後のmessagをServiceクラスから受け取っています 199 */ 200 201 public void edit(int id, String name, String message) { 202 var sb = new StringBuilder(); 203 sb.append("UPDATE MESSAGE_BOARD "); 204 sb.append("SET "); 205 sb.append(" NAME = :name "); 206 sb.append(" , UPDATED_ID = :name "); 207 sb.append(" , MESSAGE = :message "); 208 sb.append(" , UPDATED_AT = NOW() "); 209 sb.append("WHERE "); 210 sb.append(" ID = :id "); 211 212 var ps = new MapSqlParameterSource(); 213 ps.addValue("id", id); 214 ps.addValue("name", name); 215 ps.addValue("message", message); 216 217 np.update(sb.toString(), ps); 218 } 219} 220
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。