当前位置: 首页 > article >正文

1.分页查询(后端)—— Vue3 + SpringCloud 5 + MyBatisPlus + MySQL 项目系列(基于 Zulu 11)

本手册是基于 Vue3 + SpringCloud5 + MyBatisPlus + MySQL 的项目结构和代码实现,旨在作为一个教学案例进行讲解。为了使案例更具普适性,文档中的公司名称、实体类、表名以及字段名称等敏感信息均已脱敏。

项目结构概述

项目采用标准的分层架构,划分为 common模块gateway模块业务模块。每个模块都对应特定的职责,确保代码的可维护性和清晰度。以下是项目的基本目录结构:

├─common-module
│  │  pom.xml
│  ├─src
│  │  └─main
│  │      ├─java
│  │      │  └─com
│  │      │      └─example
│  │      │          └─common
│  │      │              ├─constant
│  │      │              │      ResultConstant.java  
│  │      │              ├─entity
│  │      │              │      Storage.java 
│  │      │              ├─enums
│  │      │              │      ResultEnum.java      
│  │      │              └─util
│  │      │                      PageData.java
│  │      │                      Result.java
│  │                              
├─gateway-module
└─business-module
    │  pom.xml
    ├─src
    │  ├─main
    │  │  ├─java
    │  │  │  └─com
    │  │  │      └─example
    │  │  │          └─business
    │  │  │              │  BusinessApplication.java
    │  │  │              ├─config
    │  │  │              │      MyBatisPlusConfig.java
    │  │  │              │      WebConfig.java
    │  │  │              ├─mapper
    │  │  │              │      StorageMapper.java
    │  │  │              ├─service
    │  │  │              │  │  StorageService.java
    │  │  │              │  └─impl
    │  │  │              │          StorageServiceImpl.java
    │  │  │              └─web
    │  │  │                  └─controller
    │  │  │                          StorageController.java
    │  │  └─resources
    │  │      │  application.yml
    │  │      └─mapper
    │  │              StorageMapper.xml        

模块说明

  • common-module: 公共模块,包含常量、实体类、枚举类和工具类等基础代码,供其他模块复用。
  • gateway-module: API 网关模块,负责请求转发、负载均衡等功能。
  • business-module: 业务逻辑模块,包含具体的服务、控制器、数据访问层等。

核心技术

1. SpringCloud 5

SpringCloud 是微服务架构的核心框架,提供了服务注册与发现、负载均衡、断路器等重要功能。本项目通过 SpringCloud 构建微服务,并使用网关模块进行统一入口管理。

2. MyBatis-Plus

MyBatis-Plus 是 MyBatis 的增强工具,简化了单表的 CRUD 操作。本项目利用它来实现对数据库的高效访问。MyBatis-Plus 提供的 Page 类非常适合分页查询。

3. Vue3

Vue3 是前端框架,负责与后端进行交互并展示数据。本文档重点在后端,前端部分暂不展开。

4. MySQL

MySQL 是关系型数据库,存储我们的业务数据。本项目使用 MyBatis-Plus 与 MySQL 进行集成,通过实体类映射表结构来实现数据库操作。

关键代码实现

1. 实体类

@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName("storage_table")
public class Storage {

    private String companyName;

    @TableId
    private Long id;
    // 其他字段...
}

2. 数据访问层 (Mapper)

public interface StorageMapper extends BaseMapper<Storage> {

    /**
     * 分页查询仓库信息
     * @param page 分页参数
     * @param name 仓库名称(模糊查询,允许为空)
     * @return 分页结果
     */
    Page<Storage> findByPage(@Param("page") Page<Storage> page, @Param("name") String name);
}

3. 服务层 (Service)

@Service
public class StorageServiceImpl implements StorageService {

    @Autowired
    private StorageMapper storageMapper;

    @Override
    public Page<Storage> findByPage(String name, int pageNum, int pageSize) {
        Page<Storage> page = new Page<>(pageNum, pageSize);
        QueryWrapper<Storage> queryWrapper = new QueryWrapper<>();
        if (name != null && !name.isEmpty()) {
            queryWrapper.like("name", name);
        }
        return storageMapper.selectPage(page, queryWrapper);
    }
}

4. 控制层 (Controller)

@RestController
@RequestMapping("/storage")
public class StorageController {

    @Autowired
    private StorageService storageService;

    @GetMapping("/findByPage")
    public Result<PageData<List<Storage>>> findByPage(Integer pageNum,
                                                      Integer pageSize,
                                                      String name) {
        if (pageNum == null || pageNum <= 0) {
            pageNum = 1;
        }
        if (pageSize == null || pageSize <= 0) {
            pageSize = 10;
        }

        Page<Storage> storagePage = storageService.findByPage(name, pageNum, pageSize);
        PageData<List<Storage>> pageData = new PageData<>(storagePage.getRecords(), storagePage.getTotal());

        return Result.ok(pageData);
    }
}

5. Mapper XML 文件

<mapper namespace="com.example.business.mapper.StorageMapper">
    <select id="findByPage" resultType="com.example.common.entity.Storage">
        SELECT
        id,
        company_name AS companyName,
        type,
        name,
        company_id AS companyId,
        manager,
        phone,
        address,
        area,
        state,
        create_time AS createTime,
        update_time AS updateTime
        FROM storage_table
        <where>
            <if test="name != null and name != ''">
                AND name LIKE CONCAT('%', #{name}, '%')
            </if>
        </where>
    </select>
</mapper>

结论

通过该项目结构,可以看到微服务架构下如何通过 SpringCloud 进行模块化拆分,以及通过 MyBatis-Plus 实现高效的数据访问。整个项目结构清晰,适合进行扩展,代码层次分明,易于维护。


http://www.kler.cn/news/322141.html

相关文章:

  • Animal objDog = new Dog()和 Dog objDog = new Dog()的区别
  • nodejs - puppeteer 无头浏览器截图 JAVA后端调用
  • 如何在iPad上设置Chrome为默认浏览器
  • TFT-LCD显示屏(1.8寸 STM32)
  • 【PostgreSQL教程】PostgreSQL 特别篇之 常用函数
  • C++基础知识:C++中读文件的四种简单方式
  • CKKS同态加密通用函数近似方法和openFHE实现
  • Unity角色控制及Animator动画切换如走跑跳攻击
  • 如何通过费曼技巧理解复杂主题
  • 操作系统 概论
  • 【Vue.js基础】
  • idea上使用tomcat运行web项目
  • 李宏毅2023机器学习作业HW07解析和代码分享
  • 0-1开发自己的obsidian plugin DAY 4
  • 解锁自动化新境界:KeymouseGo,让键盘和鼠标动起来!
  • MySQL GROUP BY 分区大小写问题解析
  • 简明linux系统编程--互斥锁--TCP--UDP初识
  • C:数据在内存中的存储
  • 机器学习与深度学习的区别:深入理解与应用场景
  • Linux上安装Python环境
  • qt中QTatlewidget类的作用及详细使用方法
  • 网页设计html心得
  • python:基于django的html二维码页面生成功能页面
  • 博主回归!数据结构篇启动
  • Vue下载静态文件
  • 南京服务器测评【浪浪云】
  • 容器编排工具Docker Compose
  • 酒店智能门锁接口pro[V10] 对接酒店收银-SAAS本地化-未来之窗行业应用跨平台架构
  • 一步一步丰富生成式语言模型系统
  • C++标准库双向链表 list 中的insert函数实现。