You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Spring Boot的JPA Repository中编写自定义SQL查询?

按姓名查询用户的自定义查询实现方案

在Spring Boot结合JPA的场景下,实现按姓名查询用户的自定义查询,有两种常用的落地方式,具体实现如下:

方式一:JPA自动推导的命名查询

JPA支持根据方法名自动生成SQL语句,无需手动编写查询逻辑,只需在你的CommentRepository中添加对应方法即可:

public interface CommentRepository extends JpaRepository<User, Long> {
    // 精确匹配姓名(对应实体类的name属性,映射数据库first_name字段)
    List<User> findByName(String name);
    
    // 模糊匹配姓名(包含指定关键词)
    List<User> findByNameContaining(String name);
}

接着在控制器中新增对应的接口,接收姓名参数并调用查询方法:

@RestController
@RequestMapping(path="/api/v1/users")
public class CommentController {
    
    @Autowired
    CommentRepository repository ;
    
    @GetMapping(path="/list")
    public List<User> users() {
        return repository.findAll();
    }  

    // 新增:按姓名精确查询
    @GetMapping("/by-name")
    public List<User> getUsersByName(@RequestParam String name) {
        return repository.findByName(name);
    }

    // 可选:按姓名模糊查询
    @GetMapping("/by-name-like")
    public List<User> getUsersByNameLike(@RequestParam String keyword) {
        return repository.findByNameContaining(keyword);
    }
}

方式二:自定义JPQL/原生SQL查询

如果需要更灵活的查询逻辑,可以使用@Query注解手动编写查询语句:

基于JPQL的查询(面向实体类)

public interface CommentRepository extends JpaRepository<User, Long> {
    @Query("SELECT u FROM User u WHERE u.name = :userName")
    List<User> findByUserName(@Param("userName") String name);
}

基于原生SQL的查询(直接操作数据库表)

public interface CommentRepository extends JpaRepository<User, Long> {
    @Query(value = "SELECT * FROM users WHERE first_name = :userName", nativeQuery = true)
    List<User> findByUserNameNative(@Param("userName") String name);
}

对应的控制器接口写法和方式一一致,只需调用对应的repository方法即可。


内容的提问来源于stack exchange,提问作者Kirion

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 14:05:39