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

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

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

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Spring Boot

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

Q&A

1回答

10524閲覧

Spring JPAでデータベースを取ってこれない2(参考書籍:Spring Data JPAプログラミング入門)

MaikoH

総合スコア16

MySQL

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Spring Boot

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

0グッド

0クリップ

投稿2019/01/20 06:13

編集2019/01/24 11:47

こんにちは、私は現在springbootでwebアプリを作成するために、掲題の書籍でデータベースを勉強中です。
3.5演習リポジトリーの作成で詰まってしまっています。
以前もentitiymanegerを使用して作成した際に詰まってしまったのですが、その時はspring.datasource.initialization-mode=alwaysとapplication.propertiesに記載し、データを取得することが出来ました。が、今回は出来ません。
以前の質問:Spring JPAでデータベースを取ってこれない(参考書籍:Spring Data JPAプログラミング入門)

起こっている事:
実行は成功しているのですが、データベースのVALUESを取ってこれません。
実際の値画像:
実際の画像

期待値:
resorses配下のdata.sqlが読み込まれて出力される

sql

1INSERT INTO employee 2 ( no, birthday, first_name, last_name, mail_address, sex ) 3 VALUES 4 (1,'1980-01-31','太郎','山田','taro.yamada@mail.com','male'); 5INSERT INTO employee 6 ( no, birthday, first_name, last_name, mail_address, sex ) 7 VALUES 8 (2,'1985-02-10','一郎','鈴木','ichiro.suzuki@mail.com','male'); 9INSERT INTO employee 10 ( no, birthday, first_name, last_name, mail_address, sex ) 11 VALUES 12 (3,null,'花子','石井',null,'female');

application.properties:

spring.datasource.url=jdbc:mysql://localhost:3306/userdata characterEncoding=UTF-8 spring.datasource.username=root spring.datasource.password=newpass spring.datasource.class-name=com.mysql.jdbc.Driver spring.datasource.sqlScriptEncoding=UTF-8 spring.jpa.database=MYSQL spring.thymeleaf.mode=HTML spring.thymeleaf.cache=false spring.datasource.initialization-mode=always spring.jpa.show-sql=true spring.jpa.hibernate.ddl-auto=create logging.level.org.hibernate.SQL=DEBUG logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE

EmployeeController:

package com.spring.data.jpa.example.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import com.spring.data.jpa.example.service.EmployeeService; @Controller @RequestMapping("employee") public class EmployeeController { @Autowired private EmployeeService employeeService; @RequestMapping("list") public String list(Model model) { model.addAttribute("employees", employeeService.getEmployeeList()); return "employee/list"; } }

Employee:

package com.spring.data.jpa.example.repository.entity; import java.io.Serializable; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.EnumType; import javax.persistence.Enumerated; import javax.persistence.GeneratedValue; import javax.persistence.Id; import lombok.Getter; import lombok.Setter; import lombok.ToString; @Entity @Getter @Setter @ToString public class Employee implements Serializable { private static final long serialVersionUID = 1L; /** * 性別の列挙 */ public static enum Sex { male, female } /** 社員番号 */ @Id @GeneratedValue private Integer no; /** 名前 */ @Column(length = 20, nullable = false) private String firstName; /** 苗字 */ @Column(length = 20, nullable = false) private String lastName; /** 性別 */ @Column(length = 10) @Enumerated(EnumType.STRING) private Sex sex; /** 生年月日 */ private java.sql.Date birthday; /** メールアドレス */ @Column(unique = true) private String mailAddress; }

EmployeeRepository

package com.spring.data.jpa.example.repository; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; import com.spring.data.jpa.example.repository.entity.Employee; @Repository public interface EmployeeRepository extends JpaRepository<Employee, Integer> { }

EmployeeService

package com.spring.data.jpa.example.service; import java.util.List; import com.spring.data.jpa.example.repository.entity.Employee; public interface EmployeeService { public List<Employee> getEmployeeList(); }

EmployeeServiceImpl

package com.spring.data.jpa.example.service; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.spring.data.jpa.example.repository.EmployeeRepository; import com.spring.data.jpa.example.repository.entity.Employee; @Service @Transactional(readOnly = true) public class EmployeeServiceImpl implements EmployeeService { @Autowired private EmployeeRepository employeeRepository; @Override public List<Employee> getEmployeeList() { return employeeRepository.findAll(); } }

ログ:

Hibernate: drop table if exists employee 2019-01-20 14:55:38.171 DEBUG 10990 --- [ main] org.hibernate.SQL : drop table if exists hibernate_sequence Hibernate: drop table if exists hibernate_sequence 2019-01-20 14:55:38.187 DEBUG 10990 --- [ main] org.hibernate.SQL : create table employee (no integer not null, birthday date, first_name varchar(20) not null, last_name varchar(20) not null, mail_address varchar(255), sex varchar(10), primary key (no)) engine=MyISAM Hibernate: create table employee (no integer not null, birthday date, first_name varchar(20) not null, last_name varchar(20) not null, mail_address varchar(255), sex varchar(10), primary key (no)) engine=MyISAM 2019-01-20 14:55:38.217 DEBUG 10990 --- [ main] org.hibernate.SQL : create table hibernate_sequence (next_val bigint) engine=MyISAM Hibernate: create table hibernate_sequence (next_val bigint) engine=MyISAM 2019-01-20 14:55:38.234 DEBUG 10990 --- [ main] org.hibernate.SQL : insert into hibernate_sequence values ( 1 ) Hibernate: insert into hibernate_sequence values ( 1 ) 2019-01-20 14:55:38.236 DEBUG 10990 --- [ main] org.hibernate.SQL : alter table employee add constraint UK_juipuvrjn0ygo4oe6qtu9jyuj unique (mail_address) Hibernate: alter table employee add constraint UK_juipuvrjn0ygo4oe6qtu9jyuj unique (mail_address) 2019-01-20 14:55:38.258 INFO 10990 --- [ main] o.h.t.schema.internal.SchemaCreatorImpl : HHH000476: Executing import script 'org.hibernate.tool.schema.internal.exec.ScriptSourceInputNonExistentImpl@574059d5' 2019-01-20 14:55:38.260 INFO 10990 --- [ main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default' 2019-01-20 14:55:38.683 INFO 10990 --- [ main] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor' 2019-01-20 14:55:38.722 WARN 10990 --- [ main] aWebConfiguration$JpaWebMvcConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning 2019-01-20 14:55:38.987 INFO 10990 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path '' 2019-01-20 14:55:38.989 INFO 10990 --- [ main] c.s.d.j.e.PracticeSpringDb2Application : Started PracticeSpringDb2Application in 3.746 seconds (JVM running for 4.546) 2019-01-20 14:56:04.591 INFO 10990 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet' 2019-01-20 14:56:04.591 INFO 10990 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet' 2019-01-20 14:56:04.599 INFO 10990 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 8 ms 2019-01-20 14:56:04.669 INFO 10990 --- [nio-8080-exec-1] o.h.h.i.QueryTranslatorFactoryInitiator : HHH000397: Using ASTQueryTranslatorFactory 2019-01-20 14:56:04.739 DEBUG 10990 --- [nio-8080-exec-1] org.hibernate.SQL : select employee0_.no as no1_0_, employee0_.birthday as birthday2_0_, employee0_.first_name as first_na3_0_, employee0_.last_name as last_nam4_0_, employee0_.mail_address as mail_add5_0_, employee0_.sex as sex6_0_ from employee employee0_ Hibernate: select employee0_.no as no1_0_, employee0_.birthday as birthday2_0_, employee0_.first_name as first_na3_0_, employee0_.last_name as last_nam4_0_, employee0_.mail_address as mail_add5_0_, employee0_.sex as sex6_0_ from employee employee0_

環境:
mysql> select version();
+-----------+
| version() |
+-----------+
| 5.7.22 |
+-----------+
1 row in set (0.02 sec)

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

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

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

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

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

rubytomato

2019/01/23 00:24

MySQLのバージョンを教えてください。 それと、このプロジェクトは書籍のソースコードを利用されていると思いますが、application.properties以外に修正をされた部分はありますか?
MaikoH

2019/01/24 11:30

こんばんは、mysqlのバージョンを環境欄に記載いたしました。 > application.properties以外に修正をされた部分はありますか? 実は一から手で書き直したのですが、うまく値が取ってこれなくなった為、書籍のソースコードサイトからダウンロードしてパッケージにそのまま入れたのですが、やはり値を取ってこれなくなってしまった状態です...。
guest

回答1

0

私も出版社サイトよりソースコードをダウンロードしEclipseにインポートして実行してみました。
結果から言いますと、プロパティファイルのDB接続情報の修正だけでデータを表示させることができました。
なので、具体的にどこが原因かは質問内容からいまのところ判断できませんが、プロジェクトの構成に問題があるように思います。

以下に私が行ったインポートから実行までの手順を記載致しますので、参考になさってください。

環境

  • Java: 1.8.0_191
  • IDE: Eclipse 2018-12
  • DB: MySQL 5.6

図1. 出版社サイトよりソースコードのzipファイルをダウンロード、下図のように展開しました。
zip展開後

図2. Eclipseを立ち上げPackage Explorer上で右クリック、下図のようにインポートを開始しました。
eclipseへimport

図3. Select root directoryで先ほど展開したzipファイルの"3.5 演習 リポジトリ―の作成\spring-data-jpa"を選択、下のチェックボックスで"Copy projects into workspace"にチェック。
イメージ説明

図4. Eclipseへインポート直後の状態です。プロジェクト名に赤い×マークが付いているので次の手順で解消します。(付いていない場合、図5はスキップ)
イメージ説明

図5. プロジェクト名を右クリックしメニューの"Maven" → "Update Project..."を選択します。これで赤い×マークが消えるはずです。
イメージ説明

図6. プロパティファイルを編集します。修正をしたのは赤い枠線で囲った3行(MySQLへの接続情報)だけです。
この図の情報は私の環境の情報なので、適宜書き換えてください。
イメージ説明

図7. アプリケーションを起動します。SpringDataJpaApplicatoinクラスを開き、mainメソッドを右クリックしメニューの"Run As" → "Java Application"を選択します。
イメージ説明

図8. 起動時のログの内容です。赤い枠線で囲った行を見るとdata.sqlを読み込んでデータをインサートしていることがわかります。
イメージ説明

当該の行を下記にpickupしました。この内容からワークスペースの"spring-data-jpa/target/classes/data.sql"にあるファイルが読み込まれていることが分かります。

o.s.jdbc.datasource.init.ScriptUtils : Executing SQL script from URL [file:/D:/dev/eclipse-jee-2018-12-R-win32-x86_64_workspace/spring-data-jpa/target/classes/data.sql] o.s.jdbc.datasource.init.ScriptUtils : Executed SQL script from URL [file:/D:/dev/eclipse-jee-2018-12-R-win32-x86_64_workspace/spring-data-jpa/target/classes/data.sql] in 72 ms.

図9. ブラウザで"http://localhost:8080/employee/list"にアクセスした結果です。データの表示ができました。
イメージ説明

以上が、私が行った確認作業の内容になります。

まずは図8のログが表示されるようにする必要があります。
Windowsのエクスプローラーなどでワークスペースの"spring-data-jpa/target/classes/data.sql"があるか確認してみてください。

もしなかった場合は、Eclipseのメニューバー → "Project" → "Clean..." → クリーンするプロジェクトに"spring-data-jpa"を選択してCleanボタンをクリックしてください。
ビルドが行われるので、もう一度"pring-data-jpa/target/classes"をみてdata.sqlが存在するか確認してください。

ちなみにこのdata.sqlは、プロジェクトをビルドするたびに"spring-data-jap/src/main/resources/data.sql"から"spring-data-jpa/target/classes/data.sql"へコピーされます。

投稿2019/01/24 15:44

rubytomato

総合スコア1752

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

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

MaikoH

2019/01/26 08:52

非常に丁寧な回答ありがとうございます。(驚きました) > Windowsのエクスプローラーなどでワークスペースの"spring-data-jpa/target/classes/data.sql"があるか確認してみてください。 ありました。 が、エラーで以下のような表示が出ました。 ----- Whitelabel Error Page This application has no explicit mapping for /error, so you are seeing this as a fallback. Sat Jan 26 17:43:07 JST 2019 There was an unexpected error (type=Internal Server Error, status=500). An error happened during template parsing (template: "class path resource [templates/employee/list.html]") ------ 環境をrubytomatoさんと同じにし、再度試したのですがやはり同様のエラーが出ました。 ググったらhtml側に問題があるようなのですが、インポートしただけなので間違えているはずはないのですが.... もう一度本を見直して環境構築などに問題がないか確認いたします。
rubytomato

2019/01/27 10:03

別のエラーが出たということですが、可能でしたらお使いになっているJava, Spring Bootのバージョン、およびIDEの種類とバージョンを質問内容に追記して頂けますか? それとhtml(thymeleaf)の問題らしいということですが、プロジェクト上に何かしらエラーが出ていませんか? たとえば、プロジェクト名やソースファイル、pom.xmlファイルに赤い×マークが付いてるとかです。 念のため、プロジェクトのディレクトリでコマンドプロンプトから "mvnw.cmd clean package"と打ってビルドが成功するか確認してみてください。 上記の結果、問題ないようでしたら問題切り分けのため、試しにlist.htmlのtbodyタグ全部を削除して、それでページが表示されるか確認してください。表示されるようでしたらthymeleafの問題かもしれません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問