1. 准备数据库表

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

id date team_name points
1 2023-07-12 10:00:01.63 Ferrari 100
2 2023-07-12 10:00:01.63 Mercedes-Benz 99.5
3 2023-07-12 10:00:01.63 Porsche 98
4 2023-07-12 10:00:01.63 Audi 97.55
5 023-07-12 10:00:01.63 Bugatti 95

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>
Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐