Wie der Titel schon sagt, habe ich eine Such-App erstellt.
・ Windows 10 (64 Bit) ・ Spring-Boot: 2.2.6 ・ Eclipse: 4.9.0 ・ H2
Wenn Sie ein oder alle Genres, Autoren und Titel eingeben Ziehen Sie den Inhalt am unteren Bildschirmrand.
Entity
BookData.java
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity
public class BookData {
@Id
private long isbn;
private String genre;
private String author;
private String title;
private int stock;
private Boolean status;
public long getIsbn() {
return isbn;
}
public void setIsbn(long isbn) {
this.isbn = isbn;
}
public String getGenre() {
return genre;
}
public void setGenre(String genre) {
this.genre = genre;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public int getStock() {
return stock;
}
public void setStock(int stock) {
this.stock = stock;
}
public Boolean getStatus() {
return status;
}
public void setStatus(Boolean status) {
this.status = status;
}
}
Dao Bereiten Sie eine Dao-Klasse für die Suche nach Genre, Autor und Titel vor.
BookDataDao.java
import java.io.Serializable;
import java.util.List;
public interface BookDataDao extends Serializable {
public List<BookData> search(String genre, String author, String title);
}
Repository Erstellen Sie ein BookDataDaoImpl, das die Dao-Klasse implementiert. Den Inhalt der einzelnen Beschreibungen entnehmen Sie bitte den Kommentaren.
BookDataDaoImpl.java
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
@Repository
public class BookDataDaoImpl implements BookDataDao {
//Bereitstellung der für die Verwendung von Entity erforderlichen Funktionen
@Autowired
private EntityManager entityManager;
public BookDataDaoImpl() {
super();
}
public BookDataDaoImpl(EntityManager manager) {
this();
entityManager = manager;
}
//Überschreiben Sie die von der Dao-Klasse bereitgestellte Suchmethode
@SuppressWarnings("unchecked")
@Override
public List<BookData> search(String genre, String author, String title) {
//Verketten Sie SQL-Anweisungen mit StringBuilder
StringBuilder sql = new StringBuilder();
sql.append("SELECT b From BookData b WHERE ");
boolean genreFlg = false;
boolean authorFlg = false;
boolean titleFlg = false;
boolean andFlg = false;
//An SQL-Variable anhängen, wenn das Genre nicht leer ist
//Setzen Sie das Flag auf true
if(!"".equals(genre)) {
sql.append("b.genre LIKE :genre");
genreFlg = true;
andFlg = true;
}
//an SQL-Variable anhängen, wenn der Autor nicht leer ist
//Setzen Sie das Flag auf true
if(!"".equals(author)) {
if (andFlg) sql.append(" AND ");
sql.append("b.author LIKE :author");
authorFlg = true;
andFlg = true;
}
//An SQL-Variable anhängen, wenn der Titel nicht leer ist
//Setzen Sie das Flag auf true
if(!"".equals(title)) {
if (andFlg) sql.append(" AND ");
sql.append("b.title LIKE :title");
titleFlg = true;
andFlg = true;
}
/*
Die Abfrage hat eine Funktion, die einer Abfrageanweisung zum Abfragen von Daten mit SQL entspricht
Verwenden Sie die createQuery-Methode des entityManager
Übergeben Sie die SQL-Variable als Argument
*/
Query query = entityManager.createQuery(sql.toString());
//Wenn die obige if-Anweisung wahr ist, legen Sie für jede Variable einen Wert fest
//Dieses Mal möchte ich eine mehrdeutige Suche durchführen, daher verwende ich die like-Klausel
if (genreFlg) query.setParameter("genre", "%" + genre + "%");
if (authorFlg) query.setParameter("author", "%" + author + "%");
if (titleFlg) query.setParameter("title", "%" + title + "%");
return query.getResultList();
}
}
BookDataRepository
BookDataRepository.java
import org.springframework.data.jpa.repository.JpaRepository;
public interface BookDataRepository extends JpaRepository<BookData, Long> {
}
Service
BookService.java
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class BookService {
@Autowired
private BookDataRepository bookDataRepository;
@Autowired
private BookDataDaoImpl bookDataDaoImpl;
//Suche alle
public List<BookData> findAll(){
return bookDataRepository.findAll();
}
//Suchen Sie die entsprechende ID
public Optional<BookData> findById(long isbn) {
return bookDataRepository.findById(isbn);
}
//sparen
public BookData save(BookData bookData) {
return bookDataRepository.saveAndFlush(bookData);
}
//Suche
public List<BookData> search(String genre, String author, String title){
List<BookData> result = new ArrayList<BookData>();
//Wenn alle leer sind, suchen Sie alle
if ("".equals(genre) && "".equals(author) && "".equals(title)){
result = bookDataRepository.findAll();
}
else {
//Rufen Sie anders als oben beschrieben die Methode von BookDataDaoImpl auf
result = bookDataDaoImpl.search(genre, author, title);
}
return result;
}
}
Controller
StockController.java
import java.util.List;
import java.util.Optional;
import javax.annotation.PostConstruct;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/book")
public class StockController {
@Autowired
private BookService bookService;
@PersistenceContext
EntityManager entityManager;
//Listenanzeigeverarbeitung
@GetMapping
public String index(Model model,@ModelAttribute("formModel") BookData bookdata) {
model.addAttribute("msg", "Bestandskontrolle");
model.addAttribute("msg2", "Bitte geben Sie die Suchbedingungen ein");
List<BookData> books = bookService.findAll();
model.addAttribute("books", books);
return "index";
}
//Suchergebnis-Empfangsprozess
//@Empfangen Sie formModel vom Formular mit ModelAttribute
//Dieser Typ(BookData)Und Variablen(bookdata)Konkretisieren
@PostMapping
public String select(@ModelAttribute("formModel") BookData bookdata, Model model) {
model.addAttribute("msg", "Suchergebnisse");
//Holen Sie sich jeden Wert mit dem Getter von Buchdaten
List<BookData> result = bookService.search(bookdata.getGenre(),bookdata.getAuthor(), bookdata.getTitle());
model.addAttribute("books", result);
return "index";
}
//Detaillierte Bildschirmverarbeitung
//@Ruft den von der URL empfangenen Wert mit PathVariable ab
@GetMapping("detail/{isbn}")
public String detail(@PathVariable long isbn, Model model) {
model.addAttribute("msg", "Referenzbildschirm");
Optional<BookData> data = bookService.findById(isbn);
//Bei Verwendung von Optional lautet der Wert get()Reinkommen
model.addAttribute("form", data.get());
return "detail";
}
//Initialisierungsprozess
@PostConstruct
public void init() {
BookData d1 = new BookData();
d1.setAuthor("Natsume Soseki");
d1.setTitle("Herz");
d1.setGenre("Literatur");
d1.setIsbn(11111);
d1.setStock(100);
d1.setStatus(false);
bookService.save(d1);
BookData d2 = new BookData();
d2.setAuthor("Jiro Ohno");
d2.setTitle("Einführung in den Frühling");
d2.setGenre("Technologie");
d2.setIsbn(22222);
d2.setStock(1);
d2.setStatus(false);
bookService.save(d2);
BookData d3 = new BookData();
d3.setAuthor("Taro Tanaka");
d3.setTitle("Wie das Netzwerk funktioniert");
d3.setGenre("Technologie");
d3.setIsbn(33333);
d3.setStock(20);
d3.setStatus(false);
bookService.save(d3);
BookData d4 = new BookData();
d4.setAuthor("Yoshikawa Menge");
d4.setTitle("Schlammkugel");
d4.setGenre("Geheimnis");
d4.setIsbn(44444);
d4.setStock(99);
d4.setStatus(false);
bookService.save(d4);
BookData d5 = new BookData();
d5.setAuthor("Natsume Soseki");
d5.setTitle("Graskissen");
d5.setGenre("Literatur");
d5.setIsbn(55555);
d5.setStock(40);
d5.setStatus(false);
bookService.save(d5);
BookData d6 = new BookData();
d6.setAuthor("Testen Sie Toshiro");
d6.setTitle("Fallbuch zum Serienmord");
d6.setGenre("Geheimnis");
d6.setIsbn(66666);
d6.setStock(40);
d6.setStatus(false);
bookService.save(d6);
BookData d7 = new BookData();
d7.setAuthor("Taro Jaba");
d7.setTitle("Erste Schritte mit Java");
d7.setGenre("Technologie");
d7.setIsbn(77777);
d7.setStock(40);
d7.setStatus(false);
bookService.save(d7);
}
}
index.html
index.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Einstiegsbild</title>
<style>
h1 {font-size:18pt; font-weight:bold; color:gray;}
body {font-size:13pt; font-weight:bold; color:gray; margin:5px 25px;}
tr {margin:5px;}
th {padding:5px;color:white; background:darkgray;}
td {padding:5px;color:black; background:#f0f0f0;}
</style>
</head>
<body>
<h1 th:text="${msg}"></h1>
<p th:text="${msg2}"></p>
<!--Der eingegebene Wert ist th:object="${formModel}"Packen Sie ein-->
<!--th:Geben Sie den Anfangswert als Wert ein-->
<form method="post" th:action="@{/book}" th:object="${formModel}">
<label>Genre:</label>
<input type="text" name="genre" th:value="*{genre}"><p>
<label>Autor:</label>
<input type="text" name="author" th:value="*{author}"><p>
<label>Titel:</label>
<input type="text" name="title" th:value="*{title}"><p>
<input type="submit" value="Suche">
</form>
<table>
<tr>
<th>ISBN</th>
<th>Titel</th>
<th>Autorenname</th>
<th>Bestandsmenge</th>
<th>Genre</th>
</tr>
<tr th:each="obj:${books}" th:object="${obj}">
<!--th:Linkeinstellung mit href-->
<td><a th:href="@{/book/detail/{isbn}(isbn=*{isbn})}" th:text="*{isbn}"></a></td>
<td th:text="*{title}"></td>
<td th:text="*{author}"></td>
<td th:text="*{stock}"></td>
<td th:text="*{genre}"></td>
</tr>
</table>
</body>
</html>
Geben Sie "Literatur" in das Genre ein und drücken Sie die Suchtaste. Wenn der Suchergebnisbildschirm angezeigt wird, bleibt der auf der vorherigen Seite eingegebene Wert erhalten und wird auf dem Bildschirm angezeigt. Klicken Sie in den Suchergebnissen auf den Link ISBN, um zum Referenzbildschirm zu gelangen.
Geben Sie "dick" für den Autor ein und drücken Sie die Suchtaste.
Ich habe eine einfache App erstellt. Wir würden uns freuen, wenn Sie uns mitteilen könnten, ob Sie Meinungen wie "Es ist besser, dies zu tun!" Haben.
[Einführung in die Spring Boot 2-Programmierung](https://www.amazon.co.jp/Spring-Boot-2-%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9 % E3% 83% 9F% E3% 83% B3% E3% 82% B0% E5% 85% A5% E9% 96% 80-% E6% 8E% 8C% E7% 94% B0% E6% B4% A5% E8% 80% B6% E4% B9% 83-ebook / dp / B07KF4R1HT / ref = sr_1_3? __ mk_ja_JP =% E3% 82% AB% E3% 82% BF% E3% 82% AB% E3% 83% 8A & dchild = 1 & Schlüsselwörter = Spring + boot & qid = 1590664580 & sr = 8-3)
[Gründliche Einführung in den Frühling](https://www.amazon.co.jp/Spring%E5%BE%B9%E5%BA%95%E5%85%A5%E9%96%80-Spring-Framework%E3% 81% AB% E3% 82% 88% E3% 82% 8BJava% E3% 82% A2% E3% 83% 97% E3% 83% AA% E3% 82% B1% E3% 83% BC% E3% 82% B7% E3% 83% A7% E3% 83% B3% E9% 96% 8B% E7% 99% BA-% E6% A0% AA% E5% BC% 8F% E4% BC% 9A% E7% A4% BENTT % E3% 83% 87% E3% 83% BC% E3% 82% BF-ebook / dp / B01IEWNLBU / ref = sr_1_2? __Mk_ja_JP =% E3% 82% AB% E3% 82% BF% E3% 82% AB% E3% 83% 8A & dchild = 1 & keywords = Spring + boot & qid = 1590664580 & sr = 8-2)