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

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

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

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

Spring

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

MyBatis

MyBatisはJavaや.NET Frameworkでなどで使用できる、SQL文や、ストアドプロシージャをオブジェクトと紐付けるO/Rマッピングフレームワークです。

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

Spring Boot

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

Q&A

解決済

2回答

4957閲覧

Sprin boot+Mybatis+H2でアプリがうまく起動しない

infra____

総合スコア90

Java

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

Spring

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

MyBatis

MyBatisはJavaや.NET Frameworkでなどで使用できる、SQL文や、ストアドプロシージャをオブジェクトと紐付けるO/Rマッピングフレームワークです。

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

Spring Boot

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

0グッド

0クリップ

投稿2020/11/21 04:52

標題の件ですが、データベースとの連携がうまく行きません。
どうかお力を貸してください。
お願い致します。

下記サイトのコードをそのままコピペしました。
https://www.microstone.info/spring-boot-2%E5%AE%9F%E8%B7%B5%E5%85%A5%E9%96%80%EF%BC%9A%E7%B0%A1%E5%8D%98%E3%81%AAweb%E3%82%A2%E3%83%97%E3%83%AA%E3%82%92%E4%B8%80%E3%81%8B%E3%82%89%E4%BD%9C%E6%88%90%E3%83%81%E3%83%A5%E3%83%BC/

以下は、gitにあるコードです。
https://github.com/microstone-info/springbootsample
▪️エラー内容
This application has no explicit mapping for /error, so you are seeing this as a fallback.

Sat Nov 21 13:48:59 JST 2020
There was an unexpected error (type=Internal Server Error, status=500).
Invalid bound statement (not found): com.example.demo.mapper.ItemMapper.findAll
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.example.demo.mapper.ItemMapper.findAll
at org.apache.ibatis.binding.MapperMethod$SqlCommand.<init>(MapperMethod.java:235)
at org.apache.ibatis.binding.MapperMethod.<init>(MapperMethod.java:53)
at org.apache.ibatis.binding.MapperProxy.lambda$cachedInvoker$0(MapperProxy.java:115)
at java.base/java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1705)
at org.apache.ibatis.binding.MapperProxy.cachedInvoker(MapperProxy.java:102)
at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:85)
at com.sun.proxy.$Proxy136.findAll(Unknown Source)
at com.example.demo.service.ItemService.findAll(ItemService.java:21)
at
▪️ディレクトリ構造

イメージ説明

Application.javaのファイル

java

1package com.example.demo; 2 3import org.springframework.boot.SpringApplication; 4import org.springframework.boot.autoconfigure.SpringBootApplication; 5 6@SpringBootApplication 7public class Application { 8 9 public static void main(String[] args) { 10 SpringApplication.run(Application.class, args); 11 } 12 13}

ItemController.javaのファイル

java

1package com.example.demo.controller; 2 3import org.springframework.beans.factory.annotation.Autowired; 4import org.springframework.stereotype.Controller; 5import org.springframework.ui.Model; 6import org.springframework.validation.BindingResult; 7import org.springframework.validation.annotation.Validated; 8import org.springframework.web.bind.annotation.DeleteMapping; 9import org.springframework.web.bind.annotation.GetMapping; 10import org.springframework.web.bind.annotation.ModelAttribute; 11import org.springframework.web.bind.annotation.PathVariable; 12import org.springframework.web.bind.annotation.PostMapping; 13import org.springframework.web.bind.annotation.PutMapping; 14import org.springframework.web.bind.annotation.RequestMapping; 15 16import com.example.demo.domain.Item; 17import com.example.demo.service.ItemService; 18 19@Controller 20@RequestMapping("/items") 21public class ItemController { 22 23 @Autowired 24 private ItemService itemService; 25 26 @GetMapping 27 public String index(Model model) { 28 model.addAttribute("items", itemService.findAll(model)); 29 return "index"; 30 } 31 32 @GetMapping("{id}") 33 public String show(@PathVariable Long id, Model model) { 34 model.addAttribute("item", itemService.findOne(id)); 35 return "show"; 36 } 37 38 @GetMapping("new") 39 public String newItem(@ModelAttribute("item") Item item, Model model) { 40 return "new"; 41 } 42 43 @GetMapping("{id}/edit") 44 public String edit(@PathVariable Long id, @ModelAttribute("item") Item item, Model model) { 45 model.addAttribute("item", itemService.findOne(id)); 46 return "edit"; 47 } 48 49 @PostMapping 50 public String create(@ModelAttribute("item") @Validated Item item, BindingResult result, Model model) { 51 if (result.hasErrors()) { 52 return "new"; 53 } else { 54 itemService.save(item); 55 return "redirect:/items"; 56 } 57 } 58 59 @PutMapping("{id}") 60 public String update(@PathVariable Long id, @ModelAttribute("item") @Validated Item item, BindingResult result, Model model) { 61 if (result.hasErrors()) { 62 model.addAttribute("item", item); 63 return "edit"; 64 } else { 65 item.setId(id); 66 itemService.update(item); 67 return "redirect:/items"; 68 } 69 } 70 71 @DeleteMapping("{id}") 72 public String delete(@PathVariable Long id) { 73 itemService.delete(id); 74 return "redirect:/items"; 75 } 76} 77

Item.javaのファイル

java

1package com.example.demo.domain; 2 3import javax.validation.constraints.Max; 4import javax.validation.constraints.Min; 5import javax.validation.constraints.NotBlank; 6import javax.validation.constraints.Size; 7 8public class Item { 9 private Long id; 10 11 @NotBlank(message="商品名を記入してください。") 12 private String name; 13 14 @Min(value=10, message="10以上の数値を入力してください。") 15 @Max(value=10000, message="10000以下の数値を入力してください。") 16 private float price; 17 18 @Size(max=50, message="ベーダー名は50文字を超えないでください。") 19 private String vendor; 20 21 public Long getId() { 22 return id; 23 } 24 25 public void setId(Long id) { 26 this.id = id; 27 } 28 29 public String getName() { 30 return name; 31 } 32 33 public void setName(String name) { 34 this.name = name; 35 } 36 37 public float getPrice() { 38 return price; 39 } 40 41 public void setPrice(float price) { 42 this.price = price; 43 } 44 45 public String getVendor() { 46 return vendor; 47 } 48 49 public void setVendor(String vendor) { 50 this.vendor = vendor; 51 } 52}

ItemMappe.javaのファイル

java

1package com.example.demo.mapper; 2 3import java.util.List; 4 5import org.apache.ibatis.annotations.Mapper; 6 7import com.example.demo.domain.Item; 8 9@Mapper 10public interface ItemMapper { 11 List<Item> findAll(); 12 13 Item findOne(Long id); 14 15 void save(Item item); 16 17 void update(Item item); 18 19 void delete(Long id); 20}

ItemMappe.xmlのファイル

xml

1<?xml version="1.0" encoding="UTF-8"?> 2<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 3<mapper namespace="com.example.demo.mapper.ItemMapper"> 4 <select id="findAll" resultType="com.example.demo.domain.Item"> 5 select * from item 6 </select> 7 8 <select id="findOne" resultType="com.example.demo.domain.Item"> 9 select * from item where id= #{id} 10 </select> 11 12 <insert id="save" useGeneratedKeys="true" keyProperty="id"> 13 insert into item(name, price, vendor) values(#{name}, #{price}, #{vendor}) 14 15 </insert> 16 17 <update id="update"> 18 update item set name=#{name}, price=#{price}, vendor=#{vendor} where id= #{id} 19 </update> 20 21 <delete id="delete"> 22 delete from item where id = #{id} 23 </delete> 24</mapper>

Item.serviceのファイル

java

1package com.example.demo.service; 2 3import java.util.List; 4 5import org.springframework.beans.factory.annotation.Autowired; 6import org.springframework.stereotype.Service; 7import org.springframework.transaction.annotation.Transactional; 8import org.springframework.ui.Model; 9 10import com.example.demo.domain.Item; 11import com.example.demo.mapper.ItemMapper; 12 13@Service 14public class ItemService { 15 16 @Autowired 17 ItemMapper itemMapper; 18 19 @Transactional 20 public List<Item> findAll(Model model) { 21 return itemMapper.findAll(); 22 } 23 24 @Transactional 25 public Item findOne(Long id) { 26 return itemMapper.findOne(id); 27 } 28 29 @Transactional 30 public void save(Item item) { 31 itemMapper.save(item); 32 } 33 34 @Transactional 35 public void update(Item item) { 36 itemMapper.update(item); 37 } 38 39 @Transactional 40 public void delete(Long id) { 41 itemMapper.delete(id); 42 } 43 44}

sqeme.sqlのファイル

sql

1CREATE TABLE item ( 2 id bigint(20) NOT NULL AUTO_INCREMENT, 3 name varchar(255), 4 price real, 5 vendor varchar(255), 6 PRIMARY KEY (id), 7) ENGINE=InnoDB DEFAULT CHARSET=utf8;

pom.xmlのファイル

xml

1<?xml version="1.0" encoding="UTF-8"?> 2<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4 <modelVersion>4.0.0</modelVersion> 5 <parent> 6 <groupId>org.springframework.boot</groupId> 7 <artifactId>spring-boot-starter-parent</artifactId> 8 <version>2.3.5.RELEASE</version> 9 <relativePath/> <!-- lookup parent from repository --> 10 </parent> 11 <groupId>com.example</groupId> 12 <artifactId>application</artifactId> 13 <version>0.0.1-SNAPSHOT</version> 14 <name>demo</name> 15 <description>Demo project for Spring Boot</description> 16 17 <properties> 18 <java.version>11</java.version> 19 </properties> 20 21 <dependencies> 22 <dependency> 23 <groupId>org.mybatis</groupId> 24 <artifactId>mybatis</artifactId> 25 <version>3.5.5</version> 26 </dependency> 27 <dependency> 28 <groupId>org.mybatis</groupId> 29 <artifactId>mybatis-spring</artifactId> 30 <version>2.0.2</version> 31 </dependency> 32 <dependency> 33 <groupId>org.mybatis.spring.boot</groupId> 34 <artifactId>mybatis-spring-boot-starter</artifactId> 35 <version>2.1.4</version> 36 </dependency> 37 <dependency> 38 <groupId>com.h2database</groupId> 39 <artifactId>h2</artifactId> 40 <scope>runtime</scope> 41 </dependency> 42 <dependency> 43 <groupId>org.springframework</groupId> 44 <artifactId>spring-jdbc</artifactId> 45 </dependency> 46 <dependency> 47 <groupId>org.springframework.boot</groupId> 48 <artifactId>spring-boot-starter-thymeleaf</artifactId> 49 </dependency> 50 <dependency> 51 <groupId>org.springframework.boot</groupId> 52 <artifactId>spring-boot-starter-validation</artifactId> 53 </dependency> 54 <dependency> 55 <groupId>org.springframework.boot</groupId> 56 <artifactId>spring-boot-starter-web</artifactId> 57 </dependency> 58 <dependency> 59 <groupId>org.springframework.boot</groupId> 60 <artifactId>spring-boot-devtools</artifactId> 61 <scope>runtime</scope> 62 <optional>true</optional> 63 </dependency> 64 <dependency> 65 <groupId>org.springframework.boot</groupId> 66 <artifactId>spring-boot-starter-test</artifactId> 67 <scope>test</scope> 68 </dependency> 69 </dependencies> 70 71 <build> 72 <plugins> 73 <plugin> 74 <groupId>org.springframework.boot</groupId> 75 <artifactId>spring-boot-maven-plugin</artifactId> 76 </plugin> 77 </plugins> 78 </build> 79 80</project>

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

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

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

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

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

guest

回答2

0

ベストアンサー

ItemMapper.xml の場所が間違っていたようです

java/com/example/demo/mapper 配下に置かれていますが、
resources/com/example/demo/mapper 配下にファイルを移動すると正常に動作できそうです
(Mapper用の xml は resources 配下の package のディレクトリのファイルをデフォルトで探す)

投稿2020/11/21 10:38

kiino

総合スコア557

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

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

infra____

2020/11/21 12:38

コメントありがとうございます。 ファイルの位置を変更して実行すると、下記エラーが出ました。下記エラーファ出たため、ポート番号を8900に変更して試しましたが、同様エラーが出ました。原因分かりますか?泣 Web server failed to start. Port 8080 was already in use. Action: Identify and stop the process that's listening on port 8900 or configure this application to listen on another port
kiino

2020/11/21 13:13 編集

わりとよくあるやつですね。 すでにTomcat(Springが使うWebサーバー)のポート 8080 がほかのアプリケーションで使われているので、 今から起動しようとするアプリケーションの起動で失敗しています。 他のSpringアプリなどを起動していた場合が該当すると思うので、以下のような対処を試してもらえますでしょうか - 一旦起動済みのアプリを停止して、今回のアプリを起動する。 - 実行環境のPC/サーバーを再起動してから今回のアプリを起動する また、追加で確認したいのですが、 > ポート番号を8900に変更し ということですが、どのように変更したか教えていただけませんか? 起動時のポート変更の方法はいろいろあって、以下のような手段があるとおもいますが、そのように試されてますでしょうか - application.properties ポートの設定を書く - IDE のパラメーター設定で server.port の設定を上書きする - 起動時の java コマンドの引数に Java option を追加する 参考: https://www.codeflow.site/ja/article/spring-boot-change-port
infra____

2020/11/21 14:35

ご丁寧に返信して頂きありがとうございます。 現状、以下の①と③は試しましたが、やはり同じエラーが出ます。 >一旦起動済みのアプリを停止して、今回のアプリを起動する。 →lsof -i:8080でプログラムを確認後、kill PIDでプロセスを削減しました。① killしたにも関わらず、既に利用されていると言うエラーが出るのは、キャッシュのせいですか? >実行環境のPC/サーバーを再起動してから今回のアプリを起動する サーバーを再起動はどうするのでしょうか?bootでは、tomcatは組みこまれていて、操作の仕方が分かりません。② >起動時のポート変更の方法はいろいろあって、以下のような手段があるとおもいますが、そのように試されてますでしょうか →application.propertiesで変更後のポート番号を設定しました。③ 引続きよろしくお願い致します。 また、別に解決策があれば、ご教示のほどよろしくお願い致します。
kiino

2020/11/22 04:48 編集

ものによってはプロセスキルした後(異常終了した後)は自動で再起動するものがありますが、 プロセスキルしたあと、該当のポートはきちんと解放されていますでしょうか? そのやり方でするのであれば、解放されるまでプロセスキルを試した方がよいかと思います。 8080ポートをつかんでいるアプリケーションを特定し、正常終了させるのが再現性もあって確実かと思いますが。 8080ポートをつかんでいるプロセスが実行しているコマンやプロセス名をおしえてもらうことはできますでしょうか 「lsof -i:8080」しているのであれば、そのときにでる「NAME」というやつです > サーバーを再起動はどうするのでしょうか? 動作環境はなにをつかわれてますか。 WindowsやMacであれば、本体の再起動をしてほしいのですが。 Linux 上で動作しているのであれば shutdown -r now などで可能です。
infra____

2020/11/23 06:37

ご返信が遅れてしまい、大変申し訳ございません。 ただいま、ビルドパスのエラーが出て、そちらの対応をしております。 解決次第、「8080ポートをつかんでいるプロセスが実行しているコマンやプロセス名をおしえてもらうことはできますでしょうか」の返答をさせて頂きます。 また、追加で一点質問です。 ItemController.javaのクラスで、@RequestMapping("/items")とパスを指定していますが、 itemsと言うhtmlのファイルを作成していないのに、なぜ遷移させることができるのでしょうか。 ご多用の中、大変恐縮でございますが、ご返信のほどよろしくお願い致します。
kiino

2020/11/23 06:50

確認よろしくおねがいします。 >また、追加で一点質問です。 この件については本筋とは異なるので、べつの質問として投稿された方がよさそうですね。 同じ疑問を持つ方がいた場合にも、さんこうになるかもしれませんので。
infra____

2020/11/23 07:06

ご返信ありがとうございます。 >また、追加で一点質問です。 この件については本筋とは異なるので、べつの質問として投稿された方がよさそうですね。 同じ疑問を持つ方がいた場合にも、さんこうになるかもしれませんので。 →承知致しました。 以下、lsof -i:8080コマンドの実行結果です。 command→java NAME→*:http-alt (LISTEN) また、以下補足です。 Application.javaファイルをSpring Bootアプリケーションで実行すると、 web server failed to start. Port 8080 was already in use. Action: Identify and stop the process that's listening on port 8080 or configure this application to listen on another port. また、ブラウザにアクセスすると、以下のエラーが出力されます。 There was an unexpected error (type=Internal Server Error, status=500). ### Error querying database. Cause: org.h2.jdbc.JdbcSQLSyntaxErrorException: テーブル "ITEM" が見つかりません Table "ITEM" not found; SQL statement: select * from item [42102-200] ### The error may exist in com/example/demo/mapper/ItemMapper.xml ### The error may involve com.example.demo.mapper.ItemMapper.findAll ### The error occurred while executing a query ### SQL: select * from item ### Cause: org.h2.jdbc.JdbcSQLSyntaxErrorException: テーブル "ITEM" が見つかりません ご多用の中、大変恐縮でございますが、引続きよろしくお願い致します。
guest

0

掲載されたコードを試してみましたが、私の環境ではコンパイルエラーになりました。

The method findAll(Model) in the type ItemService is not applicable for the arguments ()

ItemServiceクラスのfindAll()メソッドがModelを引数に取ってますが、
引数なしにすべきじゃないでしょうか?

java

1 public List<Item> findAll() { 2 return itemMapper.findAll(); 3 }

投稿2020/11/21 09:37

gpsoft

総合スコア1323

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

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

infra____

2020/11/21 12:18

コードを試して頂きありがとうございます。引数なしで試しましたが、エラーなりました、、
gpsoft

2020/11/21 12:27

あらま、残念。 私の環境では、ちゃんと動いてますけどね…。 不思議ですね。
infra____

2020/11/21 12:31

ご多用の中、大変恐縮でございますが、お聞きしたことがあります。 1.IDEはEclipseで端末は何を使われていますか?
gpsoft

2020/11/21 12:53

こちらは、Linux, JDK8, Eclipse Oxygen(古い!)ってとこです。 掲載いただいたコードでも、githubリポジトリのコードでも、 どちらでも動きましたよ。
infra____

2020/11/21 14:38

ご返信ありがとうございます。 コードに不備がないと分かっただけでも、大変助かりました。(エラー原因の特定がしやすくなりますので) 今後ともよろしくお願い致します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問