Spring Boot整合MybatisPlus

发布时间:2026/10/16 7:52:02

Spring Boot整合MybatisPlus 一、前言MyBatis-Plus 是一个 Mybatis 增强版工具在 MyBatis 上扩充了其他功能没有改变其基本功能为了简化开发提交效率而存在。二、整合MybatisPlus新建一个Spring Boot项目2.1 引入依赖dependency groupIdorg.freemarker/groupId artifactIdfreemarker/artifactId /dependency dependency groupIdcom.baomidou/groupId artifactIdmybatis-plus-boot-starter/artifactId version3.4.0/version /dependency dependency groupIdcom.baomidou/groupId artifactIdmybatis-plus-generator/artifactId version3.4.0/version /dependency dependency groupIdcom.alibaba/groupId artifactIddruid-spring-boot-starter/artifactId version1.1.22/version /dependency dependency groupIdmysql/groupId artifactIdmysql-connector-java/artifactId /dependency dependency groupIdorg.apache.commons/groupId artifactIdcommons-lang3/artifactId version3.11/version /dependency2.2 application.ymlspring:datasource:druid:# 数据库访问配置, 使用druid数据源type:com.alibaba.druid.pool.DruidDataSourcedriver-class-name:com.mysql.cj.jdbc.Driverurl:jdbc:mysql://127.0.0.1:3306/springboot?useUnicodetruecharacterEncodingutf8serverTimezoneUTCallowMultiQueriestrueuseSSLfalseusername:springpassword:spring#123# 连接池配置initial-size:5min-idle:5max-active:20# 连接等待超时时间max-wait:30000# 配置检测可以关闭的空闲连接间隔时间time-between-eviction-runs-millis:60000# 配置连接在池中的最小生存时间min-evictable-idle-time-millis:300000validation-query:select 1 from dualtest-while-idle:truetest-on-borrow:falsetest-on-return:false# 打开PSCache并且指定每个连接上PSCache的大小pool-prepared-statements:truemax-open-prepared-statements:20max-pool-prepared-statement-per-connection-size:20# 配置监控统计拦截的filters, 去掉后监控界面sql无法统计, wall用于防火墙filters:stat,wall# Spring监控AOP切入点如x.y.z.service.*,配置多个英文逗号分隔aop-patterns:com.wno704.boot.servie.*# WebStatFilter配置web-stat-filter:enabled:true# 添加过滤规则url-pattern:/*# 忽略过滤的格式exclusions:*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*# StatViewServlet配置stat-view-servlet:enabled:true# 访问路径为/druid时跳转到StatViewServleturl-pattern:/druid/*# 是否能够重置数据reset-enable:false# 需要账号密码才能访问控制台login-username:druidlogin-password:druid123# IP白名单# allow: 127.0.0.1# IP黑名单共同存在时deny优先于allow# deny: 192.168.1.218# 配置StatFilterfilter:stat:log-slow-sql:truemybatis-plus:configuration:map-underscore-to-camel-case:trueauto-mapping-behavior:fulllog-impl:org.apache.ibatis.logging.stdout.StdOutImplmapper-locations:classpath:mapper/*Mapper.xmlglobal-config:# 逻辑删除配置db-config:# 删除前logic-not-delete-value:1# 删除后logic-delete-value:02.3 分页插件配置创建MybatisPlusConfig.javaConfigurationMapperScan(com.wno704.boot.mapper)publicclassMybatisPlusConfig{/** * 新的分页插件,一缓和二缓遵循mybatis的规则,需要设置 MybatisConfiguration#useDeprecatedExecutor false 避免缓存出现问题(该属性会在旧插件移除后一同移除) */BeanpublicMybatisPlusInterceptormybatisPlusInterceptor(){MybatisPlusInterceptorinterceptornewMybatisPlusInterceptor();interceptor.addInnerInterceptor(newPaginationInnerInterceptor(DbType.MYSQL));returninterceptor;}BeanpublicConfigurationCustomizerconfigurationCustomizer(){returnconfiguration-configuration.setUseDeprecatedExecutor(false);}}2.4 自动生成代码创建GeneratorCodeConfig.javapublicclassGeneratorCodeConfig{publicstaticStringscanner(Stringtip){ScannerscannernewScanner(System.in);StringBuilderhelpnewStringBuilder();help.append(请输入tip);System.out.println(help.toString());if(scanner.hasNext()){Stringiptscanner.next();if(StringUtils.isNotEmpty(ipt)){returnipt;}}thrownewMybatisPlusException(请输入正确的tip);}publicstaticvoidmain(String[]args){// 代码生成器AutoGeneratormpgnewAutoGenerator();// 全局配置GlobalConfiggcnewGlobalConfig();StringprojectPathSystem.getProperty(user.dir);projectPathE:\\workspace\\workspace(idea)\\spring\\boot\\24springboot-mybatisplus;gc.setOutputDir(projectPath/src/main/java);gc.setAuthor(wno704);gc.setOpen(false);//实体属性 Swagger2 注解gc.setSwagger2(false);mpg.setGlobalConfig(gc);// 数据源配置DataSourceConfigdscnewDataSourceConfig();dsc.setUrl(jdbc:mysql://127.0.0.1:3306/springboot?useUnicodetruecharacterEncodingutf8serverTimezoneUTCallowPublicKeyRetrievaltrueallowMultiQueriestrueuseSSLfalse);dsc.setDriverName(com.mysql.cj.jdbc.Driver);dsc.setUsername(spring);dsc.setPassword(spring#123);mpg.setDataSource(dsc);// 包配置PackageConfigpcnewPackageConfig();//pc.setModuleName(scanner(模块名));pc.setParent(com.wno704.boot);pc.setEntity(model);//entitypc.setMapper(mapper);pc.setService(service);pc.setServiceImpl(service.impl);mpg.setPackageInfo(pc);// 配置模板TemplateConfigtemplateConfignewTemplateConfig();templateConfig.setXml(null);mpg.setTemplate(templateConfig);// 策略配置StrategyConfigstrategynewStrategyConfig();strategy.setNaming(NamingStrategy.underline_to_camel);strategy.setColumnNaming(NamingStrategy.underline_to_camel);strategy.setSuperEntityClass(com.baomidou.mybatisplus.extension.activerecord.Model);strategy.setEntityLombokModel(true);strategy.setRestControllerStyle(true);strategy.setEntityLombokModel(true);strategy.setInclude(scanner(表名多个英文逗号分割).split(,));strategy.setControllerMappingHyphenStyle(true);strategy.setTablePrefix(pc.getModuleName()_);mpg.setStrategy(strategy);mpg.setTemplateEngine(newFreemarkerTemplateEngine());mpg.execute();}}2.5 数据准备这里我们使用以前的测试数据这里以sys_log表做测试2.6 测试运行GeneratorCodeConfig.java输入sys_log生产代码如下我们编写控制代码调用Autowired private ISysLogService iSysLogService; RequestMapping( value /getLog, method RequestMethod.GET) public SysLog getLog(){ return iSysLogService.getById(1); }启动项目浏览器访问 http://localhost:8080/sys-log/getLog三、自定义sql3.1 定义Mapper.xml在resources目录下新建mapper文件夹新建SysLogMapper.xml文件?xml version1.0 encodingUTF-8?!DOCTYPEmapperPUBLIC-//mybatis.org//DTD Mapper 3.0//ENhttp://mybatis.org/dtd/mybatis-3-mapper.dtdmappernamespacecom.wno704.boot.mapper.SysLogMapper!-- 查找所有信息 --selectidfindAllSysLogresultTypecom.wno704.boot.model.SysLogselect * from sys_log/select/mapper3.2 代码改造在SysLogMapper.java新增findAllSysLog()代码如下publicinterfaceSysLogMapperextendsBaseMapperSysLog{publicListSysLogfindAllSysLog();}在ISysLogService.java新增findAllSysLog()代码如下publicinterfaceISysLogServiceextendsIServiceSysLog{publicListSysLogfindAllSysLog();}在SysLogServiceImpl.java新增findAllSysLog()代码如下ServicepublicclassSysLogServiceImplextendsServiceImplSysLogMapper,SysLogimplementsISysLogService{AutowiredprivateSysLogMappersysLogMapper;OverridepublicListSysLogfindAllSysLog(){returnsysLogMapper.findAllSysLog();}}在SysLogController.java新增getAllLog()代码如下RestControllerRequestMapping(/sys-log)publicclassSysLogController{AutowiredprivateISysLogServiceiSysLogService;RequestMapping(value/getLog,methodRequestMethod.GET)publicSysLoggetLog(){returniSysLogService.getById(1);}RequestMapping(value/getAllLog,methodRequestMethod.GET)publicListSysLoggetAllLog(){returniSysLogService.findAllSysLog();}}3.3 测试启动项目浏览器访问http://localhost:8080/sys-log/getAllLog控制台显示如下mybatis-plus3.3之前的版本参考https://www.cnblogs.com/liuyj-top/p/12976396.html四、分页查询4.1 代码改造在ISysLogService.java新增findSysLogByPage()代码如下publicListSysLogfindSysLogByPage(Integercurrpage,Integerpagesize);在SysLogServiceImpl.java新增findSysLogByPage()代码如下OverridepublicListSysLogfindSysLogByPage(Integercurrpage,Integerpagesize){//分页查询需要配置分页插件PageSysLogpagenewPage(currpage,pagesize);IPageSysLogpagessysLogMapper.selectPage(page,null);System.out.println(总记录数:pages.getTotal());System.out.println(总页数pages.getSize());returnpages.getRecords();}在SysLogController.java新增getLogbyPage()代码如下GetMapping(getLogbyPage/{currpage}/{pagesize})publicListSysLoggetLogbyPage(PathVariableIntegercurrpage,PathVariableIntegerpagesize){returniSysLogService.findSysLogByPage(currpage,pagesize);}4.2 测试启动项目使用http请求测试如下五、模糊查询5.1 代码改造在ISysLogService.java新增findSysLogWithMethod()代码如下publicListSysLogfindSysLogWithMethod(Stringmethod);在SysLogServiceImpl.java新增findSysLogWithMethod()代码如下OverridepublicListSysLogfindSysLogWithMethod(Stringmethod){QueryWrapperSysLogwrappernewQueryWrapper();wrapper.like(method,method);wrapper.orderByDesc(true,create_time);returnsysLogMapper.selectList(wrapper);}在SysLogController.java新增getLogbyMethod()代码如下GetMapping(getLogbyMethod/{method})publicListSysLoggetLogbyMethod(PathVariableStringmethod){returniSysLogService.findSysLogWithMethod(method);}5.2 测试启动项目使用http请求测试如下更多条件构造器官方文档
延伸阅读

更多相关文章

2026/10/16 7:52:02

MATLAB声音信号识别实战:MFCC特征与分类器全流程

如果你最近在找一条能快速验证“声音信号识别”思路的路径,我建议试试MATLAB——尤其当你手里有现成的音频数据、却不想花两周时间搭Python音频环境的时候。我做了一个声音信号识别的小项目,目标很朴素:用麦克风采集日常环境里的几类声音&…

2026/10/16 7:52:02

PhysEvo:Astra可以行动,就让它行动吧

26年10月来自中科院大学、中科院自动化所和清华的论文“PhysEvo: Astra Can Act, Let It”。 PhysEvo 对“冻结大模型如何通过改造自身的机器人软件系统获得更强能力”给出了有价值的实证;但对“递归机制本身能否持续提高自我改进效率”,证据仍然不足。 最值得借鉴的是它如何…

2026/10/16 7:47:02

技能包+任务图:三小时上线邮件自动分类与回复服务

1. 需求拆解:一句话怎么变成Agent能执行的“任务图”1.1 先把模糊需求拆成确定性步骤那天下午三点,业务方在群里丢过来一句话:“每天几百封客户邮件进来,能不能自动分个类、标个优先级,再顺手生成个回复草稿&#xff0…

2026/10/16 9:42:45

阿里云K8s部署Vue2+SpringBoot2.5+Nacos2.0.3全流程

简介:这份资源面向需要在阿里云Kubernetes集群上落地前后端分离项目的开发与运维人员,提供一套可直接参考的部署方案,覆盖Vue2前端、Nginx、SpringBoot2.5后端与Nacos2.0.3注册配置中心的完整编排。包内共16个文件,以8个yaml清单为…

2026/10/16 9:42:45

K8s 部署 Vue2 + Spring Boot 2.5 + Nacos 2.0.3 实战清单与避坑指南

简介:本资源面向需要在阿里云Kubernetes集群上落地前后端分离项目的开发与运维人员,提供一套可直接参考的部署方案,覆盖Vue2前端、Nginx反向代理、SpringBoot2.5后端以及Nacos2.0.3注册配置中心的完整编排。包内共16个文件,以8个Y…

2026/10/16 9:42:45

贝叶斯优化调参实战:高斯过程与采集函数原理及Python实现

简介:这份资源面向机器学习与深度学习方向的学习者和开发者,聚焦用贝叶斯优化解决超参数调优耗时、试错成本高的问题。压缩包共4个文件,约10.96MB,包含2个Python脚本、1个CSV数据集和1个NPZ数据文件:脚本分别演示机器学…

2026/10/16 9:42:45

ILSVRC2012 devkit全解析:ImageNet官方评估工具的结构与避坑指南

简介:ILSVRC2012开发工具包是ImageNet大规模视觉识别挑战赛(ILSVRC)2012版本的官方开发套件,面向计算机视觉与深度学习研究者,服务于图像分类任务的训练、验证与评估,尤其适合复现经典论文或参加同类比赛时…

2026/10/16 9:42:45

RTP流合成MP4:H264与AAC封装实战

简介:这份资源面向音视频开发初学者与流媒体协议实践者,聚焦于将RTP承载的H264视频与AAC音频数据重新封装为可播放的MP4文件这一典型工程问题。包内共31个文件,约197KB,以17个C/C头文件与2个源文件构成核心代码框架,辅…

2026/10/16 9:37:40

Spring Data JDBC 实战:轻量级聚合映射与 CRUD 全解析

1. Spring Data JDBC 到底解决了什么问题Spring Data JDBC 这个名字,很多做 Java 后端的同事第一反应是:这不就是 Spring Data JPA 的简写吗?还真不是。它是 Spring Data 家族里一个独立的成员,定位非常明确——在 JDBC 之上提供轻…

2026/10/16 5:33:43

Python调用Gemini Structured Outputs实现工单路由门禁

客服工单最怕的不是模型“答错一句话”,而是它给出一段看起来合理的说明,程序却从中猜错优先级。通俗做法是:要求模型只交 JSON(JavaScript Object Notation,轻量数据格式),再让代码验证它。Gem…

2026/10/16 4:03:48

Spring Boot超市进销存系统毕设实战:从需求拆解到答辩通关

最近带的一个学生项目组里,有A同学跑来问我:选什么毕设题目最稳妥,既能让评审老师觉得工作量够,又不会在答辩时被问到语无伦次。我第一反应就是推荐基于Spring Boot的超市仓库管理系统——也就是超市进销存系统。这个题目乍一看平…

2026/10/15 13:42:16

Flutter StatefulWidget 生命周期核心解析

很多刚开始接触 Flutter 的朋友,在看完一堆“Hello World”和基础组件之后,大概率都会撞上同一堵墙:StatefulWidget 里那堆 initState、build、dispose 方法,到底什么时候被调用?为什么顺序是那样?在里面到…

2026/10/16 0:01:11

Cephadm实战指南:Linux系统工程师的生产级Ceph集群部署与排障

简介:本资源是一份完整的Ceph分布式存储系统中文技术文档合集,面向Linux系统运维工程师、云平台架构师及存储方向开发者,帮助读者系统掌握Ceph集群的部署、配置与运维核心能力。文档覆盖对象存储(RGW)、块设备&#xf…

2026/10/16 0:01:11

ITK中SpatialObject几何体系解析:坐标系、变换与管道集成

1. 空间对象的定位:为什么 ITK 需要一套几何描述体系很多刚开始接触 ITK 的朋友,包括我自己,最初都是被它的图像滤波、配准、分割这些“正统”功能吸引进来的。等真正上手做点实际项目,比如把分割出来的器官边界做量化分析、给血管…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑