Comme le titre l'indique, j'ai créé une application de recherche.
・ Windows10 (64 bits) ・ Démarrage à ressort: 2.2.6 ・ Éclipse: 4.9.0 ・ H2
Lorsque vous entrez tout ou partie du genre, auteur, titre Tirez le contenu au bas de l'écran.
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 Préparez une classe Dao pour rechercher par genre, auteur et titre.
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 Créez un BookDataDaoImpl qui implémente la classe Dao. Veuillez vous référer aux commentaires pour le contenu de chaque description.
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 {
//Fournir les fonctions requises pour utiliser Entity
@Autowired
private EntityManager entityManager;
public BookDataDaoImpl() {
super();
}
public BookDataDaoImpl(EntityManager manager) {
this();
entityManager = manager;
}
//Remplacer la méthode de recherche fournie par la classe Dao
@SuppressWarnings("unchecked")
@Override
public List<BookData> search(String genre, String author, String title) {
//Concaténer les instructions SQL avec 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;
//Ajouter à la variable SQL si le genre n'est pas vide
//Définissez l'indicateur sur true
if(!"".equals(genre)) {
sql.append("b.genre LIKE :genre");
genreFlg = true;
andFlg = true;
}
//ajouter à la variable sql si l'auteur n'était pas vide
//Définissez l'indicateur sur true
if(!"".equals(author)) {
if (andFlg) sql.append(" AND ");
sql.append("b.author LIKE :author");
authorFlg = true;
andFlg = true;
}
//Ajouter à la variable SQL si le titre n'est pas vide
//Définissez l'indicateur sur true
if(!"".equals(title)) {
if (andFlg) sql.append(" AND ");
sql.append("b.title LIKE :title");
titleFlg = true;
andFlg = true;
}
/*
La requête a une fonction équivalente à une instruction de requête pour interroger des données avec SQL
Utilisez la méthode createQuery de entityManager
Passer la variable SQL en argument
*/
Query query = entityManager.createQuery(sql.toString());
//Si l'instruction if ci-dessus est vraie, définissez une valeur pour chaque variable
//Cette fois, je souhaite effectuer une recherche ambiguë, j'utilise donc la clause like
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;
//Rechercher tout
public List<BookData> findAll(){
return bookDataRepository.findAll();
}
//Trouvez l'ID correspondant
public Optional<BookData> findById(long isbn) {
return bookDataRepository.findById(isbn);
}
//sauvegarder
public BookData save(BookData bookData) {
return bookDataRepository.saveAndFlush(bookData);
}
//Chercher
public List<BookData> search(String genre, String author, String title){
List<BookData> result = new ArrayList<BookData>();
//Si tout est vide, recherchez tout
if ("".equals(genre) && "".equals(author) && "".equals(title)){
result = bookDataRepository.findAll();
}
else {
//Autre que ce qui précède, appelez la méthode de BookDataDaoImpl
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;
//Traitement d'affichage de liste
@GetMapping
public String index(Model model,@ModelAttribute("formModel") BookData bookdata) {
model.addAttribute("msg", "Contrôle de l'inventaire");
model.addAttribute("msg2", "Veuillez saisir les conditions de recherche");
List<BookData> books = bookService.findAll();
model.addAttribute("books", books);
return "index";
}
//Processus de réception des résultats de recherche
//@Recevoir formModel depuis form avec ModelAttribute
//Ce type(BookData)Et variables(bookdata)Spécifier
@PostMapping
public String select(@ModelAttribute("formModel") BookData bookdata, Model model) {
model.addAttribute("msg", "Résultats de recherche");
//Obtenez chaque valeur avec le getter de bookdata
List<BookData> result = bookService.search(bookdata.getGenre(),bookdata.getAuthor(), bookdata.getTitle());
model.addAttribute("books", result);
return "index";
}
//Traitement d'écran détaillé
//@Obtenez la valeur reçue de l'URL avec PathVariable
@GetMapping("detail/{isbn}")
public String detail(@PathVariable long isbn, Model model) {
model.addAttribute("msg", "Écran de référence");
Optional<BookData> data = bookService.findById(isbn);
//Lorsque vous utilisez Facultatif, la valeur est get()Entrer
model.addAttribute("form", data.get());
return "detail";
}
//Processus d'initialisation
@PostConstruct
public void init() {
BookData d1 = new BookData();
d1.setAuthor("Natsume Soseki");
d1.setTitle("Cœur");
d1.setGenre("Littérature");
d1.setIsbn(11111);
d1.setStock(100);
d1.setStatus(false);
bookService.save(d1);
BookData d2 = new BookData();
d2.setAuthor("Jiro Ohno");
d2.setTitle("Introduction au printemps");
d2.setGenre("La technologie");
d2.setIsbn(22222);
d2.setStock(1);
d2.setStatus(false);
bookService.save(d2);
BookData d3 = new BookData();
d3.setAuthor("Taro Tanaka");
d3.setTitle("Comment fonctionne le réseau");
d3.setGenre("La technologie");
d3.setIsbn(33333);
d3.setStock(20);
d3.setStatus(false);
bookService.save(d3);
BookData d4 = new BookData();
d4.setAuthor("Montant Yoshikawa");
d4.setTitle("Balle de boue");
d4.setGenre("Mystère");
d4.setIsbn(44444);
d4.setStock(99);
d4.setStatus(false);
bookService.save(d4);
BookData d5 = new BookData();
d5.setAuthor("Natsume Soseki");
d5.setTitle("Oreiller d'herbe");
d5.setGenre("Littérature");
d5.setIsbn(55555);
d5.setStock(40);
d5.setStatus(false);
bookService.save(d5);
BookData d6 = new BookData();
d6.setAuthor("Testez Toshiro");
d6.setTitle("Livre de cas de meurtre en série");
d6.setGenre("Mystère");
d6.setIsbn(66666);
d6.setStock(40);
d6.setStatus(false);
bookService.save(d6);
BookData d7 = new BookData();
d7.setAuthor("Taro Jaba");
d7.setTitle("Premiers pas avec Java");
d7.setGenre("La 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>écran initial</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>
<!--La valeur saisie est e:object="${formModel}"Emballer dans-->
<!--th:Faire entrer la valeur initiale en valeur-->
<form method="post" th:action="@{/book}" th:object="${formModel}">
<label>Genre:</label>
<input type="text" name="genre" th:value="*{genre}"><p>
<label>Auteur:</label>
<input type="text" name="author" th:value="*{author}"><p>
<label>Titre:</label>
<input type="text" name="title" th:value="*{title}"><p>
<input type="submit" value="Chercher">
</form>
<table>
<tr>
<th>ISBN</th>
<th>Titre</th>
<th>Nom de l'auteur</th>
<th>Quantité en stock</th>
<th>Genre</th>
</tr>
<tr th:each="obj:${books}" th:object="${obj}">
<!--th:Lier la configuration avec 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>
Entrez «littérature» dans le genre et appuyez sur le bouton de recherche. Lorsque l'écran des résultats de la recherche s'affiche, la valeur saisie à la page précédente est conservée et affichée à l'écran. Cliquez sur le lien ISBN dans les résultats de la recherche pour accéder à l'écran de référence.
Entrez "épais" pour l'auteur et appuyez sur le bouton de recherche.
J'ai créé une application simple. Nous vous serions reconnaissants si vous pouviez nous faire savoir si vous avez des opinions telles que "Il vaut mieux faire cela!"
[Introduction à la programmation Spring Boot 2](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 & mots-clés = Ressort + botte & qid = 1590664580 & sr = 8-3)
[Présentation détaillée de Spring](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)
Recommended Posts