96SEO 2026-02-23 15:07 21
href="https://www.cnblogs.com/ljbguanli/p/19622869"

id="content_views">
在后端开发中,数据库操作是核心环节,传统
接口、条件构造器、分页插件、逻辑删除等功能,可大幅简化数据库操作代码,提升开发效率,是企业级开发的首选数据访问框架。
本文聚焦
CRUD、条件构造器、分页插件、代码生成器,到复杂查询与性能优化,全程嵌入代码教学,帮你快速掌握
核心技能,实现高效数据库操作。
SQL;
映射文件,适配复杂业务场景;
SQL;
SQL;
核心组件
接口继承后可快速开发;
Entity、Mapper、Service、Controller
层代码,减少重复工作。
com.baomidou mybatis-plus-boot-starter 3.5.3.1
com.mysql mysql-connector-j runtime
org.springframework.boot spring-boot-starter-web
org.projectlombok lombok true
com.baomidou mybatis-plus-generator 3.5.3.1
org.apache.velocity velocity-engine-core 2.3
2.
配置文件(application.yml)
yaml
!important">
spring:datasource:url:jdbc:mysql://localhost:3306/mp_db?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC&allowMultiQueries=trueusername:
rootpassword:
实体类别名包路径configuration:map-underscore-to-camel-case:
true
org.apache.ibatis.logging.stdout.StdOutImpl
SQL
日志(开发环境开启,生产环境关闭)global-config:db-config:id-type:
auto
主键生成策略(auto:自增,none:无策略,input:手动输入)logic-delete-field:
isDeleted
org.mybatis.spring.annotation.MapperScan;
import
org.springframework.boot.SpringApplication;
import
org.springframework.boot.autoconfigure.SpringBootApplication;
@MapperScan("com.example.mp.mapper")
Mapper
{SpringApplication.run(MyBatisPlusApplication.class,
args);}
IService)
以用户表(t_user)为例,实现单表增删改查,无需编写
实体类(Entity)
java
运行
com.baomidou.mybatisplus.annotation.*;
import
对应数据库字段名(下划线转驼峰可省略,不一致时需指定)private
String
自动填充配置(处理创建时间、更新时间)
java
运行
com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import
org.apache.ibatis.reflection.MetaObject;
import
org.springframework.stereotype.Component;
import
LocalDateTime.now());strictInsertFill(metaObject,
"updateTime",
BaseMapper)
java
运行
com.baomidou.mybatisplus.core.mapper.BaseMapper;
import
org.apache.ibatis.annotations.Mapper;
@Mapper
IService,支持批量操作)
(1)Service
com.baomidou.mybatisplus.extension.service.IService;
import
com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import
com.example.mp.mapper.UserMapper;
import
com.example.mp.service.UserService;
import
org.springframework.stereotype.Service;
@Service
org.springframework.web.bind.annotation.*;
import
com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import
com.example.mp.service.UserService;
import
批量新增用户@PostMapping("/batch")public
boolean
userService.saveBatch(userList);}//
boolean
userService.updateById(user);}//
根据ID删除用户(逻辑删除)@DeleteMapping("/{id}")public
boolean
根据ID查询用户@GetMapping("/{id}")public
User
查询所有用户(排除已逻辑删除的)@GetMapping("/list")public
List
条件查询(查询年龄大于20的用户)@GetMapping("/list/age")public
List
QueryWrapper<>();queryWrapper.gt("age",
20);
userService.list(queryWrapper);}
}
四、核心实战三:条件构造器与复杂查询
MyBatis-Plus
QueryWrapper(字符串字段名)和
LambdaQueryWrapper(Lambda表达式,避免字段名写错)两种条件构造器,适配复杂查询场景。
1.
LambdaQueryWrapper
实战(推荐,类型安全)
java
运行
com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import
org.springframework.web.bind.annotation.GetMapping;
import
org.springframework.web.bind.annotation.RequestMapping;
import
org.springframework.web.bind.annotation.RestController;
import
com.example.mp.service.UserService;
import
多条件查询:年龄在20-30之间,邮箱包含"xxx.com",按年龄降序排序@GetMapping("/complex")public
List
LambdaQueryWrapper<>();lambdaQueryWrapper.between(User::getAge,
20,
年龄在20-30之间.like(User::getEmail,
"xxx.com")
邮箱包含"xxx.com".orderByDesc(User::getAge);
按年龄降序return
userService.list(lambdaQueryWrapper);}//
模糊查询+非空判断:用户名模糊匹配,年龄不为空@GetMapping("/like")public
List
getUserListByLike(@RequestParam
String
LambdaQueryWrapper<>();lambdaQueryWrapper.like(User::getUserName,
userName)
模糊匹配(%userName%).isNotNull(User::getAge);
年龄不为空return
userService.list(lambdaQueryWrapper);}//
多条件或查询:用户名包含"张"
LambdaQueryWrapper<>();lambdaQueryWrapper.like(User::getUserName,
"张").or()
userService.list(lambdaQueryWrapper);}
}
2.
分页查询(配置分页插件)
(1)分页插件配置类
java
运行
com.baomidou.mybatisplus.annotation.DbType;
import
com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import
com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import
org.springframework.context.annotation.Bean;
import
org.springframework.context.annotation.Configuration;
@Configuration
添加分页插件,指定数据库类型(MySQL)interceptor.addInnerInterceptor(new
PaginationInnerInterceptor(DbType.MYSQL));return
interceptor;}
(2)分页查询实战
java
运行
com.baomidou.mybatisplus.core.metadata.IPage;
import
com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import
org.springframework.web.bind.annotation.GetMapping;
import
org.springframework.web.bind.annotation.RequestParam;
import
org.springframework.web.bind.annotation.RestController;
import
com.example.mp.service.UserService;
import
分页查询:页码从1开始,每页10条数据@GetMappingpublic
IPage
getUserPage(@RequestParam(defaultValue
"1")
pageNum,@RequestParam(defaultValue
"10")
分页+条件查询(年龄大于20)LambdaQueryWrapper
lambdaQueryWrapper
LambdaQueryWrapper<>();lambdaQueryWrapper.gt(User::getAge,
20);return
}
五、核心实战四:代码生成器(自动生成全量代码)
MyBatis-Plus
Entity、Mapper、Service、Controller
代码生成器实战代码
java
运行
com.baomidou.mybatisplus.generator.FastAutoGenerator;
import
com.baomidou.mybatisplus.generator.config.OutputFile;
import
com.baomidou.mybatisplus.generator.engine.VelocityTemplateEngine;
import
{FastAutoGenerator.create("jdbc:mysql://localhost:3306/mp_db?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC",
"root",
作者.outputDir(System.getProperty("user.dir")
"/src/main/java")
{builder.parent("com.example.mp")
Mapper
下).pathInfo(Collections.singletonMap(OutputFile.xml,
"/src/main/resources/mapper"));})//
->
要生成代码的数据库表名(多个表用逗号分隔).addTablePrefix("t_")
表前缀(生成实体类时去掉前缀,如
User).entityBuilder().enableLombok()
Lombok.enableTableFieldAnnotation()
开启字段注解.logicDeleteColumnName("is_deleted")
逻辑删除字段名.controllerBuilder().enableRestStyle()
RestController
模板引擎配置(Velocity).templateEngine(new
执行生成.execute();}
1:下划线转驼峰失效,字段映射错误
表现:数据库字段
无法映射到实体类
map-underscore-to-camel-case:true,实体类字段名与数据库字段名符合驼峰规则,不一致时通过
解决方案:确保实体类对应字段添加
3:分页查询失效,返回所有数据
表现:分页查询时未分页,返回全量数据;✅
解决方案:确保已配置分页插件
MybatisPlusInterceptor,且分页查询使用
page4:条件构造器字段名写错,查询无结果
表现:使用
时,字段名拼写错误,导致查询无数据;✅
LambdaQueryWrapper(通过Lambda
表达式获取字段名,编译期校验),避免手动编写字符串字段名。
七、终极总结:MyBatis-Plus
实战的核心价值是通过自动化工具与封装方法,简化数据库操作代码,减少重复开发工作,同时通过规范的配置与
API
设计,提升代码可读性与可维护性。
企业级开发中,需结合业务场景合理使用其功能,平衡「开发效率」与「代码灵活性」。
核心原则总结:
- 优先使用封装方法:常规
CRUD、分页、批量操作优先使用
QueryWrapper,复杂查询用
LambdaQueryWrapper,确保类型安全;- 规范表设计:统一表前缀、逻辑删除字段、时间字段,便于代码生成器自动生成规范代码;
- 性能优化适配:批量操作避免一次性处理过多数据,分页查询合理设置每页条数,复杂查询可自定义
SQL
优化性能。
记住:MyBatis-Plus
MyBatis
的增强而非替代,复杂业务场景(如多表联查、复杂存储过程)仍可结合自定义
XML
class="post-meta-container">
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback