Springboot3整合MyBatis操作数据库(小白版)
前情提要:搭建Springboot框架请观看之前的文章
一、安装软件
MySQL5.7或8.x、Navicat(数据库可视化工具)
前置知识:Mysq|的基础语法
二、操作数据库code2025
1.创建数据库
打开navicat软件,点击连接,点击mysql

配置字符集和编码 :


注意:所有表的主键名称叫id,都是自动递增且唯一的,删除一个后不会自动增添。
得到:

2.新建管理员表: admin
点击“添加字段”,填写初始表信息,每次修改时一定要“ctrl + s”保存

继续增添字段内容,并保存表格内容

由此管理员admin表的结构为:
CREATE TABLE `admin` (
`id` int NOT NULL AUTO_INCREMENT COMMENT 'ID',
`username` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '账号',
`password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '密码',
`name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '名称',
`phone` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '手机',
`email` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '邮箱',
PRIMARY KEY (`id`,`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='管理员信息';
演示第二种新建表格方法:
首先复制 表结构内容,再删除表,操作如下:


将表结构复制粘贴,并点击“运行”,运行成功后得到“admin”表




测试查询操作

三、SpringBoot 集成 Mybatis
首先进入mybatis官网:MyBatis 3 | 简介 – mybatis
1.在 pom.xml里面添加Mysql依赖和 MyBatis 依赖
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starterc/artifactId>
<version>3.0.3</version>
</dependency>

classpath:表示resources的目录
设置application.yml里面的配置,以及创建mapper文件
改成你自己数据库的名称即可
#数据库配置
spring:
datasource:
driver-class-name:com.mysql.cj.jdbc.Driver
username:root
password:123456
url:jdbc:mysql://localhost:3306/code2025?useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true&useSSL=false&serTimezone=GMT%2b8&allowPublicKeyRetrieval=true
#Mybatis实体和xml映射
pybatis:
##映射xml
mapper-locations:classpath:mapper/*.xml
configuration:
# 配置日志
log-impl:org.apache.ibatis.logging.stdout.StdoutImpl
map-underscore-to-camel-case:true

2.创建实体类Admin
package com.example.entity;
/**
* @Author mieMie
* @Version 1.0
*/
public class Admin {
private int id;
private String username;
private String password;
private String phone;
private String email;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
3.新建mapper文件夹,并在内部新建AdminMapper接口
4.Mapper 接口和 Mapper.xml 的关系
Mapper定义接口的方法
Mapper.xml 里面去实现方法 (SQL 语句实现)
5.下载mybatisX 插件路径:
6.连接数据库写一个查询接口
package com.example.controller;
import com.example.entity.Admin;
import com.example.service.AdminService;
import com.example.common.Result; // 确保导入正确的 Result 类
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* @author mieMie
* @version 1.0
*/
@RestController
@RequestMapping("/admin")
public class AdminController {
@Resource
AdminService adminService;
@GetMapping("/selectAll") // 完整的请求路径:http://localhost:9999/admin/selectAll
public Result selectAll() {
List<Admin> adminList = adminService.selectAll();
return Result.success(adminList); // 返回处理后的 List<Admin> 数据
}
}
AdminService
package com.example.service;
import com.example.entity.Admin;
import com.example.exception.CustomerException;
import com.example.mapper.AdminMapper;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @Author mieMie
* @Version 1.0
*/
@Service // 添加此注解
public class AdminService {
@Resource
AdminMapper adminMapper;
public String admin(String name) {
if ("admin".equals(name)){
return "admin";
} else {
throw new CustomerException("账号错误");
}
}
public List<Admin> selectAll() {
return adminMapper.selectAll();
}
}
AdminMapper
package com.example.mapper;
import com.example.entity.Admin;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import java.util.List;
public interface AdminMapper {
List<Admin> selectAll();
}
AdminMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mapper.AdminMapper">
<select id="selectAll" resultType="com.example.entity.Admin">
select * from admin order by id desc
</select>
</mapper>
最后测试的内容结果:

没有显示数据库admin内容
看到这里是不是觉得失败了,不过不要气馁,寻找一下原因。
四、错误分析
1.抓住错误点:前端or后端or数据库

启动项目 由图可以得到数据库、项目启动没问题,那么猜测一下是不是各个部分的连接关系,比如前后端url路径、注解错误、字段不符合等等。
2.细化错误点:跨域问题
新建
filter包:在com.example下创建filter子包。创建过滤器类:在
filter包下创建CorsFilter.java。配置自动扫描:确保过滤器类位于 Spring Boot 启动类的包路径或其子包中。
package com.example.filter;
import jakarta.servlet.*;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Component;
import java.io.IOException;
@Component
public class CorsFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException {
try {
HttpServletResponse httpResponse = (HttpServletResponse) response;
httpResponse.setHeader("Access-Control-Allow-Origin", "*");
httpResponse.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE");
httpResponse.setHeader("Access-Control-Allow-Headers", "*");
httpResponse.setHeader("Access-Control-Allow-Credentials", "true");
chain.doFilter(request, response);
} catch (ServletException e) {
// 处理 ServletException 异常
e.printStackTrace();
}
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {}
@Override
public void destroy() {}
}

3.细化错误点:排查错误内容
一个个查看是否有错误点,通过终端以及idea提示发现admincontroller.java内容有问题,里面的查询内容类型报错,于是改正,连带着其他配置文件改正比如result文件,内容如下:
AdminController文件
package com.example.controller;
import com.example.entity.Admin;
import com.example.service.AdminService;
import com.example.common.Result; // 确保导入泛型化的 Result 类
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
@RequestMapping("/admin")
public class AdminController {
@Resource
private AdminService adminService;
@GetMapping("/selectAll")
public Result<List<Admin>> selectAll() { // 明确返回泛型类型 Result<List<Admin>>
List<Admin> adminList = adminService.selectAll();
if (adminList == null || adminList.isEmpty()) { // 添加空值检查
// 显式指定泛型类型 <List<Admin>>
return Result.<List<Admin>>error(500, "查询失败");
}
System.out.println("adminList = " + adminList);
// 自动推断泛型为 List<Admin>(因 adminList 是 List<Admin> 类型)
return Result.success(adminList);
}
}
ResultUtil文件
package com.example.common;
public class ResultUtil {
// 1. 无数据的成功响应(返回 Result<Void>)
public static Result<Void> success() {
Result<Void> result = new Result<>();
result.setCode(200);
result.setMsg("请求成功");
return result;
}
// 2. 带数据的成功响应(泛型方法)
public static <T> Result<T> success(T data) {
Result<T> result = new Result<>();
result.setCode(200);
result.setMsg("请求成功");
result.setData(data); // 直接传递泛型数据(如 List<Admin>)
return result;
}
// 3. 基础错误响应(返回 Result<?>)
public static Result<?> error(String msg) {
Result<Object> result = new Result<>();
result.setCode(500);
result.setMsg(msg);
return result;
}
// 4. 带状态码的错误响应(泛型方法)
public static Result<?> error(int code, String msg) {
Result<Object> result = new Result<>();
result.setCode(code);
result.setMsg(msg);
return result;
}
}
结果为:

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐

所有评论(0)