[英]How to search multiple fields in a search box in spring data jpa
我正在使用 spring 數據 jpa 並且正在編寫一個搜索功能。 在我的模型中包括 firstName 和 lastName。 我希望我的搜索對話框對 firstName 和 lastName 進行搜索。 例如,firstName 是 Alen,lastName 是 Lee,如果我在搜索框中輸入的是 Alen 或 Lee,那么 spring 仍然會找到正確的值。 有什么方法可以幫助我在 spring data jpa 中實現這一目標嗎?
員工道
package com.baotrung.springcrudjpafull.dao;
import com.baotrung.springcrudjpafull.model.Employee;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface EmployeeDao extends CrudRepository<Employee,Integer> {
Employee findAllByFirstNameAndLastName(String firstName,String lastName);
}
員工控制器
@RequestMapping(value = "/searchEmployee", method = RequestMethod.GET)
public String getEmployeeByName(@RequestParam("firstName") String firstName, @RequestParam("lastName") String lastName, ModelMap modelMap) {
Employee employee = servicesDao.findAllByFirstNameAndLastName(firstName,lastName);
modelMap.addAttribute("employees", employee);
return "Employee";
}
但是在jsp中我不知道如何傳遞參數才能調用它。 如果使用,則只使用一個參數。那么如何在 spring 的搜索框中找到多個字段。請幫助
看看這個:
在回購中:
@Repository
public interface EmployeeDao extends JpaRepository<Employee, Integer> {
@Query("select e from Employee e where lower(e.firstName) like lower(concat('%', :search, '%')) " +
"or lower(e.lastName) like lower(concat('%', :search, '%'))")
List<Employee> findByFirstNameOrLastName(@Param("search") String search);
}
在控制器中:
@RequestMapping("/searchEmployee", method = RequestMethod.GET)
public String getEmployeeByName(@RequestParam(name = "search") String search, Model model) {
Employee employee = servicesDao.findAllByFirstNameAndLastName(search);
model.addAttribute("employees", employee);
return "Employee";
}
在 jsp 中應該和我在 thymeleaf 中所做的相似:
<form action="#" th:action="@{search}" method="get" class="input-group">
<input class="form-control form-control-dark" type="text" placeholder="Search" name="search" aria-label="Search">
<div class="input-group-append">
<button class="btn btn-outline-light" value="Search">Search</button>
</div>
</form>
試試這個
findAllByFirstNameLikeOrLastNameLike
或者
findAllByFirstNameContainingOrLastNameContaining
第一個會產生一個like
比較的請求,第二個會把參數包裝成 %%
如果你想使用 GET 方法,參數應該是 @PathVaraible 而不是 @RequestParam 並且你必須用/searchEmployee/Alen/Lee
調用方法
控制器應該是;
@RequestMapping(value = "/searchEmployee/{firstname}/{lastname}", method = RequestMethod.GET)
public String getEmployeeByName(@PathVariable("firstName") String firstName, @PathVariable("lastName") String lastName, ModelMap modelMap) {
List<Employee> employee = servicesDao.findAllByFirstNameAndLastName(firstName,lastName);
modelMap.addAttribute("employees", employee);
return "employee";
}
如果你想讓用戶可以輸入搜索值,你需要在jsp中創建一個html表單並提交你的表單/searchEmployee
uri和控制器應該是
@RequestMapping(value = "/searchEmployee", method = RequestMethod.POST)
public String getEmployeeByName(@RequestParam("firstName") String firstName, @RequestParam("lastName") String lastName, ModelMap modelMap) {
List<Employee> employee = servicesDao.findAllByFirstNameAndLastName(firstName,lastName);
modelMap.addAttribute("employees", employee);
return "employee";
}
並且您的控制器方法應該返回不帶后綴的 jsp 文件名。 例如。 如果你的jsp文件名為employee.jsp
,方法應該是return "employee";
我認為存儲庫應該是這樣的;
@Repository
public interface EmployeeDao extends CrudRepository<Employee,Integer> {
List<Employee> findAllByFirstNameAndLastName(String firstName,String lastName);
}
但這取決於您的 Employee 數據模型。 我的意思是如果名字和姓氏都有唯一的約束,你也可以只返回 Employee 對象
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.