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

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

新規登録して質問してみよう
ただいま回答率
85.35%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Java

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

Spring

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

Thymeleaf

Thymeleaf(タイムリーフ)とは、Java用のテンプレートエンジンで、特定のフレームワークに依存せず使用することが可能です。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

Q&A

解決済

1回答

2122閲覧

SpringBootで 検索機能を実装したい

KOTAITO

総合スコア8

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Java

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

Spring

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

Thymeleaf

Thymeleaf(タイムリーフ)とは、Java用のテンプレートエンジンで、特定のフレームワークに依存せず使用することが可能です。

Spring Boot

Spring Bootは、Javaのフレームワークの一つ。Springプロジェクトが提供する様々なフレームワークを統合した、アプリケーションを高速で開発するために設計されたフレームワークです。

0グッド

0クリップ

投稿2020/03/07 05:40

前提・実現したいこと

SpringBootを用いて、Todoリスト作成アプリを作成しています。
データ登録・一覧表示と、編集機能は実装できましたが、Todoの名前によって
検索する機能実装で詰まっております。

検索結果を表示する画面は表示されるのですが、
検索結果が返ってきません。。 

以下のようなクエリ文は発行されているので、
データはとって来れていると思うのですが、、

発生している問題・エラーメッセージ

検索ボタンを押した際に、発行されるクエリ文です

Hibernate: select todo0_.id as id1_0_, todo0_.create_time as create_t2_0_, todo0_.deadline as deadline3_0_, todo0_.status as status4_0_, todo0_.title as title5_0_, todo0_.update_time as update_t6_0_ from todo todo0_ Hibernate: select todo0_.id as id1_0_, todo0_.create_time as create_t2_0_, todo0_.deadline as deadline3_0_, todo0_.status as status4_0_, todo0_.title as title5_0_, todo0_.update_time as update_t6_0_ from todo todo0_ where (todo0_.title like ? escape ?) and todo0_.status=? order by todo0_.id desc

該当のソースコード

TodoCotnroller

1@GetMapping("/search/result") 2public String searchResult(@ModelAttribute String title, Model model) { 3 List<Todo> todolists = todoService.search("title", false); 4 model.addAttribute("result", todolists); 5 return "searchresult"; 6}

TodoRepository

1@Repository 2public interface TodoRepository extends JpaRepository<Todo, Long> { 3 List<Todo> findByTitleContainingAndStatusEqualsOrderByIdDesc(String title, boolean status); 4}

TodoService

1public List<Todo> search(String title, boolean status) { 2 return todoRepository.findByTitleContainingAndStatusEqualsOrderByIdDesc(title, status); 3 }

search

1<!DOCTYPE html> 2<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml"> 3<head> 4 <meta charset="UTF-8"> 5 <link th:href="@{css/index.css}" rel="stylesheet" type="text/css"/> 6 <link th:href="@{css/search.css}" rel="stylesheet" type="text/css"/> 7 <link th:href="@{css/reset.css}" rel="stylesheet" type="text/css"/> 8 9 <title>TO DOアプリ</title> 10</head> 11<body> 12<div class="header"> 13 <a class="index-link" th:href="@{/}">TODO リスト</a> 14</div> 15 16<div class="search-box"> 17 <div class="search-from"> 18 <form th:action="@{/search/result}" method="get"> 19 <input type="text" name="title" th:value="${title}"/> 20 <input type="submit" value="検索する"> 21 </form> 22 23 </div> 24 25 <div class="result-box" th:each="todo : ${list}"> 26 <div class="history-left"> 27 <p class="title" th:text="${todo.title}"></p> 28 <p class="deadline" th:text="'期限:'+ ${todo.deadline}"></p> 29 <p class="createtime" th:text="'作成日:' + ${todo.createTime}"></p> 30 </div> 31 <div class="history-right"> 32 <div class="button-box"> 33 <a class="edit-button" th:href="@{/edit/{id}(id=${todo.id})}">編集</a> 34 <div class="complete-button"> 未完了</div> 35 </div> 36 </div> 37 </div> 38</div> 39 40</div> 41</body> 42</html>

searchresult

1<!DOCTYPE html> 2<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml"> 3<head> 4 <meta charset="UTF-8"> 5 <link th:href="@{css/index.css}" rel="stylesheet" type="text/css"/> 6 <link th:href="@{css/search.css}" rel="stylesheet" type="text/css"/> 7 <link th:href="@{css/reset.css}" rel="stylesheet" type="text/css"/> 8 9 <title>TO DOアプリ</title> 10</head> 11<body> 12<div class="header"> 13 <a class="index-link" th:href="@{/}">TODO リスト</a> 14</div> 15 16<div class="search-box"> 17 <div class="search-from"> 18 <form th:action="@{/search/result}" method="get"> 19 <input type="text" name="title" th:value="${title}"/> 20 <input type="submit" value="検索する"> 21 </form> 22 23 </div> 24 25 <div class="result-box" th:each="todo : ${result}"> 26 <div class="history-left"> 27 <p class="title" th:text="${todo.title}"></p> 28 <p class="deadline" th:text="'期限:'+ ${todo.deadline}"></p> 29 <p class="createtime" th:text="'作成日:' + ${todo.createTime}"></p> 30 </div> 31 <div class="history-right"> 32 <div class="button-box"> 33 <a class="edit-button" th:href="@{/edit/{id}(id=${todo.id})}">編集</a> 34 <div class="complete-button"> 未完了</div> 35 </div> 36 </div> 37 </div> 38</div> 39 40</div> 41</body> 42</html>

試したこと

thymeleafなどの使い方が悪いと思い、search.htmlのformを変更したりなど行い
どうにか値を検索させることはできたのですが、肝心の表示がうまくいきません。。
データベースは、Mysqlを利用しています

今週からSpringを使用したので、まだまだ不明な点が多いのですが、
考えられる原因など、ご教授頂ければ幸いです。 。
何卒、よろしくお願い致します!!

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

コントローラの実装に2点問題があるようです。修正しないといけない内容は下記の通りです。

  1. リクエストパラメータを受け取るにはRequestParamアノテーションを使用します。

java

1public String searchResult(@ModelAttribute String title, Model model) { 2 3// ↓ 修正後 4 5public String searchResult(@RequestParam("title") String title, Model model) {
  1. searchメソッドに"title"という文字列を渡してしまっているので、引数のtitleを渡すようにします。

java

1List<Todo> todolists = todoService.search("title", false); 2 3// ↓ 修正後 4 5List<Todo> todolists = todoService.search(title, false);

今回の問題を気づくためには、1) リクエストパラメータが正しく受け取れているか、2) 受け取ったリクエストパラメータで期待するSQLの問い合わせが実行されているか、を確認するといいと思います。

1)については、たとえば下記のように適当な場所でログを出力するという方法があります。(ロギングにslf4jを使用した例です)

java

1@GetMapping("/search/result") 2public String searchResult(@RequestParam("title") String title, Model model) { 3 // 1) 4 log.debug("title:{}", title); 5 List<Todo> todolists = todoService.search(title, false); 6 // 1) 7 log.debug("lists:{}", todolists.size()); 8 model.addAttribute("result", todolists); 9 return "searchresult"; 10}

2)についてはapplication.propertiesに以下の設定を追加することで、コンソールに実行されているSQLの内容が出力されるようになります。

spring.jpa.show-sql = true spring.jpa.properties.hibernate.format_sql = true logging.level.org.hibernate = info logging.level.org.hibernate.SQL = debug logging.level.org.hibernate.type.descriptor.sql.BasicBinder = trace

投稿2020/03/07 15:19

rubytomato

総合スコア1752

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KOTAITO

2020/03/08 04:26

rubytomatoさん ご回答頂きありがとうございます! コントローラのアノテーションと、serviceメソッドの引数を直すと 無事に検索結果がviewに表示されるようになりました!! また、エラーに対する原因究明の流れも丁寧に教えて頂きありがとうございます。。涙 とても助かりました! Logの出力方法など、色々と工夫の余地があるようなので 試してみます! 本当にありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問