🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
MVC

MVC(Model View Controller)は、オブジェクト指向プログラミングにおけるモデル・ビュー・コントローラーの総称であり、ソフトフェア開発で使われている構築パターンとしても呼ばれます。

Java

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

Spring

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

Thymeleaf

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

Spring Boot

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

Q&A

1回答

1907閲覧

テーブルから得た List が外部キーだけ持っているが外部のそのキー(id)に対応するデータを取得し、 thymeleaf で HTML(view) に表示したい

trgw

総合スコア26

MVC

MVC(Model View Controller)は、オブジェクト指向プログラミングにおけるモデル・ビュー・コントローラーの総称であり、ソフトフェア開発で使われている構築パターンとしても呼ばれます。

Java

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

Spring

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

Thymeleaf

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

Spring Boot

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

0グッド

0クリップ

投稿2021/01/28 03:31

編集2021/01/28 03:57

** 環境
・eclipse(spring tool suite 4)
・spring
・thymeleaf
・MySQL

以下のようなテーブルがあります

Table Book

idbook category idname
13rasyomon
21blue beard
32it

Table Book Category

idcategory
1foreign fairy tale
2foreign horror
3novel

これを以下の記述で book category id のまま表示することはできました。

Model: Books

Java

1package librarypackage.model; 2 3import java.io.Serializable; 4import javax.persistence.*; 5 6@Entity 7@Table(name="book") 8public class Books implements Serializable { 9 10 @Id 11 private int id; 12 13 @Column(name="book_category_id") 14 private int bookCategoryId; 15 16 private String name; 17 18 ...19}

Model: Book category

Java

1package librarypackage.model; 2 3import java.io.Serializable; 4import javax.persistence.*; 5 6@Entity 7@Table(name="book_category") 8public class BookCategory implements Serializable { 9 10 @Id 11 private int id; 12 13 private String category; 14 15 ...

BooksRepository

Java

1package onepackage.repositories; 2 3import onepackage.model.Books; 4 5import org.springframework.data.jpa.repository.JpaRepository; 6 7public interface BooksRepository extends JpaRepository<Books, Long> { 8 9}

Controller: Books

Java

1package onepackage.controller; 2 3import onepackage.model.Books; 4 5import onepackage.repositories.BooksRepository; 6 7import java.util.List; 8 9import org.springframework.beans.factory.annotation.Autowired; 10import org.springframework.stereotype.Controller; 11import org.springframework.ui.Model; 12import org.springframework.web.bind.annotation.GetMapping; 13 14@Controller 15public class BooksController { 16 17 @Autowired 18 private BooksRepository booksRepository; 19 20 21 @GetMapping("/books") 22 public String getBooks(Model model) { 23 List<Books> books = booksRepository.findAll(); 24 model.addAttribute("booklist", books); 25 return "books"; 26 } 27}

View

HTML

1...略 2<table> 3 <thead> 4 <tr> 5 <th></th> 6 <th>本の名前</th> 7 <th>カテゴリ</th> 8 </tr> 9 </thead> 10 <tbody> 11 <tr th:each="books : ${booklist}"> 12 <td th:text="${books.id}">a</td> 13 <td th:text="${books.name}">b</td> 14 <td th:text="${books.bookCategoryId}">c</td> 15 </tr> 16 </tbody> 17</table> 18...略

こうすると表示は

本の名前カテゴリ
1rasyomon3
2blue beard1
3it2

となります。
${booklist}には category id の情報しかないわけですが、テーブルのカテゴリのところを id でなくて、対応するカテゴリ(の文字列)を表示したいのですが、どういった方法があるでしょうか。

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

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

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

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

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

guest

回答1

0

以下のテーブルのような表示がされるように変換したいということであってますかね?

Id本の名前カテゴリ
1rasyomonnovel
2blue beardforeign fairy tale
3itforeign horror

であれば、2つのテーブルをRepositoryからひいて、変換するか、

List<BookData> resBook = bookRepository.findAll(); List<BookCategory> resCategory = bookCategoryRepository.findAll(); List<CategorisedBookData> categorizedBooks = resBook .stream() .map(book -> { for (BookCategory bc: resCategory) { if (bc.getId().equals(book.getCategoryId())) { return new CategorisedBookData(book.getId(), bc.getName(), book.getName()); } } return new CategorisedBookData(); }) .filter(converted -> converted.getId() != null) // ないと思うが、マッチしなかったものは削除 .collect(Collectors.toList()); model.addAttribute("booklist", categorizedBooks);

もしくは Repository 側でネイティブクエリーを定義して
JOIN して取得した Entity を返すかすればよさそうに思えました。

JOIN

1@Getter 2@Setter 3@Entity 4public class CategorisedBookData { 5 6 @Id 7 private Integer id; 8 private String bookCategoryName; 9 private String name; 10 11 public CategorisedBookData() {} 12} 13

JOIN

1public interface CategorizedBookDataRepository extends JpaRepository<CategorisedBookData, Integer> { 2 3 @Query(value = "select b.id as id, c.name as book_category_name, b.name as name " 4 + "from book b " 5 + "join book_category c on c.id = b.book_category_id " 6 + "order by b.id ", 7 nativeQuery = true) 8 List<CategorisedBookData> find(); 9} 10

投稿2021/01/30 06:50

編集2021/01/30 06:55
kiino

総合スコア557

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問