簡體   English   中英

如何在spring data jpa的搜索框中搜索多個字段

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM