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

Spring Boot中JPA查询无返回结果问题求助

嘿,我帮你把这个基于H2数据库和JPA的Spring Boot Todo服务的控制器代码补全并整理好啦,顺便补充一些关键的配套内容,让你的小应用能正常跑起来~

完整的控制器代码
package me.abhishek.springboot.microservice.example.todo.springbootmicroservicetodoservice;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Optional;

@RestController
public class TodoController {

    // 注入JPA仓库接口,实现数据操作
    @Autowired
    private TodoRepository todoRepository;

    // 接口:获取所有Todo项
    @GetMapping("/todos")
    public List<Todo> getAllTodos() {
        return todoRepository.findAll();
    }

    // 接口:根据ID获取单个Todo项
    @GetMapping("/todos/{id}")
    public Optional<Todo> getTodoById(@PathVariable Long id) {
        return todoRepository.findById(id);
    }
}
配套关键组件示例

1. JPA实体类(Todo.java)

这是映射H2数据库表的核心实体:

package me.abhishek.springboot.microservice.example.todo.springbootmicroservicetodoservice;

import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;

@Entity
public class Todo {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String title;
    private boolean completed;

    // JPA要求必须有无参构造器
    public Todo() {}

    // 带参构造器,用于快速创建实例
    public Todo(String title, boolean completed) {
        this.title = title;
        this.completed = completed;
    }

    // 省略getter/setter,你可以手动生成或用Lombok的@Data注解简化
    public Long getId() { return id; }
    public void setId(Long id) { this.id = id; }
    public String getTitle() { return title; }
    public void setTitle(String title) { this.title = title; }
    public boolean isCompleted() { return completed; }
    public void setCompleted(boolean completed) { this.completed = completed; }
}

2. JPA仓库接口(TodoRepository.java)

继承JpaRepository就能自动获得CRUD操作能力,无需手动实现:

package me.abhishek.springboot.microservice.example.todo.springbootmicroservicetodoservice;

import org.springframework.data.jpa.repository.JpaRepository;

// 泛型参数:实体类类型、主键类型
public interface TodoRepository extends JpaRepository<Todo, Long> {
}

3. 配置文件(application.properties)

配置H2数据库和控制台访问:

# H2内存数据库配置
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=

# 开启H2控制台,启动后可通过http://localhost:8080/h2-console访问
spring.h2.console.enabled=true
spring.h2.console.path=/h2-console

# JPA自动建表+显示SQL
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.H2Dialect
关键注意点
  • 确保项目依赖中已经引入Spring Web、Spring Data JPA、H2 Database三个核心组件(Maven/Gradle都可以直接在初始化Spring Boot项目时勾选)
  • 启动应用后,访问http://localhost:8080/todos就能看到返回的Todo列表(初始为空,可通过H2控制台手动插入测试数据)
  • @RestController注解会自动将返回的Java对象序列化为JSON格式,无需额外配置

内容的提问来源于stack exchange,提问作者P.K.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:53:20