質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
DAO(Data Access Object)

DAO(Data Access Object)とは、データベースなどに保存するための操作を実装したオブジェクトのことです。データの永続化機構に抽象化されたインタフェースを提供し、データベースの詳細を隠蔽。ビジネスロジックとデータ操作も分離できます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

バインド

バインドは、一定の方法で複数の事柄が関連付けられている状態を呼びます。また、そのような関連付けを実行する機能自体を指す事もあります。

解決済

Daoでバインドが出来ません

sukesukesuke
sukesukesuke

総合スコア58

DAO(Data Access Object)

DAO(Data Access Object)とは、データベースなどに保存するための操作を実装したオブジェクトのことです。データの永続化機構に抽象化されたインタフェースを提供し、データベースの詳細を隠蔽。ビジネスロジックとデータ操作も分離できます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

バインド

バインドは、一定の方法で複数の事柄が関連付けられている状態を呼びます。また、そのような関連付けを実行する機能自体を指す事もあります。

3回答

0評価

0クリップ

325閲覧

投稿2022/01/27 13:39

編集2022/01/28 04:42

バインドが出来ないです。
NamedParameterJdbcTemplateの使い方が間違っていますでしょうか?

バインドさせずに直接パラメータを記述すると、期待した結果が得られています。

java

public List<WebboardDto> selectBySearch(String id, String name, String editName, String message) { var sb = new StringBuilder(); sb.append("SELECT "); sb.append(" * "); sb.append("FROM "); sb.append(" MESSAGE_BOARD "); sb.append("WHERE "); sb.append(" ID = :id "); sb.append(" AND CREATED_ID = :name "); sb.append(" AND NAME = :editName "); sb.append(" AND MESSAGE LIKE :message "); sb.append(" AND DELETE_FLAG = 0 "); sb.append("ORDER BY "); sb.append(" ID DESC "); // バインド用のインスタンスを生成します var ps = new MapSqlParameterSource(); ps.addValue("id", StringUtils.isNotBlank(id) ? id : "ID"); ps.addValue("name", StringUtils.isNotBlank(name) ? name : "CREATED_ID"); ps.addValue("editName", StringUtils.isNotBlank(editName) ? editName : "NAME"); ps.addValue("message", StringUtils.isNotBlank(message) ? "%" + message + "%" : "MESSAGE"); BeanPropertyRowMapper<WebboardDto> rm = BeanPropertyRowMapper.newInstance(WebboardDto.class); return namedParameterJdbcTemplate.query(sb.toString(), ps, rm);

ソースはこちら

java

package jp.co.sandbox.dao; import java.util.List; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.BeanPropertyRowMapper; import org.springframework.jdbc.core.namedparam.MapSqlParameterSource; import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; import org.springframework.stereotype.Repository; import jp.co.careritz.sandbox.dto.WebboardDto; /** * 掲示板DAO. * * @author ryosuke.tahara */ @Repository public class WebboardDao { /** * NamedParameterJdbcTemplateクラスのインスタンスを宣言 */ private NamedParameterJdbcTemplate np; /** * コンストラクタ * * @param np NamedParameterJdbcTemplate */ @Autowired public WebboardDao(NamedParameterJdbcTemplate np) { this.np = np; } /** * 全投稿取得 * * @return 全投稿 */ public List<WebboardDto> select() { var sb = new StringBuilder(); sb.append("SELECT "); sb.append(" ID "); sb.append(" , NAME "); sb.append(" , MESSAGE "); sb.append(" , CREATED_ID "); sb.append(" , CREATED_AT "); sb.append(" , UPDATED_ID "); sb.append(" , UPDATED_AT "); sb.append("FROM "); sb.append(" MESSAGE_BOARD "); sb.append("WHERE "); sb.append(" DELETE_FLAG = 0 "); sb.append("ORDER BY "); sb.append(" ID DESC "); BeanPropertyRowMapper<WebboardDto> rm = BeanPropertyRowMapper.newInstance(WebboardDto.class); return np.query(sb.toString(), rm); } /** * 投稿取得(id指定) * * @param id 取得対象のidをServiceクラスから受け取っています * @return 取得対象の投稿 */ public WebboardDto selectById(int id) { var sb = new StringBuilder(); sb.append("SELECT "); sb.append(" ID "); sb.append(" , NAME "); sb.append(" , MESSAGE "); sb.append(" , CREATED_ID "); sb.append(" , CREATED_AT "); sb.append(" , UPDATED_ID "); sb.append(" , UPDATED_AT "); sb.append("FROM "); sb.append(" MESSAGE_BOARD "); sb.append("WHERE "); sb.append(" ID = :id "); // バインド用のインスタンスを生成します var ps = new MapSqlParameterSource(); ps.addValue("id", id); BeanPropertyRowMapper<WebboardDto> rm = BeanPropertyRowMapper.newInstance(WebboardDto.class); return np.queryForObject(sb.toString(), ps, rm); } /** * 投稿取得(id, name, editName, message指定) * * @param id 取得したい投稿のid情報をServiceクラスから受け取っています * @param name 取得したい投稿のname情報をServiceクラスから受け取っています * @param editName 取得したい投稿のeditName情報をServiceクラスから受け取っています * @param message 取得したい投稿のmessage情報をServiceクラスから受け取っています * @return 取得対象の投稿 */ public List<WebboardDto> selectBySearch(String id, String name, String editName, String message) { var sb = new StringBuilder(); sb.append("SELECT "); sb.append(" * "); sb.append("FROM "); sb.append(" MESSAGE_BOARD "); sb.append("WHERE "); sb.append(" ID = :id "); sb.append(" AND CREATED_ID = :name "); sb.append(" AND NAME = :editName "); sb.append(" AND MESSAGE LIKE :message "); sb.append(" AND DELETE_FLAG = 0 "); sb.append("ORDER BY "); sb.append(" ID DESC "); // バインド用のインスタンスを生成します var ps = new MapSqlParameterSource(); ps.addValue("id", StringUtils.isNotBlank(id) ? id : "ID"); ps.addValue("name", StringUtils.isNotBlank(name) ? name : "CREATED_ID"); ps.addValue("editName", StringUtils.isNotBlank(editName) ? editName : "NAME"); ps.addValue("message", StringUtils.isNotBlank(message) ? "%" + message + "%" : "MESSAGE"); BeanPropertyRowMapper<WebboardDto> rm = BeanPropertyRowMapper.newInstance(WebboardDto.class); return np.query(sb.toString(), ps, rm); } /** * 新規投稿処理 * * @param name 入力されたnameをServiceクラスから受け取っています * @param message 入力されたmessageをServiceクラスから受け取っています */ public void post(String name, String message) { var sb = new StringBuilder(); sb.append("INSERT "); sb.append("INTO MESSAGE_BOARD( "); sb.append(" NAME "); sb.append(" , MESSAGE "); sb.append(" , DELETE_FLAG "); sb.append(" , CREATED_ID "); sb.append(" , CREATED_AT "); sb.append(" , UPDATED_ID "); sb.append(" , UPDATED_AT "); sb.append(") "); sb.append("VALUES (:name, :message, 0, :name, NOW(), :name, NOW()) "); // バインド用のインスタンスを生成します var ps = new MapSqlParameterSource(); ps.addValue("name", name); ps.addValue("message", message); // バインド後、SQLを実行します np.update(sb.toString(), ps); } /** * 削除処理 * * @param id 削除対象のidをServiceクラスから受け取っています */ public void delete(int id) { var sb = new StringBuilder(); sb.append("UPDATE MESSAGE_BOARD "); sb.append("SET "); sb.append(" DELETE_FLAG = 1 "); sb.append("WHERE "); sb.append(" ID = :id "); var ps = new MapSqlParameterSource(); ps.addValue("id", id); np.update(sb.toString(), ps); } /** * 編集処理 * * @param id 編集対象のidをServiceクラスから受け取っています * @param name 編集後のnameをServiceクラスから受け取っています * @param message 編集後のmessagをServiceクラスから受け取っています */ public void edit(int id, String name, String message) { var sb = new StringBuilder(); sb.append("UPDATE MESSAGE_BOARD "); sb.append("SET "); sb.append(" NAME = :name "); sb.append(" , UPDATED_ID = :name "); sb.append(" , MESSAGE = :message "); sb.append(" , UPDATED_AT = NOW() "); sb.append("WHERE "); sb.append(" ID = :id "); var ps = new MapSqlParameterSource(); ps.addValue("id", id); ps.addValue("name", name); ps.addValue("message", message); np.update(sb.toString(), ps); } }

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

DAO(Data Access Object)

DAO(Data Access Object)とは、データベースなどに保存するための操作を実装したオブジェクトのことです。データの永続化機構に抽象化されたインタフェースを提供し、データベースの詳細を隠蔽。ビジネスロジックとデータ操作も分離できます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

バインド

バインドは、一定の方法で複数の事柄が関連付けられている状態を呼びます。また、そのような関連付けを実行する機能自体を指す事もあります。