文章目录
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
- 在IDEA中创建一个Project,选择“Spring Initializr”
- 给Group和Artifact起个名字,并选择好Java版本
- 勾选几个常用的依赖(后面也可以在
pom.xml
文件中增加或修改)
注意:项目新建完成后,如果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
包,并在里面新建一个实体类,实体类与数据库表对应
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
包,并在里面新建一个接口类
接口里定义了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查询语句
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
包,并在里面新建一个服务类,服务类用来实现具体的业务逻辑,此处实现的功能比较简单
里面定义了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
包,并在里面新建一个控制器类,用于定义接口
里面也定义了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/findAll
或127.0.0.1:8080/findAll
getTeam(String name)
方法:localhost:8080/findByName?name=Ferrari
或127.0.0.1:8080/findByName?name=Ferrari
getTeam(@RequestParam String name)
是带参数的请求方式,参数名称为name
,对应数据库表中的team_name
字段,查询时可以替换成任意team_name
字段中的内容
9. 测试
将项目启动后,如果没有报错,控制台输出以下部分,则说明启动成功
在浏览器或Postman中,分别输入Controller
中2个方法的URL进行测试:
正确查询到了数据库中的数据,说明运行成功
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
将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>