【Uni-App+SSM+宠物实战】Day2:后端初始化

一、前言

昨天我们完成了全流程开发环境搭建(JDK、MySQL、IDEA 等),今天正式进入后端核心环节 ------SSM+MyBatis-Plus 框架初始化

先快速回顾技术栈:SSM(Spring + Spring MVC + MyBatis)是 Java 后端开发的经典组合,负责业务逻辑、请求处理和数据库交互;而 MyBatis-Plus(简称 MP)是 MyBatis 的增强工具,自带 CRUD 接口、分页插件等功能,无需手写重复 SQL,能大幅提升开发效率。

今天我们将基于项目自带的 pom.xml 配置依赖,完成 MP 核心配置,并通过 "查询用户数据" 验证框架是否搭建成功,为后续宠物信息、商家服务等模块开发打基础。

二、今日教学目标

  1. 理解 Maven 如何管理 SSM+MP 依赖,能通过 pom.xml 排查依赖问题;
  1. 掌握 MyBatis-Plus 核心配置类(MybatisPlusConfig.java)的编写,理解分页插件作用;
  1. 实现 "基于 MP 自带接口查询用户数据",验证后端框架初始化成功。

三、前置准备

  1. 已完成 Day1 的环境搭建(IDEA 能正常打开项目、MySQL 服务已启动);
  1. 简单了解 Maven 基础:Maven 是项目构建和依赖管理工具,pom.xml 相当于项目的 "零件清单",会自动下载配置的 jar 包(如 Spring、MP 相关依赖);
  1. 项目路径参考:C:\Users\Downloads\my-pet-custom\mypet(代码路径在github和gitee)。

四、代码实现(核心步骤)

1. 第一步:通过 Maven 引入 SSM+MP 依赖

打开 IDEA 中的 pom.xml 文件(路径:mypet/pom.xml),重点关注以下配置,确保 SSM 和 MP 依赖已正确引入:

(1)确认 MP 版本和依赖

在 pom.xml 中找到 MP 相关配置(通常在 标签内),核心代码如下:

xml 复制代码
<!-- MyBatis-Plus 版本管理 -->
<properties>
    <mybaitsplus.version>2.3</mybaitsplus.version> <!-- 项目使用的 MP 版本 -->
    <spring.version>5.0.0.RELEASE</spring.version> <!-- SSM 中的 Spring 版本 -->
</properties>
<!-- MyBatis-Plus 核心依赖 -->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus</artifactId>
    <version>${mybaitsplus.version}</version>
</dependency>
<!-- MyBatis-Plus 分页插件(可选,但项目需用到) -->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-extension</artifactId>
    <version>${mybaitsplus.version}</version>
</dependency>

关键说明

  • MP 依赖会自动关联 MyBatis 基础包,无需重复引入原生 MyBatis;
  • mybatis-plus-extension 包含分页插件(PaginationInterceptor),后续宠物列表分页查询会用到。

(2)解决依赖未下载问题

如果 IDEA 左侧 "External Libraries" 中没有 MP 相关 jar 包(如 mybatis-plus-2.3.jar),按以下步骤操作:

  1. 右键 pom.xml 文件 → 选择 MavenReload Project
  1. 等待 IDEA 联网下载依赖(底部会显示下载进度),下载完成后依赖会自动加载。

2. 第二步:编写 MyBatis-Plus 核心配置类

MP 需要通过配置类指定 "Mapper 接口扫描路径""分页插件" 等,具体步骤如下:

(1)创建配置类文件

在 IDEA 中,展开项目目录 src/main/java → 新建包 com.config(若已存在则直接使用)→ 在该包下新建 Java 类 MybatisPlusConfig.java。

(2)编写配置类代码

复制以下代码到 MybatisPlusConfig.java 中,关键代码已加注释:

kotlin 复制代码
package com.config;
import com.baomidou.mybatisplus.plugins.PaginationInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
 * MyBatis-Plus 核心配置类
 * @Configuration:标记此类为 Spring 配置类,启动时会自动加载
 * @MapperScan:指定 Mapper 接口所在包,MP 会自动扫描该包下的接口并生成实现类
 */
@Configuration
@MapperScan("com.dao") // 项目中 Mapper 接口均在 com.dao 包下(如 UserDao、ChongwuxinxiDao)
public class MybatisPlusConfig {
    /**
     * 注册 MP 分页插件
     * @Bean:将方法返回的对象交给 Spring 管理,后续可直接注入使用
     */
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        // 创建分页插件实例,支持 MySQL、Oracle 等多种数据库
        PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
        // 可选:设置数据库类型(项目用 MySQL,可省略,MP 会自动识别)
        // paginationInterceptor.setDialectType("mysql");
        return paginationInterceptor;
    }
}

关键说明

  • @MapperScan("com.dao") 是核心注解:如果路径写错(如写成 com.mapper),MP 会找不到 Mapper 接口,导致 "无法注入 DAO" 错误;
  • 分页插件 PaginationInterceptor:后续开发 "宠物信息列表分页查询" 时,直接用 MP 的 Page 对象即可实现分页,无需手动写 LIMIT SQL。

3. 第三步:让 Mapper 接口继承 MP 的 BaseMapper

MP 的核心优势是 "自带 CRUD 接口",只需让项目中的 Mapper 接口继承 BaseMapper,即可直接使用 selectById()、selectList() 等方法,无需手写 SQL。

以 UserDao(用户 Mapper 接口)为例,操作步骤如下:

(1)找到 UserDao 接口

路径:src/main/java/com/dao/UserDao.java(项目中已存在,无需新建)。

(2)继承 BaseMapper

修改 UserDao 代码,让其继承 MP 的 BaseMapper,并指定泛型为对应的实体类 UserEntity(用户实体类,对应数据库 users 表):

java 复制代码
package com.dao;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.entity.UserEntity;
/**
 * 用户 Mapper 接口
 * 继承 BaseMapper<UserEntity> 后,自动拥有 CRUD 方法
 */
public interface UserDao extends BaseMapper<UserEntity> {
    // 无需手写任何方法,BaseMapper 已提供:
    // selectById(Integer id):根据 ID 查询用户
    // selectList(null):查询所有用户
    // insert(UserEntity user):新增用户
    // updateById(UserEntity user):根据 ID 修改用户
    // deleteById(Integer id):根据 ID 删除用户
}

关键说明

  • UserEntity 是数据库 users 表的实体类(路径:src/main/java/com/entity/UserEntity.java),类中字段需与数据库表字段对应(如 id、username、password);
  • 如果后续需要自定义 SQL(如复杂联表查询),仍可在 UserDao 中写方法,并在 XML 中配置 SQL,不影响 MP 自带方法的使用。

五、效果验证(核心:测试 MP 查询功能)

框架搭建完成后,我们通过 "查询 ID=1 的用户数据" 验证是否成功,步骤如下:

1. 启动后端项目

  1. 在 IDEA 顶部工具栏,找到项目启动配置(通常显示为 mypet 或 Tomcat);
  1. 点击 "启动" 按钮(绿色三角图标),等待项目启动(控制台显示 Tomcat started on port(s): 8080 (http) 表示启动成功)。

2. 编写测试类(快速验证)

为了避免影响现有代码,我们新建一个测试类,直接调用 UserDao 的 selectById() 方法:

(1)创建测试类

在 src/test/java 下新建包 com.test → 新建类 MpTest.java。

(2)编写测试代码

kotlin 复制代码
package com.test;
import com.dao.UserDao;
import com.entity.UserEntity;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
/**
 * MyBatis-Plus 测试类
 */
@RunWith(SpringJUnit4ClassRunner.class)
// 加载 Spring 配置文件,确保能注入 UserDao
@ContextConfiguration(locations = {"classpath:spring-mybatis.xml"})
public class MpTest {
    // 自动注入 UserDao(Spring 会通过 MP 生成实现类)
    @Autowired
    private UserDao userDao;
    @Test
    public void testSelectById() {
        // 调用 MP 自带的 selectById() 方法,查询 ID=1 的用户
        UserEntity user = userDao.selectById(1);
        // 打印查询结果到控制台
        System.out.println("查询到的用户:" + user);
    }
}

(3)运行测试方法

  1. 右键 testSelectById() 方法 → 选择 Run 'testSelectById()'
  1. 查看控制台输出,如果显示类似以下内容,说明 MP 配置成功:
ini 复制代码
查询到的用户:UserEntity{id=1, username='admin', password='e10adc3949ba59abbe56e057f20f883e', phone='13800138000', email='admin@qq.com', ...}

六、常见问题与解决方案

问题描述 可能原因 解决方案
启动项目时,控制台报 "Could not find class [com.baomidou.mybatisplus.plugins.PaginationInterceptor]" MP 依赖未下载成功,或版本不匹配 1. 右键 pom.xml → Maven → Reload Project;2. 检查 mybaitsplus.version 是否为 2.3(项目适配版本)
测试时报 "org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.dao.UserDao' available" @MapperScan 路径写错,MP 未扫描到 Mapper 接口 检查 MybatisPlusConfig.java 中 @MapperScan 的值是否为 com.dao(需与 UserDao 所在包一致)
调用 selectById(1) 时返回 null 1. 数据库 users 表中没有 ID=1 的数据;2. 实体类字段与数据库表字段不匹配 1. 用 MySQL 命令 select * from users where id=1; 检查数据;2. 确保 UserEntity 类中字段名与表字段名一致(如表字段 user_name 对应实体类 userName,MP 会自动处理驼峰命名)

七、工具类 / 框架特性拓展

MP 对比原生 MyBatis:效率提升在哪里?

功能场景 原生 MyBatis 实现方式 MyBatis-Plus 实现方式 效率差异
查询单个用户(按 ID) 1. 在 UserDao 写 UserEntity selectById(Integer id);;2. 在 UserDao.xml 写 select * from users where id=#{id} 直接继承 BaseMapper,调用 selectById() 方法 无需写 XML,代码量减少 80%
分页查询用户列表 1. 写 List selectPage(Page page);;2. XML 中写 select * from users limit #{pageNum}, #{pageSize} 注入 PaginationInterceptor,调用 selectPage(new Page(1,10), null) 无需手写分页 SQL,支持多数据库适配
新增用户(带非空校验) 1. 写 int insert(UserEntity user);;2. XML 中写 标签,手动处理非空字段 调用 insert(user),MP 自动忽略 null 字段 避免 "字段为 null 导致插入失败" 的问题

后续开发 "宠物信息查询""商家列表分页" 等功能时,我们会充分利用 MP 的这些特性,减少重复代码。

八、结语

今天的核心是 MP 配置和 CRUD 接口使用 ------ 你在运行 testSelectById() 方法时,是否成功查询到用户数据?

如果遇到 "返回 null""依赖缺失" 等问题,欢迎在评论区贴出你的错误日志(关键部分即可),我们一起分析原因;如果成功运行,也可以分享你的测试结果,让大家一起踩坑避坑!

下期预告

Day3:Druid 连接池配置(替换默认连接池,优化数据库性能,学习 Druid 监控页面的使用,实时查看 SQL 执行情况)。

相关推荐
qq_172805596 小时前
Go 自建库的使用教程与测试
开发语言·后端·golang
irving同学462386 小时前
TypeORM 列装饰器完整总结
前端·后端·nestjs
一直_在路上6 小时前
Go语言并发编程架构师指南:从基础到企业级实战
后端·架构
Reboot6 小时前
Mongodb数据类型
后端
似水流年流不尽思念6 小时前
Nacos Config 动态刷新的长轮询机制是如何实现的?
后端
一朵筋斗云6 小时前
关于poll和epoll
后端
黑白世界46486 小时前
开源分享: php-tools php gui的一次尝试
后端·php
金牌服务刘6 小时前
主数据平台下游系统过多如何下发数据?
后端·微服务·连续集成
remaindertime6 小时前
(八)Spring Cloud Alibaba 2023.x:网关统一鉴权与登录实现
后端·微服务