Commit 53a1f2b2 by Patryk Czarnik

Dalsze wersje wyszukiwarki i więcej metod z magicznymi nazwami

parent 5298d2fd
package sklep.controller; package sklep.controller;
import java.math.BigDecimal;
import java.util.List; import java.util.List;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
...@@ -16,11 +17,33 @@ public class Wyszukiwarka { ...@@ -16,11 +17,33 @@ public class Wyszukiwarka {
private ProductRepository productRepository; private ProductRepository productRepository;
@GetMapping("/wyszukiwarka") @GetMapping("/wyszukiwarka")
public String readAllProducts(Model model, String name) { public String wyszukiwarka(Model model,
List<Product> products = productRepository.findByProductName(name); String name,
BigDecimal min,
BigDecimal max) {
List<Product> products = List.of();
if(name != null && !name.isEmpty() && min == null && max == null) {
products = productRepository.findByProductNameContainingIgnoringCase(name);
} else if((name == null || name.isEmpty()) && (min != null || max != null)) {
if(min == null) {
min = BigDecimal.ZERO;
}
if(max == null) {
max = BigDecimal.valueOf(1000_000_000);
}
products = productRepository.findByPriceBetween(min, max);
} else if(name != null && !name.isEmpty() && (min != null || max != null)) {
if(min == null) {
min = BigDecimal.ZERO;
}
if(max == null) {
max = BigDecimal.valueOf(1000_000_000);
}
products = productRepository.findByProductNameContainingIgnoringCaseAndPriceBetween(name, min, max);
}
model.addAttribute("products", products); model.addAttribute("products", products);
return "wyszukiwarka"; return "wyszukiwarka";
} }
} }
package sklep.repository; package sklep.repository;
import java.math.BigDecimal;
import java.util.List; import java.util.List;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
...@@ -11,6 +12,11 @@ import sklep.model.Product; ...@@ -11,6 +12,11 @@ import sklep.model.Product;
* i oznaczymy go adnotacją @Repository (albo skonfigurujemy w inny sposób...), * i oznaczymy go adnotacją @Repository (albo skonfigurujemy w inny sposób...),
* to Spring AUTOMATYCZNIE UTWORZY IMPLEMENTACJĘ tego interfejsu. * to Spring AUTOMATYCZNIE UTWORZY IMPLEMENTACJĘ tego interfejsu.
* Dzięki temu "za darmo" mamy metody dający podstawowy dostęp do tabel. * Dzięki temu "za darmo" mamy metody dający podstawowy dostęp do tabel.
* Dodatkowo w interfejsie można dopisać własne metody, w których nazwie kryje się zasada działania.
* Np. findByPriceBetween szuka produktów o cenie między min i max.
*
* findByEmail - szuka rekordów z polem email równym parametrowi.
*/ */
@Repository @Repository
...@@ -18,4 +24,12 @@ public interface ProductRepository extends JpaRepository<Product, Integer> { ...@@ -18,4 +24,12 @@ public interface ProductRepository extends JpaRepository<Product, Integer> {
List<Product> findByProductName(String name); List<Product> findByProductName(String name);
List<Product> findByProductNameContains(String name);
List<Product> findByProductNameContainingIgnoringCase(String name);
List<Product> findByPriceBetween(BigDecimal min, BigDecimal max);
List<Product> findByProductNameContainingIgnoringCaseAndPriceBetween(String name, BigDecimal min, BigDecimal max);
} }
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
<html> <html>
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<title>Wyszukiwarka towarów</title> <title>Katalog towarów</title>
<link rel="stylesheet" type="text/css" href="/styl.css"/> <link rel="stylesheet" type="text/css" href="/styl.css"/>
</head> </head>
<body> <body>
...@@ -13,8 +13,12 @@ ...@@ -13,8 +13,12 @@
<form method="get" class="wyszukiwarka"> <form method="get" class="wyszukiwarka">
<table> <table>
<tr><td><label for="name">Podaj nazwę:</label></td> <tr><td><label for="name">Podaj fragment nazwy:</label></td>
<td><input type="text" name="name" value="${param.name}"></td></tr> <td><input type="text" name="name" value="${param.name}"></td></tr>
<tr><td><label for="min">Cena minimalna:</label></td>
<td><input type="number" name="min" value="${param.min}"></td></tr>
<tr><td><label for="max">Cena maksymalna:</label></td>
<td><input type="number" name="max" value="${param.max}"></td></tr>
<tr><td><button>Szukaj</button></td></tr> <tr><td><button>Szukaj</button></td></tr>
</table> </table>
</form> </form>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment