SpringBoot中JPA组件深入查询业务实现

1.JPA通过方法名解析数据可操作方式,其中Stock通过继承JpaRepository接口所指定的泛型决定的。

java 复制代码
package com.test.repo;

import com.test.model.Stock;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Component;
import java.util.List;

/**
 * @Author:     沐槿
 * @Description:  TODO
 * @Date:    2025/12/15 14:38
 * @Version:    1.0
 */
// 用@Component注解放入Spring容器中
@Component
public interface StockRepo extends JpaRepository<Stock, Integer> {
    //JPA将根据方法名自动拼接查询语句
    //JPA根据方法名拼接出如下数据库
    //select * from Stock where name = #name
    public List<Stock> findByName(String name);

2.通过@Query查询数据,实现基于JPQL的方式查询数据。

Repo类

java 复制代码
package com.test.repo;

import com.test.model.Stock;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Component;
import java.util.List;

/**
 * @Author:     沐槿
 * @Description:  TODO
 * @Date:    2025/12/15 14:38
 * @Version:    1.0
 */
// 用@Component注解放入Spring容器中
@Component
public interface StockRepo extends JpaRepository<Stock, Integer> {
    //JPA将根据方法名自动拼接查询语句
    //JPA根据方法名拼接出如下数据库
    //select * from Stock where name = #name
    public List<Stock> findByName(String name);

    //JPA中@Query注解,实现基于JPQL的方式查询数据。
    //JPQL语句等价于SQL (select s from Stock s where s.description like 'desc参数')
    @Query("select s from Stock s where s.description like ?1%")
    public List<Stock> getStockByDesc(String desc);

    //使用nativeQuery参数运行原生数据库
    @Query(value="select s from Stock s where s.description like ?1%",nativeQuery = true)
    public List<Stock> getStockByNativeQuery(String nativeQuery);
}

2.通过@Query查询数据,实现基于JPQL的方式查询数据。

Repo类

java 复制代码
package com.test.repo;

import com.test.model.Stock;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Component;
import java.util.List;

/**
 * @Author:     沐槿
 * @Description:  TODO
 * @Date:    2025/12/15 14:38
 * @Version:    1.0
 */
// 用@Component注解放入Spring容器中
@Component
public interface StockRepo extends JpaRepository<Stock, Integer> {
    //JPA将根据方法名自动拼接查询语句
    //JPA根据方法名拼接出如下数据库
    //select * from Stock where name = #name
    public List<Stock> findByName(String name);

    //JPA中@Query注解,实现基于JPQL的方式查询数据。
    //JPQL语句等价于SQL (select s from Stock s where s.description like 'desc参数')
    @Query("select s from Stock s where s.description like ?1%")
    public List<Stock> getStockByDesc(String desc);

    //使用nativeQuery参数运行原生数据库
    @Query(value="select s from Stock s where s.description like ?1%",nativeQuery = true)
    public List<Stock> getStockByNativeQuery(String nativeQuery);
}

2.通过@Query查询数据,实现基于JPQL的方式查询数据。

Repo类

java 复制代码
package com.test.repo;

import com.test.model.Stock;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Component;
import java.util.List;

/**
 * @Author:     沐槿
 * @Description:  TODO
 * @Date:    2025/12/15 14:38
 * @Version:    1.0
 */
// 用@Component注解放入Spring容器中
@Component
public interface StockRepo extends JpaRepository<Stock, Integer> {
    //JPA将根据方法名自动拼接查询语句
    //JPA根据方法名拼接出如下数据库
    //select * from Stock where name = #name
    public List<Stock> findByName(String name);

    //JPA中@Query注解,实现基于JPQL的方式查询数据。
    //JPQL语句等价于SQL (select s from Stock s where s.description like 'desc参数')
    @Query("select s from Stock s where s.description like ?1%")
    public List<Stock> getStockByDesc(String desc);

    //使用nativeQuery参数运行原生数据库
    @Query(value="select s from Stock s where s.description like ?1%",nativeQuery = true)
    public List<Stock> getStockByNativeQuery(String nativeQuery);
}

业务实现类

java 复制代码
package com.test.service;


import com.test.model.Stock;
import com.test.repo.StockRepo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @Author:     沐槿
 * @Description:  TODO  
 * @Date:    2025/12/15 14:38
 * @Version:    1.0
 */
@Service
public class StockService {
    @Autowired
    StockRepo stockRepo;

    public List<Stock> getStockByNativeQuery(String desc) {
        return stockRepo.getStockByNativeQuery(desc);
    }

    public List<Stock> getStockByDesc(String desc) {
        return stockRepo.getStockByDesc(desc);
    }
}

控制器类

java 复制代码
package com.test.controller;


import com.test.model.Stock;
import com.test.service.StockPageAndSortingService;
import com.test.service.StockService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.jpa.repository.Query;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * @Author:     沐槿
 * @Description:  TODO  
 * @Date:    2025/12/15 14:37
 * @Version:    1.0
 */
@RestController
public class Controller {
    @Autowired
    StockService stockService;

    @RequestMapping("/getStockByDesc/{desc}")
    List<Stock> getStockByDesc(@PathVariable String desc){
        return stockService.getStockByDesc(desc);
    }

    @RequestMapping("/getStockByNativeQuery/{desc}")
    List<Stock> getStockByNativeQuery(@PathVariable String desc){
        return stockService.getStockByNativeQuery(desc);
    }

重启SpringBoot项目,在浏览器中输入地址

http://localhost:8080/getStockByDesc/Good

能看到

javascript 复制代码
[{"id":1,"name":"computer","num":10,"description":"Good"},{"id":2,"name":"Mac","num":8,"description":"Good"}]

在浏览器中输入地址

http://localhost:8080/getStockByNativeQuery/Good

能看到

javascript 复制代码
[{"id":1,"name":"computer","num":10,"description":"Good"},{"id":2,"name":"Mac","num":8,"description":"Good"}]
相关推荐
zhangjw3417 分钟前
1-5 PostgreSQL 数据类型全集:基础类型、字符串、数值、时间类型
数据库·postgresql
IT_陈寒21 分钟前
Java序列化踩坑记:对象循环引用让我加班两小时
前端·人工智能·后端
泡海椒30 分钟前
05-雷达图多维画像-信用评级多维画像
后端
王中阳Go31 分钟前
5.27 分钟干完后端和全部测试:一场三小时笔试的五个失分点,四个不在代码上
大数据·数据库·人工智能·后端·大语言模型
大哥430932 分钟前
Modbus 的"字序":一个配错就变成天文数字,或者干脆变成 0
后端
岩钧36 分钟前
New API 源码解析:一个生产级 AI 网关的架构与实现
后端
学到老活到老42 分钟前
第 24 集:配置文件写了 80,Spring Boot 为什么读到 90?
java·后端·spring
用户3600555790043 分钟前
Kestrel_VLLM - 25 · 全注意力层设备化、整层对拍与访存粒度
后端
yliucherish1 小时前
从零实现一个 SQL 注入检测引擎:报错注入与布尔盲注的误报控制
后端
bigbread1 小时前
状态模式-住院患者状态管理
后端