Spring Boot + MyBatis 实现数据查询接口

该教程介绍了如何使用SpringInitializr创建项目,配置PostgreSQL数据库,定义实体类,创建Mapper接口和XML查询文件,Service服务类以及Controller来实现数据查询功能。文章还提到了MyBatis版本兼容性问题和解决方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 准备数据库表

在PostgreSQL数据库中创建一张名为t_team的表,并填写数据

iddateteam_namepoints
12023-07-12 10:00:01.63Ferrari100
22023-07-12 10:00:01.63Mercedes-Benz99.5
32023-07-12 10:00:01.63Porsche98
42023-07-12 10:00:01.63Audi97.55
5023-07-12 10:00:01.63Bugatti95

2. 创建Project

  1. 在IDEA中创建一个Project,选择“Spring Initializr”

image.png

  1. 给Group和Artifact起个名字,并选择好Java版本

image.png

  1. 勾选几个常用的依赖(后面也可以在pom.xml文件中增加或修改)

image.png
注意:项目新建完成后,如果pom.xml文件中有报错,可以调整一下依赖的版本

3. 配置文件

src/main/resources路径下,自动生成了application.properties配置文件,一般将它改成yaml文件格式,并进行配置

# 访问的端口号
server:
  port: 8080

spring:
  # PostgreSQL数据库配置
  datasource:
    driver-class-name: org.postgresql.Driver
    url: jdbc:postgresql://192.168.71.27:9432/SIOM
    username: postgres
    password: 123456

# Mybatis配置
mybatis:
  # mapper配置文件
  mapper-locations: classpath:mapper/*.xml

4. 实体类(Entity)

在包目录下,新建一个entity包,并在里面新建一个实体类,实体类与数据库表对应
image.png
Team类中的属性要与PostgreSQL数据库表中的字段一致
使用了@Data注解

package com.example.datainterfacev2.entity;

import lombok.Data;
import java.util.Date;

@Data
public class Team {
    private Integer id;
    private Date date;
    private String teamName;
    private Double points;
}

5. 查询接口类(Mapper)

在包目录下,新建一个mapper包,并在里面新建一个接口类
image.png
接口里定义了2个方法,findByName(String name)findAll()

package com.example.datainterfacev2.mapper;

import com.example.datainterfacev2.entity.Team;
import java.util.List;

public interface TeamMapper {
    Team findByName(String name);
    List<Team> findAll();
}

6. 查询语句(mapper.xml)

resources路径下,新建一个mapper包,并在里面新建一个xml文件,用来写SQL查询语句
image.png

  • namespace要与查询接口类(TeamMapper)的包路径和类名对应
  • select语句中,id要和TeamMapper接口中的方法名对应
  • select语句中,parameterType要和TeamMapper接口中的方法的参数类型对应
  • select语句中,resultType要和TeamMapper接口中的方法的返回值类型对应
  • 通过#{}引用TeamMapper接口中方法的参数
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.datainterfacev2.mapper.TeamMapper">
  <select id="findByName" parameterType="String" resultType="com.example.datainterfacev2.entity.Team">
    select * from t_team where team_name=#{team_name}
  </select>
  <select id="findAll" resultType="com.example.datainterfacev2.entity.Team">
    select * from t_team
  </select>
</mapper>

7. 服务类(Service)

在包目录下,新建一个service包,并在里面新建一个服务类,服务类用来实现具体的业务逻辑,此处实现的功能比较简单
image.png
里面定义了2种查询方法,findByName(String name)findAll()

package com.example.datainterfacev2.service;

import com.example.datainterfacev2.entity.Team;
import com.example.datainterfacev2.mapper.TeamMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;

@Service
public class TeamService {
    @Autowired
    private TeamMapper teamMapper;

    public Team findByName(String name) {
        return teamMapper.findByName(name);
    }

    public List<Team> findAll() {
        return teamMapper.findAll();
    }
}

8. 控制器类(Controller)

在包目录下,新建一个controller包,并在里面新建一个控制器类,用于定义接口
image.png
里面也定义了2个方法,getTeam(String name)getAllTeams()

package com.example.datainterfacev2.controller;

import com.example.datainterfacev2.entity.Team;
import com.example.datainterfacev2.service.TeamService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;

@RestController
public class TeamController {

    @Autowired
    private TeamService teamService;

    @RequestMapping("/findAll")
    public List<Team> getAllTeams() {
        return teamService.findAll();
    }

    @RequestMapping("/findByName")
    public Team getTeam(@RequestParam String name) {
        return teamService.findByName(name);
    }
}

本地运行时,IP地址默认为localhost,也就是127.0.0.1;配置文件中设置了访问的端口号为8080
因此,以上2个查询方法的完整URL分别为:

  • getAllTeams()方法:localhost:8080/findAll127.0.0.1:8080/findAll
  • getTeam(String name)方法:localhost:8080/findByName?name=Ferrari127.0.0.1:8080/findByName?name=Ferrari

getTeam(@RequestParam String name)是带参数的请求方式,参数名称为name,对应数据库表中的team_name字段,查询时可以替换成任意team_name字段中的内容

9. 测试

将项目启动后,如果没有报错,控制台输出以下部分,则说明启动成功
image.png
在浏览器或Postman中,分别输入Controller中2个方法的URL进行测试:
image.png
image.png
正确查询到了数据库中的数据,说明运行成功

10. 注意

pom.xml文件中,MyBatis的版本不要太高,否则启动时会报错:
Caused by: java.lang.UnsupportedClassVersionError: org/mybatis/spring/boot/autoconfigure/MybatisDependsOnDatabaseInitializationDetector has been compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime only recognizes class file versions up to 52.0
image.png
将MyBatis的依赖版本从3.0.2降到2.2.2就可以了

<dependency>
  <groupId>org.mybatis.spring.boot</groupId>
  <artifactId>mybatis-spring-boot-starter</artifactId>
  <version>2.2.2</version>
</dependency>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值