别再写重复的CRUD了!用MyBatis-Plus + SpringBoot 3.x,10分钟搞定用户管理模块

SpringBootMyBatis-PlusCRUDJava开发
于 2026-05-29 11:36:28 修改
·本内容遵循CC 4.0 BY-SA版权协议

告别CRUD重复劳动:MyBatis-Plus与SpringBoot 3.x的高效开发实践

在Java后端开发领域,CRUD(增删改查)操作占据了日常工作的很大比重。对于经验丰富的开发者而言,这些基础功能的重复实现不仅枯燥乏味,更是对宝贵时间的巨大浪费。本文将展示如何利用MyBatis-Plus 3.4.3与SpringBoot 3.x的强大组合,在10分钟内构建一个完整的用户管理模块,同时分享实际项目中的最佳实践和避坑指南。

1. 环境准备与项目初始化

1.1 创建SpringBoot 3.x项目

使用Spring Initializr快速初始化项目时,需要注意几个关键选择:

BASH
# 通过curl快速生成项目骨架
curl https://start.spring.io/starter.zip \
-d dependencies=web,mybatis-plus,lombok,mysql \
-d javaVersion=17 \
-d packaging=jar \
-d bootVersion=3.1.0 \
-d groupId=com.example \
-d artifactId=user-management \
-o user-management.zip

关键依赖说明:

  • SpringBoot 3.1.0:要求Java 17+环境
  • MyBatis-Plus 3.4.3:提供强大的CRUD封装
  • Lombok:简化实体类编写
  • MySQL Driver:数据库连接驱动

1.2 数据库配置优化

在application.yml中配置数据库连接时,推荐使用Druid连接池并添加性能优化参数:

YAML
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
url: jdbc:mysql://localhost:3306/user_db?useSSL=false&serverTimezone=Asia/Shanghai
username: root
password: yourpassword
druid:
initial-size: 5
min-idle: 5
max-active: 20
test-on-borrow: true
validation-query: SELECT 1

提示:SpringBoot 3.x默认不再自动配置HikariCP,需要显式声明使用Druid

2. 核心代码实现

2.1 实体类设计

利用MyBatis-Plus注解简化实体类定义:

JAVA
@Data
@TableName("sys_user")
public class User {
@TableId(type = IdType.AUTO)
private Long id;
@TableField("username")
private String username;
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
@Version
private Integer version;
}

关键注解说明:

  • @TableField(fill = FieldFill.xxx):自动填充策略
  • @Version:乐观锁实现
  • @TableLogic:逻辑删除标记(可选)

2.2 Mapper层实现

MyBatis-Plus的强大之处在于其BaseMapper提供的通用方法:

JAVA
@Mapper
public interface UserMapper extends BaseMapper<User> {
// 自定义复杂查询示例
@Select("SELECT * FROM sys_user WHERE username LIKE CONCAT('%',#{username},'%')")
List<User> searchByUsername(String username);
}

2.3 Service层最佳实践

采用继承ServiceImpl的方式可以同时获得通用CRUD和自定义方法:

JAVA
public interface UserService extends IService<User> {
Page<User> queryByCondition(QueryUserDTO dto);
}
 
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User>
implements UserService {
@Override
public Page<User> queryByCondition(QueryUserDTO dto) {
return lambdaQuery()
.like(StringUtils.isNotBlank(dto.getUsername()), User::getUsername, dto.getUsername())
.between(dto.getStartTime() != null && dto.getEndTime() != null,
User::getCreateTime, dto.getStartTime(), dto.getEndTime())
.page(dto.toPage());
}
}

注意:lambdaQuery()是MyBatis-Plus 3.x新增的链式查询API,比传统条件构造器更直观

3. 高级特性应用

3.1 自动填充策略

实现MetaObjectHandler来处理创建时间和更新时间:

JAVA
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now());
}
 
@Override
public void updateFill(MetaObject metaObject) {
this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
}
}

3.2 乐观锁实现

在配置类中注册乐观锁插件:

JAVA
@Configuration
public class MybatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
return interceptor;
}
}

3.3 分页查询优化

配置分页插件并实现DTO转换:

JAVA
// 分页插件配置
@Bean
public MybatisPlusInterceptor paginationInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}
 
// DTO示例
@Data
public class QueryUserDTO {
private String username;
private LocalDateTime startTime;
private LocalDateTime endTime;
public Page<User> toPage() {
return new Page<>(1, 10); // 默认第一页,每页10条
}
}

4. 接口设计与Swagger集成

4.1 RESTful接口规范

遵循RESTful最佳实践的Controller实现:

JAVA
@RestController
@RequestMapping("/api/users")
@Tag(name = "用户管理")
public class UserController {
@Autowired
private UserService userService;
 
@GetMapping
@Operation(summary = "分页查询用户列表")
public R<Page<User>> list(QueryUserDTO dto) {
return R.success(userService.queryByCondition(dto));
}
 
@PostMapping
@Operation(summary = "创建用户")
public R<Boolean> create(@Valid @RequestBody CreateUserDTO dto) {
return R.success(userService.save(dto.toEntity()));
}
}

4.2 Swagger 3.0配置

SpringBoot 3.x推荐使用SpringDoc OpenAPI:

JAVA
@Configuration
@OpenAPIDefinition(
info = @Info(
title = "用户管理API",
version = "1.0",
description = "基于MyBatis-Plus的用户管理接口"
)
)
public class SwaggerConfig {
@Bean
public GroupedOpenApi publicApi() {
return GroupedOpenApi.builder()
.group("user-management")
.pathsToMatch("/api/**")
.build();
}
}

访问地址:http://localhost:8080/swagger-ui.html

5. 性能优化与生产建议

5.1 二级缓存配置

在application.yml中启用MyBatis二级缓存:

YAML
mybatis-plus:
configuration:
cache-enabled: true
local-cache-scope: session

5.2 SQL执行监控

配置P6Spy实现SQL日志美化:

XML
<!-- pom.xml添加依赖 -->
<dependency>
<groupId>p6spy</groupId>
<artifactId>p6spy</artifactId>
<version>3.9.1</version>
</dependency>

配置spy.properties:

PROPERTIES
module.log=com.p6spy.engine.logging.P6LogFactory
driverlist=com.mysql.cj.jdbc.Driver
logMessageFormat=com.p6spy.engine.spy.appender.CustomLineFormat
customLogMessageFormat=%(executionTime)ms | %(category) | connection %(connectionId) | %(sqlSingleLine)

5.3 常见问题排查

问题1:插入数据时ID不自动递增

解决方案:确保实体类@TableId注解配置正确,数据库字段设置为自增

问题2:更新操作不触发自动填充

解决方案:检查@TableField(fill = FieldFill.UPDATE)注解和MetaObjectHandler实现

问题3:分页查询结果不正确

解决方案:确认已正确配置分页插件,且Page对象参数传递正确

在实际项目中,我们团队发现将MyBatis-Plus与SpringBoot 3.x结合使用时,最大的效率提升来自于lambda表达式查询和自动填充功能。特别是在处理包含多个条件的复杂查询时,lambdaQuery()的链式调用方式比传统的XML映射文件或注解方式更加直观和类型安全。

校园交友平台毕设 SpringBoot2.7.x + MyBatis-plus .zip
【标题】"校园交友平台毕设 SpringBoot2.7.x + MyBatis-plus"是一个基于SpringBootMyBatis-Plus实现的毕业设计项目,它旨在为学生提供一个安全、便捷的在线交流与交友环境
天天501
25
SpringBoot+MyBatis-Plus达梦数据库高效CRUD与性能调优实践
本文介绍了在SpringBoot项目中集成MyBatis-Plus并针对国产达梦数据库进行高效CRUD操作和性能优化的方法。包括添加依赖、配置数据源、定义分页和性能分析插件、使用通用Mapper和Service、自定义SQL注入、选择主键生成策略、利用代码生成器以及进行性能测试。
青衫江湖行
SpringBoot集成Mybatis-Plus+代码生成工具_springbott_mybais_
3.x.x <!
西西nayss
58
springboot + mybatis(通用mapper) + druid多数据源
**通用Mapper**通用Mapper是MyBatis的一个插件,它为常见的CRUD操作提供了通用的Mapper接口。通过继承这些接口,开发者无需编写重复的Mapper方法,极大地提高了开发效率。
逍遥遥浪子
3147
SpringBoot2.x整合Mybatis Plus代码生成器
SpringBoot 2.x整合MyBatis-Plus代码生成器是现代Java企业级Web开发中极具代表性的高效工程实践,其核心价值在于将传统ORM开发中大量重复、机械、易出错的手动编码工作彻底自动化,显著提升研发效能与代码规范性。该知识点融合了SpringBoot框架的自动配置能力、MyBatis-Plus作为增强型ORM框架的扩展生态,以及数据库逆向工程(Reverse Engineering)的核心思想,构成了一套完整的“数据库驱动开发”(Database-First Development)技术闭环。首先,SpringBoot 2.x作为Spring生态的主流版本(支持JDK 8+,兼容Spring 5.x内核),通过约定优于配置(Convention over Configuration)理念,极大简化了项目初始化与集成复杂度。它内置嵌入式Tomcat、自动装配数据源(DataSource)、事务管理器(PlatformTransactionManager)、MyBatis相关Bean(如SqlSessionFactory、SqlSessionTemplate)等基础设施,开发者仅需引入mybatis-plus-boot-starter依赖并配置少量yml属性(如spring.datasource.url、mybatis-plus.mapper-locations、mybatis-plus.type-aliases-package),即可完成基础整合。特别值得注意的是,SpringBoot 2.x对条件化装配(@ConditionalOnClass、@ConditionalOnMissingBean)和启动器(Starter)机制的深度优化,使得MyBatis-Plus的自动注册Mapper接口、扫描@Mapper注解、注入BaseMapper泛型方法等行为无需任何XML配置或手动@Bean定义,真正实现“开箱即用”。其次,MyBatis-Plus(简称MP)并非MyBatis的替代品,而是对其的强力增强——在完全兼容MyBatis原有API与XML映射能力的前提下,提供了无侵入式的CRUD增强:所有实体类继承Model或仅添加@TableId/@TableName注解,即可直接调用IService接口的save()、removeById()、updateById()、getById()等方法;更关键的是,其LambdaQueryWrapper与LambdaUpdateWrapper支持类型安全的字段引用(如wrapper.eq(User::getAge, 25)),彻底规避字符串硬编码导致的重构风险与运行时异常。而分页功能则通过Page对象与IPage返回值配合内置的PaginationInnerInterceptor插件实现,无需手动编写limit/offset SQL,亦无需额外引入PageHelper,且天然支持MySQL、Oracle、PostgreSQL、SQL Server等多种方言,分页参数自动绑定、总数统计智能优化(如count优化开关、自定义count SQL),极大降低分页逻辑的开发与维护成本。代码生成器(Code Generator)是本项目的灵魂所在,它基于MyBatis-Plus提供的AutoGenerator模块构建,属于典型的数据库逆向工程工具。其执行流程为:读取JDBC连接信息→解析目标数据库元数据(通过DatabaseMetaData获取表名、列名、主键、注释、数据类型等)→依据用户配置的策略(如包名前缀、模块路径、作者信息、模板引擎选择)→调用Velocity或Freemarker模板引擎动态渲染→批量生成符合MVC分层架构的全套代码。具体包括:① Model层(实体类):自动映射字段为Java属性,添加Lombok注解(@Data、@NoArgsConstructor等),根据数据库注释生成类级与字段级Javadoc,识别主键策略(AUTO/INPUT/ID_WORKER等)并配置@TableId;② Mapper接口:继承BaseMapper,声明空接口,由MP运行时代理实现;③ Service接口与Impl实现类:遵循ISxxxService / XxxServiceImpl命名规范,注入Mapper并封装业务方法,支持事务控制与自定义逻辑扩展;④ Controller层:生成RESTful风格的增删改查端点(如@PostMapping、@GetMapping),集成统一响应体(如R)、参数校验(@Valid)、全局异常处理(@ControllerAdvice)及Swagger文档注解(@Api、@ApiOperation),甚至可选生成前端Vue/Element UI配套API调用示例。此外,“mybatis_mp”压缩包名称暗示该项目已结构化组织为标准Maven多模块工程(如parent-pom、common、api、service、mapper、model),各层职责清晰、依赖明确,符合企业级微服务架构演进路径。开发者还可进一步定制模板:例如在Controller中集成JWT鉴权逻辑、在Service中注入RedisTemplate实现缓存穿透防护、在Mapper XML中编写复杂联查SQL并保留MP通用方法,体现“生成为主、人工为辅”的柔性开发哲学。综上,该技术栈不仅大幅压缩CRUD类业务模块的交付周期(从数日缩短至分钟级),更通过标准化产出保障团队协作一致性,是Java后端工程师必须掌握的高阶工程化能力,也是面试与架构设计中频繁考察的关键实践要点。
程序小达人
SpringBoot整合MyBatis-Plus3.1教程详解
资源摘要信息:"SpringBoot整合MyBatis-Plus 3.1.x是一套面向现代Java企业级开发的高效、简洁、类型安全的持久层解决方案,其核心价值在于在完全兼容MyBatis生态的前提下,通过高度封装与智能化设计,极大降低DAO层重复编码成本,同时显著提升开发效率、可维护性与运行时可靠性。该整合方案以SpringBoot 2.1.5为运行基础(兼容Spring 5.x),依托JDK 8的Lambda表达式、方法引用、函数式接口等特性,全面升级条件构造器(QueryWrapper、LambdaQueryWrapper)、实体映射、自动代码生成及分页查询能力。MyBatis-Plus 3.1.0作为3.x系列的重要稳定版本,首次系统性支持Lambda表达式编程范式,彻底摒弃传统字符串拼接式条件构建(如"username = ? AND status = ?"),转而采用编译期校验的`LambdaQueryWrapper.eq(User::getUsername, "admin")`方式,从根本上杜绝字段名硬编码(即“魔法值”)引发的运行时异常与重构风险。配合Lombok注解(@Data、@NoArgsConstructor、@AllArgsConstructor、@Builder等),实体类可精简至仅保留字段定义,自动注入Getter/Setter/ToString/EqualsAndHashCode等方法,大幅减少样板代码。Maven依赖体系中,除标准SpringBoot Starter外,关键引入`com.baomidou:mybatis-plus-boot-starter:3.1.0`(替代原生mybatis-spring-boot-starter),该Starter已内嵌MyBatis核心、MyBatis-Spring桥接器及MP全部增强模块,并自动完成SqlSessionFactory、GlobalConfig、MetaObjectHandler等核心Bean的条件化装配;MySQL驱动采用8.x兼容版本(mysql-connector-java),确保JDBC连接稳定性;Lombok以optional=true声明,避免传递依赖污染生产环境。配置层面,application.yml需明确配置mybatis-plus.mapper-locations(XML映射文件路径)、type-aliases-package(实体包扫描)、configuration.map-underscore-to-camel-case: true(开启下划线转驼峰自动映射),并可启用内置分页插件PaginationInterceptor(3.1.x中已优化为PaginationInnerInterceptor,支持多数据库方言自动识别),配合Page泛型分页对象与IPage结果接收,实现一行代码完成物理分页(如userMapper.selectPage(new Page<>(1,10), wrapper))。性能分析插件(PerformanceInterceptor)可在开发阶段启用,精准定位慢SQL并输出执行耗时、参数绑定详情及完整SQL语句,辅助SQL调优。代码生成器(AutoGenerator)是MP 3.1.x另一大亮点,基于Freemarker模板引擎,支持自定义Entity、Mapper、Service、Controller全栈代码一键生成,可灵活配置包结构、作者信息、表前缀过滤、字段策略(如ID生成器选择Snowflake或UUID)、逻辑删除字段(deleted)、自动填充字段(create_time/update_time)等高级特性,并深度集成Swagger2生成API文档。此外,MP提供全局异常处理器(MybatisPlusException)、乐观锁(@Version注解+OptimisticLockerInterceptor)、逻辑删除(@TableLogic)、多租户(TenantLineInnerInterceptor)、动态表名(DynamicTableNameInnerInterceptor)等企业级扩展能力,所有功能均通过SPI机制或Spring Boot AutoConfigure实现无侵入式集成。整个整合过程遵循‘约定优于配置’原则:默认主键策略为ID_WORKER(雪花算法),默认表名为实体类名转小写下划线格式,默认字段映射忽略static/final修饰符,开发者仅需极简配置即可获得开箱即用的CRUD能力——例如继承BaseMapper接口后,无需编写任何XML或SQL,即可直接调用insert、selectById、updateById、deleteById等30+内置方法;若需复杂查询,可通过LambdaQueryWrapper链式构建类型安全的WHERE条件,结合allEq、like、in、between、orderByAsc等丰富方法,配合apply()执行原生SQL片段或exists子查询,兼顾灵活性与安全性。综上,SpringBoot + MyBatis-Plus 3.1.x不仅是技术选型的理性之选,更是践行领域驱动设计(DDD)、关注点分离(SoC)与工程效能提升的最佳实践范本,其设计理念深刻体现了‘增强而非替代、智能而非强制、简洁而非简陋’的现代框架哲学。"
weixin_38731385
springboot3整合mybatis-plus源码
Spring Boot 3MyBatis-Plus 的整合是当前 Java Web 开发中主流且高生产力的持久层技术组合,其背后融合了 Spring 生态的自动配置能力、模块化设计思想以及 MyBatis-Plus 强大的 ORM(对象关系映射)增强特性。该源码项目以“springboot3整合mybatis-plus源码”为标题,明确指向一套可运行、可调试、可二次开发的最小可行集成样板,具备高度的工程实践参考价值。从技术演进角度看,Spring Boot 3 是 Spring 官方于2022年11月正式发布的重大版本,全面基于 Jakarta EE 9+(即包名由 javax.* 迁移至 jakarta.*),要求 JDK 17+ 作为最低运行环境,并深度集成 Spring Framework 6,引入了虚拟线程(Virtual Threads)预支持、更严格的 Bean 生命周期管理、不可变配置绑定(@ConfigurationProperties binding to immutable types)、HTTP/3 协议兼容性等关键特性;而 MyBatis-Plus 3.5.x(尤其是适配 Spring Boot 33.5.3+ 版本)同步完成了 Jakarta EE 兼容改造,重构了内部 SQL 解析器、分页插件、自动填充逻辑及 LambdaQueryWrapper 等核心 API,确保在无 XML 映射文件前提下,仍能通过注解或代码方式实现零侵入式 CRUD、条件构造、乐观锁、逻辑删除、多租户隔离等企业级功能。在具体整合机制上,该项目通过标准 Maven 构建体系实现依赖协同:pom.xml 文件是整个集成的中枢神经,它不仅声明了 spring-boot-starter-web、spring-boot-starter-jdbc 等基础 Starter,更关键的是引入了 mybatis-plus-spring-boot3-starter(而非旧版的 mybatis-plus-boot-starter),该 Starter 内部已预置 Jakarta 兼容的 DataSourceAutoConfiguration、MybatisPlusAutoConfiguration 等自动配置类,能自动扫描 @Mapper 接口、注册 SqlSessionFactoryBean、注入 MyBatis-Plus 提供的 IService 和 Mapper 接口默认实现(如 BaseMapper),并完成分页插件 PaginationInnerInterceptor、性能分析插件、SQL 注入器等组件的条件化装配。此外,pom.xml 中通常还会显式指定 mybatis-plus-extension(提供多数据源、动态表名、字段加密等扩展能力)、lombok(消除样板 getter/setter/toString)、h2 或 mysql-connector-j(嵌入式或生产数据库驱动)等关键依赖,确保编译期类型安全与运行时行为一致。src 目录结构则体现了典型的分层架构范式:在 main/java 下,一般包含 config 包(定义 MyBatisPlusConfig 类,用于手动注册分页插件、自定义全局操作、SQL 注入器等)、entity 包(使用 @TableName、@TableId、@TableField 等注解标注实体类,支持主键策略如 IdType.ASSIGN_ID(雪花算法)、逻辑删除字段 @TableLogic)、mapper 包(继承 BaseMapper 的接口,无需 XML 实现即可获得 17+ 种内置方法)、service 层(IUserService 继承 IService,UserServiceImpl 继承 ServiceImpl,实现业务逻辑复用)、controller 层(RESTful 风格接口,调用 service 方法完成增删改查)。特别值得注意的是,Spring Boot 3 的配置模型已全面拥抱 @ConstructorBinding + Record 类型,因此 application.yml 中关于 MyBatis-Plus 的配置(如 mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl、mybatis-plus.global-config.db-config.id-type=assign_id)将被自动绑定至 GlobalConfig 对象,而不再依赖传统的 @ConfigurationProperties + setter 注入方式,极大提升了配置的不可变性与线程安全性。该源码还隐含大量工程最佳实践:例如利用 @MapperScan 扫描路径替代 @Mapper 注解的重复书写;通过 @Transactional 精确控制事务边界,结合 MyBatis-Plus 的 saveBatch()、updateBatchById() 等批量操作提升吞吐量;借助 MetaObjectHandler 实现创建时间、更新人等字段的全自动填充;利用 @SelectProvider 动态构建复杂查询 SQL;配合 Page 对象与 IPage 接口实现物理分页(避免内存溢出);甚至可通过自定义 MyBatis-Plus 的 TypeHandler 处理 JSON 字段、枚举序列化等特殊场景。更重要的是,整个项目具备完整的单元测试骨架(test/java 中的 UserServiceTest 使用 @SpringBootTest + @AutoConfigureTestDatabase 模拟真实 DAO 层交互),覆盖 insert、select、page、update、delete 全生命周期验证,辅以 AssertJ 或 MockMvc 断言,形成闭环质量保障。综上所述,该源码不仅是技术栈的简单拼接,更是对 Spring Boot 3 新规范、MyBatis-Plus 高阶特性的深度消化与落地,是理解现代 Java 持久层工程化建设不可或缺的实战蓝本,其价值远超单个 demo,实为构建高可用、易维护、可扩展微服务系统的坚实底座。
lxtx-0510
【java框架】MyBatis-Plus(1)--MyBatis-Plus快速上手开发及核心功能体验(csdn)—.pdf
MyBatis-Plus 是一个基于 MyBatis 的扩展框架,旨在简化开发流程,提供更高效、易用的 CRUD 操作。
一诺网络技术
12
可复用的用户权限菜单模块,运用的技术是springboot+mybatis-plus
该可复用的用户权限菜单模块是一个面向企业级Java后端开发场景的高度结构化、工程化设计的权限控制解决方案,其核心价值在于将RBAC(基于角色的访问控制)模型与Spring Boot生态深度整合,并通过MyBatis-Plus实现高效、简洁、可扩展的数据持久层抽象。模块以“jar复用组件”形式封装,意味着它并非一个完整项目,而是一个遵循高内聚、低耦合原则的独立业务能力单元(Business Capability Unit),可无缝嵌入任意基于Spring Boot 2.x/3.x的微服务或单体应用中,显著降低重复造轮子成本,提升权限系统建设的标准化程度与交付效率。从技术架构维度看,该模块严格遵循分层设计思想:表现层(Controller)提供RESTful风格的权限资源管理接口(如菜单增删改查、角色授权、用户角色绑定等);服务层(Service)封装完整的权限逻辑,包括菜单树形结构构建(支持多级无限递归)、权限校验拦截链路(集成Spring Security或自定义Filter)、动态SQL组装(如根据用户ID查询其可见菜单列表);数据访问层则完全依托MyBatis-Plus的LambdaQueryWrapper、IService接口及自动填充、逻辑删除等高级特性,极大简化CRUD操作,同时保证SQL安全性与可维护性。特别值得注意的是,privilege.sql脚本并非简单建表语句集合,而是完整实现了RBAC四张核心表——user(用户)、role(角色)、menu(菜单/资源)、role_menu(角色-菜单关联)、user_role(用户-角色关联),并包含合理的索引设计(如在role_menu.role_id、menu.parent_id上建立复合索引以加速树形查询)、外键约束(保障数据一致性)、初始种子数据(如admin角色、系统管理员用户、基础菜单项),甚至可能包含权限标识字段(permission_code)用于细粒度接口级鉴权,为后续对接Shiro或Spring Security ACL打下坚实基础。模块的“可复用性”体现在多个层面:第一,jar包privilege-1.0.jar已剥离所有环境相关配置(如数据库连接、Redis缓存地址),仅保留纯业务逻辑与POJO实体,通过Spring Boot的@ConditionalOnMissingBean、@Import等机制实现按需加载;第二,提供privilege-so(推测为Spring Boot Starter封装或OpenAPI文档描述文件),表明其具备Starter自动化配置能力,使用者仅需引入依赖+配置少量yml属性(如privilege.enabled=true),即可完成自动装配;第三,demo案例不仅演示基础功能调用,更展示如何与现有项目融合——例如在主应用中通过@EnablePrivilege注解启用模块,在SecurityConfig中注入PrivilegeFilter实现请求路径拦截,在前端Vue/React项目中解析返回的菜单JSON生成动态路由。此外,“菜单权限控制”绝非静态页面跳转限制,而是深度融合了前后端协同鉴权:后端返回的菜单数据携带authFlag、visible、perms等元信息,前端据此控制按钮显隐、路由注册与API调用许可,形成闭环管控。在实际落地过程中,开发者需重点关注几个关键实践点:首先,SQL脚本导入后务必校验字符集(推荐utf8mb4)与排序规则,避免中文菜单名乱码;其次,application.yml中需正确配置mybatis-plus.mapper-locations(指向模块内置Mapper XML路径)及table-prefix(若项目约定表前缀);再者,因模块采用MyBatis-Plus,须确保实体类@TableId、@TableField注解与数据库字段严格对应,尤其注意create_time/update_time等自动填充字段的策略配置;最后,在微服务架构下,若需跨服务权限共享,可将privilege-1.0.jar升级为Nacos配置中心驱动的动态权限刷新模块,或通过FeignClient调用统一权限认证中心。该模块的价值远超代码本身,它是一套经过生产验证的权限治理方法论:从数据建模(菜单扁平化存储+路径缓存优化)、到逻辑抽象(权限计算引擎、缓存穿透防护)、再到工程规范(模块版本语义化、API契约文档化),为构建安全、稳定、易运维的企业级权限体系提供了坚实基座。
john5205
spring boot整合mybatis+mybatis-plus的示例代码
资源摘要信息: Spring Boot 整合 MyBatisMyBatis-Plus 是当前 Java 企业级 Web 开发中极为常见且高度实用的技术组合,其核心目标在于兼顾 Spring Boot 的“约定优于配置”开发范式、MyBatis 对 SQL 的精细控制能力,以及 MyBatis-Plus 提供的无侵入式增强功能(如自动 CRUD、条件构造器、代码生成器、分页插件、逻辑删除、多租户支持等)。该整合并非简单依赖叠加,而是一套涉及工程结构设计、依赖版本协同、数据源配置、MyBatis 核心组件注册(SqlSessionFactory、MapperScannerConfigurer)、MyBatis-Plus 特性启用(如 MetaObjectHandler、PaginationInterceptor)、实体类与数据库映射规范、全局配置策略(如主键生成策略、表名/字段名自动下划线转驼峰)以及运行时行为定制的完整技术实践体系。从技术演进角度看,Spring Boot 原生默认集成的是 Spring Data JPA(基于 Hibernate),其面向对象抽象程度高但 SQL 灵活性受限;而 MyBatis 则以 XML 或注解方式显式编写 SQL,具备极强的可调试性与性能可控性;MyBatis-Plus 则在保留 MyBatis 所有优势的基础上,通过反射、泛型、Lambda 表达式、动态代理等机制,在不破坏原有架构的前提下,极大提升了开发效率——例如:无需编写任何 XML 映射文件即可完成单表基础增删改查;通过 QueryWrapper 或 LambdaQueryWrapper 构建类型安全、链式调用的动态查询条件,彻底规避字符串拼接导致的 SQL 注入风险与编译期不可检错;借助 AutoGenerator 代码生成器,仅需配置数据源连接与包路径,即可一键生成 Entity、Mapper、Mapper XML、Service、ServiceImpl、Controller 全套模块,显著降低样板代码量;同时支持自定义模板引擎(Freemarker/Velocity/Beetl)以适配企业内部编码规范。值得注意的是,整合过程中存在多个关键易错点:第一是依赖版本兼容性问题,早期 MyBatis-Plus 2.x 系列需搭配 mybatisplus-spring-boot-starter 使用,而 3.4.0+ 版本已全面迁移至官方 starter(com.baomidou:mybatis-plus-boot-starter),旧版 starter 在 Spring Boot 2.4+ 及以上环境中极易引发 Bean 注册冲突或 AutoConfiguration 失效;第二是数据库选型误导,如原文所提官网 Demo 默认采用内存型 H2 Database,其语法、事务行为、锁机制、索引特性与生产环境主流 MySQL 存在本质差异,直接照搬将导致分页语句(如 LIMIT offset,row)、时间类型处理(datetime vs timestamp)、字符集配置(utf8mb4)、主键策略(AUTO_INCREMENT vs UUID)等环节出现严重异常;第三是配置冗余与冲突,例如同时引入 spring-boot-starter-jdbc 与 mybatis-plus-boot-starter 时,若未显式排除 DataSourceAutoConfiguration,可能触发多数据源初始化失败;第四是 Mapper 扫描路径遗漏或重复,需确保 @MapperScan(basePackages = "xxx.mapper") 正确指向接口所在包,且避免被 ComponentScan 误扫导致重复注册;第五是 MyBatis-Plus 全局配置项(如 configuration: map-underscore-to-camel-case: true、global-config: db-config: id-type: assign_id)必须置于 application.yml 中 properies 层级正确位置,否则无法生效。此外,高级整合场景还需深入理解 MyBatis-Plus 的插件机制(如分页插件需注入 PaginationInnerInterceptor 并配置 dialect),逻辑删除字段(deleted)的自动填充(通过 MetaObjectHandler 实现 insertFill/updateFill),多数据源路由(结合 dynamic-datasource-spring-boot-starter),以及与 ShardingSphere、Seata 等中间件的协同适配。综上所述,Spring Boot + MyBatis + MyBatis-Plus 的整合不仅是依赖引入与配置书写的技术动作,更是对 ORM 分层架构思想、Spring 生命周期管理、MyBatis 执行流程(Executor→StatementHandler→ParameterHandler→ResultSetHandler)、字节码增强原理及企业级工程治理能力的综合检验,掌握其底层机制与最佳实践,对构建高性能、高可维护、高可扩展的 Java 后端服务具有不可替代的战略价值。
weixin_38506798
基于SpringBoot的网上购物商城设计与实现
该博客介绍基于SpringBoot的网上购物商城。其目标是打造全流程电商平台,解决传统购物问题。核心技术涉及SpringBootMyBatis-Plus、MySQL等。实现商品管理、订单交易等功能模块,要点包括高并发处理、数据安全等,具有开发部署高效等优势,有较高应用价值。
q_1262330535
1040
springboot智能停车场的设计与实现
该博客介绍了基于Spring Boot的智能停车场系统。技术栈涵盖后端Spring Boot、数据库MySQL和Redis等。核心功能有车位管理、计费、预约模块。还进行了数据库设计,给出系统测试方案,包括压力、异常、安全测试,最后展示源码结构示例及关键实现技术。
QQ2439197
388
Java+Vue智慧社区后台系统完整工程包(含数据库脚本、启动脚本与部署文档)
数据雪人
247
基于Spring Boot框架人口老龄化社区服务和管理平台设计与实现
本文围绕基于Spring Boot框架的人口老龄化社区服务和管理平台展开。介绍了系统架构、技术选型、数据库设计等内容。核心模块有老人档案管理、健康监测等,实现了各模块的功能及安全控制。还进行了性能优化,采用容器化部署和自动化部署,给出了数据架构设计思路。
QQ2439197
961