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

SpringBoot连接MySQL查询返回空对象问题排查求助

问题排查:SpringBoot查询MySQL返回空对象([{},{},{},{}])

问题描述

我是Java新手,正在尝试使用SpringBoot连接MySQL数据库,但查询数据库表返回的数据为空对象。控制台输出显示查询到4条数据,页面返回[{},{},{},{}],无报错信息,且数据库中确实存在数据。

相关代码

application.yaml

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/library?serverTimezone=GMT%2B8&characterEncoding=utf-8
    username: root
    password: 1234
    driver-class-name: com.mysql.cj.jdbc.Driver
  jpa:
    show-sql: true
    properties:
      hibernate:
        ddl-auto: update
        naming:
          physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
        format_sql: true
server:
  port: 8181

Book.java

package com.example.demo.model;

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
@Entity
@Table(name = "book")
public class Book {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="isbn")
    private String ISBN;
    
    @Column(name="name")
    private String Name;
    
    @Column(name="author")
    private String Author;
    
    @Column(name="introduction")
    private String Introduction;
}

BookRepository.java

package com.example.demo.dao;

import org.springframework.data.repository.CrudRepository;
import com.example.demo.model.Book;

public interface BookRepository extends CrudRepository<Book, Integer> {

}

BookController.java

package com.example.demo.controller;

import java.util.List;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

import com.example.demo.model.Book;
import com.example.demo.dao.BookRepository;

import jakarta.annotation.Resource;

@RestController
public class BookController {
    @GetMapping("/test")
    public String test() {
        System.out.println("ok");
        return "TEST";
    }
    
    @Resource
    private BookRepository bookrepository;
    
    @RequestMapping(value = "/allbook", method = RequestMethod.GET)
    public List<Book> getAll() {
        
        List<Book> books = (List<Book>) bookrepository.findAll();
        System.out.println("data size : "+books.size());
        
        return (List<Book>) bookrepository.findAll();
    }
}

现象

  • 页面访问http://localhost:8181/allbook返回:[{},{},{},{}]
  • Eclipse控制台输出:
data size : 4
Hibernate: 
    select
        b1_0.isbn,
        b1_0.author,
        b1_0.introduction,
        b1_0.name 
    from
        book b1_0

问题原因及解决方案

1. 实体类属性命名违反JavaBean规范(核心问题)

Spring默认使用Jackson进行JSON序列化,Jackson严格遵循JavaBean规范:属性名需以小写字母开头(小驼峰格式),对应的getter/setter方法命名应为getXxx()/setXxx()。

你的Book类属性用了大写开头(ISBN、Name等),Lombok生成的getter是getISBN()、getName(),Jackson无法将这些方法映射到属性,导致序列化后输出空对象。

修复方法:
修改Book类属性为小驼峰命名,保持@Column注解映射数据库字段不变:

@Getter
@Setter
@Entity
@Table(name = "book")
public class Book {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="isbn")
    private String isbn;
    
    @Column(name="name")
    private String name;
    
    @Column(name="author")
    private String author;
    
    @Column(name="introduction")
    private String introduction;
}

2. Repository泛型主键类型不匹配

你的主键isbn是String类型,但BookRepository泛型写的是CrudRepository<Book, Integer>,类型不匹配会导致潜在问题,需修正:

public interface BookRepository extends CrudRepository<Book, String> {
}

3. 可选优化:避免重复查询

原Controller中重复调用bookrepository.findAll(),可以直接复用已查询的列表,减少数据库访问:

@RequestMapping(value = "/allbook", method = RequestMethod.GET)
public List<Book> getAll() {
    List<Book> books = (List<Book>) bookrepository.findAll();
    System.out.println("data size : "+books.size());
    return books;
}

验证

修改完成后重启项目,再次访问http://localhost:8181/allbook,即可看到包含真实数据的JSON响应。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 14:57:53