前情提要:搭建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;
    }
}
新建AdminMapper.xml文件,并在上方的官网链接: MyBatis 3 | 入门 – mybatis内找到固定格式,复制粘贴到xml文件内
结果如图:

3.新建mapper文件夹,并在内部新建AdminMapper接口

4.Mapper 接口和 Mapper.xml 的关系
 

Mapper定义接口的方法
Mapper.xml 里面去实现方法 (SQL 语句实现)

5.下载mybatisX 插件路径:

得到:
扫描mapper接口层:

6.连接数据库写一个查询接口

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;

/**
 * @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;
    }
}

结果为:

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐