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

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

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

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

Q&A

解決済

1回答

13103閲覧

Spring Bootでテーブルからデータ取得できない

jpaUser

総合スコア7

Java

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

0グッド

0クリップ

投稿2018/01/07 19:34

編集2018/01/08 07:23

###Spring Bootでテーブルからデータ取得したいです。
Spring Bootのサンプルを作成しまして、テストするとき、HTMLの初期画面が表示され、がエラーがありませんが、検索ボタンをクリックしても、データを画面に表示しません。
ログからSpringBootで自動生成したSQL文をコピーして、直接DBViewerに実行すると、3件のレコードを取得しました。
Eclipseのデバッグモードで調べつところ、repository.findAll()の実行結果は0件を取得したことがわかりました。
誰かが原因と解決策を教えていただけませんか?

  ■■環境:Eclipse4.6 java1.8 STS3.9.2 mySql lombok

###HTMLファイル

<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <title>商品検索</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> </head> <body> <form method="post" name="form1"> <table> <tr><td>商品ID : <input type="text" class="form-control" id="goods_id" name="goodsId" th:value="${goodsId}"/></td></tr> <tr><td>商品名 : <input type="text" class="form-control" id="goods_name" name="goodsName" th:value="${goodsName}"/></td></tr> <tr> <td>価格帯 : <input type="text" class="form-control" id="price_from" name="priceFrom" th:value="${priceFrom}"/> ~ <input type="text" class="form-control" id="price_to" name="priceTo" th:value="${priceTo}"/></td> </tr> <tr><td><input type="submit" value="検索"/></td></tr> </table> </form> <div th:if="${resultSize > 0}"><label th:text="${resultSize}"></label>件</div> <table border="1" th:if="${resultSize > 0}"> <tr> <td>商品ID</td> <td>商品名</td> <td>価格</td> </tr> <tr th:each="data : ${result}"> <td th:text="${data.goodsId}"/> <td th:text="${data.goodsName}"/> <td th:text="${data.price}"/> </tr> </table> </body> </html>

###Entityファイル

package jp.classmethod.entity; import java.math.BigDecimal; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Table; import javax.validation.constraints.NotNull; import lombok.Getter; import lombok.Setter; @Entity @Table(name="goods_mst") public class Goods { @Id @Column(name="goods_id") @Getter @Setter private String goodsId; @Column(name="goods_name") @Getter @Setter private String goodsName; @NotNull @Getter @Setter private BigDecimal price; }

###Repositoryファイル

package jp.classmethod.repository; import org.springframework.data.jpa.repository.JpaRepository; import jp.classmethod.entity.Goods; public interface GoodsRepository extends JpaRepository<Goods, String> { }

###Serviceファイル

package jp.classmethod.service; import java.math.BigDecimal; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import jp.classmethod.entity.Goods; import jp.classmethod.repository.GoodsRepository; import jp.classmethod.repository.GoodsRepositoryCustom; @Service public class GoodsService { @Autowired GoodsRepository repository; public List<Goods> search(String goodsId, String goodsName, BigDecimal priceFrom, BigDecimal priceTo) { List<Goods> result; result = repository.findAll(); return result; } }

###Controllerファイル

package jp.classmethod.controller; import java.math.BigDecimal; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.ComponentScan; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.servlet.ModelAndView; import jp.classmethod.entity.Goods; import jp.classmethod.service.GoodsService; @ComponentScan @Controller @RequestMapping("/goods") public class GoodsController { private static final String VIEW = "/goods"; @Autowired public GoodsService service; @RequestMapping(method = RequestMethod.GET) public String index() { return VIEW; } @RequestMapping(method = RequestMethod.POST) public ModelAndView login(ModelAndView mav , @RequestParam("goodsId") String goodsId, @RequestParam("goodsName") String goodsName , @RequestParam("priceFrom") BigDecimal priceFrom, @RequestParam("priceTo") BigDecimal priceTo) { mav.setViewName(VIEW); mav.addObject("goodsId", goodsId); mav.addObject("goodsName", goodsName); mav.addObject("priceFrom", priceFrom); mav.addObject("priceTo", priceTo); List<Goods> result = service.search(goodsId, goodsName, priceFrom, priceTo); mav.addObject("result", result); mav.addObject("resultSize", result.size()); return mav; } }

###Application.ymlファイル

spring: datasource: url: jdbc:mysql://localhost/javatest?useSSL=true username: root password: Infra2013 driverClassName: com.mysql.jdbc.Driver jpa: hibernate: show-sql: true ddl-auto: update database-platform: org.hibernate.dialect.MySQLDialect thymeleaf: enabled: true cache: false messages: basename = messages cache-seconds = -1 encoding = UTF-8 endpoints: enabled: true logging: level: org: hibernate: SQL: DEBUG type: descriptor: sql: BasicBinder: TRACE

###ログから取得したSQL文

select goods0_.goods_id as goods_id1_0_, goods0_.goods_name as goods_na2_0_, goods0_.price as price3_0_ from goods_mst goods0_

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

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

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

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

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

guest

回答1

0

ベストアンサー

記載されたController/Service/RepositoryならびにSpringBootの設定を適用しましたが、私の環境では特に問題なくクエリが実行され、その結果(全件)が出力されました。

org.hibernate.SQL : select goods0_.goods_id as goods_id1_0_, goods0_.goods_name as goods_na2_0_, goods0_.price as price3_0_ from goods_mst goods0_

(Controllerは @RestControllerに変更して実行)

念のため、SpringBoot関連で動作しているライブラリのバージョンを見直すと良いでしょうか。
(私は、SpringBoot-1.5.9で検証しています。それ以外はSpringBoot-1.5.9のmanagedバージョンです)

余談ですが、記載されているHTML(thymeleaf)と実際に実行されるControllerにて、POST送信時ではすべてのパラメータが必須入力なのに対し、Serviceクラス以降では特にそれらのパラメータを一切使っていませんね。

投稿2018/01/08 13:20

A-pZ

総合スコア12011

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

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

jpaUser

2018/01/09 13:57

pom.xmlをしらべましたが、私もSpringbootの1.5.9を利用しています。しかも、Eclipseのビルド・パスにあるMaven依存関係もSpringBoot-1.5.9.jarを利用しています。 ### pom.xml ``` <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>jp</groupId> <artifactId>classmethod</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>search</name> <description>Demo project for Spring Boot</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.9.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project> ``` >余談ですが、記載されているHTML(thymeleaf)と実際に実行されるControllerにて、POST送信時ではすべてのパラメータが必須入力なのに対し、Serviceクラス以降では特にそれらのパラメータを一切使っていませんね。 そうです。取りあえず、正常に動けるかどうかをテストする段階です。
jpaUser

2018/01/09 15:57

原因をようやくわかりました。データの問題です。mysqlをテストするとき、自動コミットをOFFしましたのが原因です。コミットする前に、mysqlのクライアント側もDBViewerも参照できますが、SpringBootがこのようなデータを認めなさそうです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問