Compare commits

...

2 commits

Author SHA1 Message Date
Perumal Raj A
e15623d232 Improved the Owner search query
Signed-off-by: Perumal Raj A <perumalraj024@gmail.com>
2025-02-22 05:38:18 +00:00
Perumal Raj A
2ab1cef91f Query Tunned for the Search Functionality
Signed-off-by: Perumal Raj A <perumalraj024@gmail.com>
2025-02-22 05:32:51 +00:00
2 changed files with 6 additions and 9 deletions

View file

@ -98,7 +98,7 @@ class OwnerController {
} }
// find owners by last name // find owners by last name
Page<Owner> ownersResults = findPaginatedForOwnersName(page, owner.getLastName()); Page<Owner> ownersResults = findPaginatedForOwnersLastName(page, owner.getLastName());
if (ownersResults.isEmpty()) { if (ownersResults.isEmpty()) {
// no owners found // no owners found
result.rejectValue("lastName", "notFound", "not found"); result.rejectValue("lastName", "notFound", "not found");
@ -110,9 +110,9 @@ class OwnerController {
owner = ownersResults.iterator().next(); owner = ownersResults.iterator().next();
return "redirect:/owners/" + owner.getId(); return "redirect:/owners/" + owner.getId();
} }
// multiple owners found // multiple owners found
return addPaginationModel(page, model, ownersResults); return addPaginationModel(page, model, ownersResults);
} }
private String addPaginationModel(int page, Model model, Page<Owner> paginated) { private String addPaginationModel(int page, Model model, Page<Owner> paginated) {
@ -124,10 +124,10 @@ class OwnerController {
return "owners/ownersList"; return "owners/ownersList";
} }
private Page<Owner> findPaginatedForOwnersName(int page, String lastname) { private Page<Owner> findPaginatedForOwnersLastName(int page, String lastname) {
int pageSize = 5; int pageSize = 5;
Pageable pageable = PageRequest.of(page - 1, pageSize); Pageable pageable = PageRequest.of(page - 1, pageSize);
return owners.findByNameContaining(lastname, pageable); return owners.findByLastNameStartingWith(lastname, pageable);
} }
@GetMapping("/owners/{ownerId}/edit") @GetMapping("/owners/{ownerId}/edit")

View file

@ -27,8 +27,6 @@ import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param; import org.springframework.data.repository.query.Param;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
/** /**
* Repository class for <code>Owner</code> domain objects All method names are compliant * Repository class for <code>Owner</code> domain objects All method names are compliant
* with Spring Data naming conventions so this interface can easily be extended for Spring * with Spring Data naming conventions so this interface can easily be extended for Spring
@ -58,9 +56,8 @@ public interface OwnerRepository extends JpaRepository<Owner, Integer> {
* found) * found)
*/ */
@Query("SELECT o FROM Owner o " + "WHERE LOWER(o.firstName) LIKE LOWER(CONCAT('%', :namePart, '%')) " @Query("SELECT o FROM Owner o WHERE LOWER(CONCAT(o.firstName, ' ', o.lastName)) LIKE LOWER(CONCAT('%', :namePart, '%'))")
+ "OR LOWER(o.lastName) LIKE LOWER(CONCAT('%', :namePart, '%'))") Page<Owner> findByLastNameStartingWith(@Param("namePart") String namePart, Pageable pageable);
Page<Owner> findByNameContaining(@Param("namePart") String namePart, Pageable pageable);
/** /**
* Retrieve an {@link Owner} from the data store by id. * Retrieve an {@link Owner} from the data store by id.