SpringBoot集成MyBatis-Plus实战教程_第1页
SpringBoot集成MyBatis-Plus实战教程_第2页
SpringBoot集成MyBatis-Plus实战教程_第3页
SpringBoot集成MyBatis-Plus实战教程_第4页
SpringBoot集成MyBatis-Plus实战教程_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

20XX/XX/02SpringBoot集成MyBatis-Plus实战教程汇报人:XXXCONTENTS目录01

技术概述与开发环境准备02

项目初始化与依赖管理03

数据库配置与连接04

核心功能实现CONTENTS目录05

实战案例演示06

高级功能与性能优化07

常见问题与解决方案01技术概述与开发环境准备高效开发:自动CRUD接口生成继承BaseMapper接口即可获得insert、selectById、update、delete等30+通用方法,无需编写XML与基础SQL,单表操作效率提升80%。功能强大:内置实用工具组件提供条件构造器(QueryWrapper/LambdaQueryWrapper)、分页插件、逻辑删除、乐观锁等功能,支持复杂查询与数据安全操作。低侵入性:兼容MyBatis生态完全兼容MyBatis原有特性,支持XML映射文件与注解SQL,原有项目可无缝迁移,无需改变开发习惯。易于扩展:适配复杂业务场景支持自定义SQL、多表关联查询、动态SQL优化,同时提供代码生成器,可一键生成Entity、Mapper、Service、Controller层代码。MyBatis-Plus核心优势解析开发环境配置清单

基础环境要求JDK8+(推荐1.8或11版本)、Maven3.6+、MySQL5.7+、IntelliJIDEA2021+

JDK安装与验证下载JDK后配置环境变量JAVA_HOME,通过cmd命令"java-version"验证安装,显示版本信息如"javaversion"1.8.0_361""即成功

Maven配置要点修改settings.xml配置本地仓库路径与阿里云镜像,通过"mvn-v"验证版本,配置IDEA中的Maven路径与用户设置文件

MySQL环境准备安装MySQL5.7+版本,创建项目数据库(如mp_demo),准备测试数据表(如user表),确保root用户权限正常

IDEA插件推荐必装插件:Lombok(简化实体类)、MyBatisX(XML与接口跳转)、MavenHelper(依赖冲突分析)JDK与Maven环境配置

01JDK安装与环境变量配置推荐安装JDK1.8或更高版本,配置JAVA_HOME环境变量指向JDK安装路径,并将%JAVA_HOME%\\bin添加至Path变量。验证命令:java-version,显示JDK版本信息即配置成功。

02Maven下载与配置下载Maven3.6+版本并解压,修改conf/settings.xml配置本地仓库路径(如D:\\Maven\\repo)和阿里云镜像加速依赖下载。配置MAVEN_HOME环境变量,Path添加%MAVEN_HOME%\\bin,验证命令:mvn-v。

03IDEA关联JDK与Maven在IDEA中通过File→Settings→BuildTools→Maven配置Maven路径及用户设置文件,通过ProjectStructure设置ProjectSDK为已安装JDK,确保开发环境一致性。IDEA开发工具配置JDK环境配置在IDEA中依次打开File→ProjectStructure→Project,将ProjectSDK设置为已安装的JDK8或更高版本,Projectlanguagelevel选择对应版本。Maven配置进入File→Settings→Build,Execution,Deployment→BuildTools→Maven,配置Mavenhomepath为本地Maven路径,Usersettingsfile选择修改后的settings.xml文件。必备插件安装推荐安装Lombok插件以简化实体类代码,MyBatisX插件辅助MyBatis-Plus开发,MavenHelper插件用于依赖管理与冲突解决。注解处理启用在Settings→Build→AnnotationProcessors中勾选"Enableannotationprocessing",确保Lombok等注解处理器正常工作。02项目初始化与依赖管理SpringBoot项目创建流程通过SpringInitializr创建访问https://start.spring.io/,选择Maven、Java语言、SpringBoot稳定版本(如3.2.0),填写Group(如com.example)和Artifact(如springboot-mybatisplus-demo),勾选SpringWeb、MySQLDriver依赖。通过IDEA内置工具创建在IDEA中选择File→New→Project→SpringInitializr,配置同上,直接创建项目,无需手动下载压缩包。关键依赖选择必选依赖:SpringWeb(构建Web应用)、MySQLDriver(数据库连接);可选依赖:Lombok(简化实体类代码)。项目结构解析核心目录包括:src/main/java(Java代码)、src/main/resources(配置文件)、src/test/java(测试代码);resources目录下需创建application.yml配置文件。核心依赖配置详解

MyBatis-Plus启动器依赖在pom.xml中添加MyBatis-Plus启动器依赖,推荐使用最新稳定版本,如3.5.5。该依赖会自动引入MyBatis核心及相关依赖,无需额外配置MyBatis。

数据库驱动依赖根据使用的数据库类型添加对应驱动,以MySQL为例,引入mysql-connector-java依赖,版本建议8.0.33及以上,需注意与数据库版本匹配。

可选依赖推荐推荐添加Lombok依赖简化实体类开发,通过@Data注解自动生成getter/setter等方法;若需多表关联查询,可引入mybatis-plus-join-boot-starter依赖。

依赖冲突解决确保项目中未同时引入MyBatis和MyBatis-Plus依赖,避免jar包冲突。若使用SpringBoot3.x,需选择适配的MyBatis-Plus版本(如+)。依赖冲突解决方案冲突原因分析

SpringBoot项目中引入MyBatis-Plus时,易与MyBatis原生依赖或其他ORM框架依赖产生版本冲突,导致类加载异常或方法调用错误。排除冲突依赖

在pom.xml中使用<exclusion>标签排除MyBatis-Plus传递的冲突依赖,如排除spring-boot-starter-jdbc中的原生MyBatis依赖。统一版本管理

在pom.xml的<properties>中声明MyBatis-Plus版本,如<mybatis-plus.version>3.5.5</mybatis-plus.version>,确保所有相关依赖版本一致。依赖树分析工具

使用Maven命令mvndependency:tree或IDEA的MavenHelper插件,查看依赖树结构,定位冲突依赖的来源和版本。03数据库配置与连接application.yml配置详解

数据源配置配置数据库连接信息,包括driver-class-name(如com.mysql.cj.jdbc.Driver)、url(如jdbc:mysql://localhost:3306/your_database?serverTimezone=Asia/Shanghai)、username和password,确保项目能正确连接数据库。

MyBatis-Plus基础配置设置mapper-locations指定MapperXML文件路径(如classpath*:/mapper/**/*.xml),type-aliases-package指定实体类包路径(如com.example.demo.entity),开启map-underscore-to-camel-case实现下划线转驼峰命名。

全局配置配置db-config,包括id-type设置主键生成策略(如auto自增),logic-delete-field指定逻辑删除字段名,logic-delete-value和logic-not-delete-value定义逻辑删除值(如1表示已删除,0表示未删除)。

日志配置通过configuration.log-impl设置日志实现类,开发环境可配置为org.apache.ibatis.logging.stdout.StdOutImpl打印SQL日志,方便调试。多环境配置策略

环境分类与配置文件命名规范主流环境划分为开发环境(dev)、测试环境(test)、生产环境(prod)。配置文件命名格式为application-{环境名}.yml,如application-dev.yml。

配置文件加载优先级SpringBoot加载配置文件的优先级从高到低为:命令行参数>系统环境变量>application-{profile}.yml>application.yml>内置默认配置。

激活指定环境的三种方式1.在application.yml中通过files.active:dev指定;2.运行时添加JVM参数-Dfiles.active=test;3.打包后通过java-jar命令指定--files.active=prod。

环境间配置共享与覆盖公共配置写在application.yml,环境特有配置写在对应环境文件中。环境文件中的配置会覆盖application.yml中相同的配置项,实现差异化管理。数据库连接池配置优化连接池类型选择推荐使用Druid或HikariCP连接池,在pom.xml中引入对应依赖,如Druid需添加com.alibaba.druid依赖,HikariCP为SpringBoot默认连接池。核心参数配置关键配置包括initial-size(初始连接数)、max-active(最大活跃数)、min-idle(最小空闲数)、max-wait(最大等待时间),需根据业务并发量调整。URL参数优化在数据库连接URL中添加useSSL=false、serverTimezone=Asia/Shanghai、allowMultiQueries=true等参数,确保连接安全与性能。监控与防泄露配置连接池监控,如Druid的stat-view-servlet,同时设置removeAbandoned=true及超时时间,防止连接泄露。04核心功能实现实体类注解使用规范01@TableName注解:表名映射用于指定实体类对应的数据库表名,如@TableName("sys_user")表示该实体对应sys_user表。当实体类名与表名一致(下划线转驼峰)时可省略。02@TableId注解:主键策略标识主键字段,常用type属性指定生成策略,如@TableId(type=IdType.AUTO)为自增主键,IdType.ASSIGN_ID为雪花算法分布式ID。03@TableField注解:字段映射用于属性与表字段的映射,如@TableField("user_name")解决字段名与属性名不一致问题。fill属性可配置自动填充策略,如FieldFill.INSERT_UPDATE。04@TableLogic注解:逻辑删除标记逻辑删除字段,如@TableLogicprivateIntegerdeleted;配合全局配置实现数据逻辑删除,不实际删除数据库记录,查询时自动过滤已删除数据。BaseMapper接口使用指南

BaseMapper接口概述BaseMapper是MyBatis-Plus提供的通用Mapper接口,内置了17种单表CRUD方法,继承该接口即可获得完整的基础数据操作能力,无需编写SQL。

核心CRUD方法示例包含insert(实体新增)、updateById(主键更新)、selectById(主键查询)、selectList(条件查询)、deleteById(主键删除)等常用操作,直接调用即可。

Mapper接口定义规范创建Mapper接口继承BaseMapper<T>,泛型指定实体类,如publicinterfaceUserMapperextendsBaseMapper<User>,无需添加@Mapper注解可通过@MapperScan扫描。

实战代码示例@AutowiredprivateUserMapperuserMapper;//注入Mapper\nUseruser=newUser();user.setName("测试");userMapper.insert(user);//新增操作\nUserresult=userMapper.selectById(1L);//查询操作IService接口实战应用IService接口定义规范

创建Service接口继承IService泛型接口,指定实体类型,如publicinterfaceUserServiceextendsIService<User>{},无需手动定义基础CRUD方法。ServiceImpl实现类集成

服务实现类继承ServiceImpl<UserMapper,User>并实现自定义Service接口,如@ServicepublicclassUserServiceImplextendsServiceImpl<UserMapper,User>implementsUserService{},获得完整CRUD能力。常用业务方法示例

包含getById(主键查询)、list(查询全部)、save(新增)、updateById(更新)、removeById(删除)等方法,如userService.getById(1L)获取ID为1的用户信息。批量操作优化实践

使用saveBatch(批量新增)、updateBatchById(批量更新)方法提升性能,建议设置批次大小为1000-5000,如userService.saveBatch(userList,2000)。条件查询与分页结合

通过lambda条件构造器和Page对象实现分页查询,如Page<User>page=userService.page(newPage<>(1,10),Wrappers.lambdaQuery(User::getAge).ge(18))。条件构造器Wrapper详解

QueryWrapper基础用法QueryWrapper是MyBatis-Plus中用于构建查询条件的核心类,支持链式调用构建WHERE子句。例如:queryWrapper.like("name","Tom").eq("age",20)可生成"WHEREnameLIKE'%Tom%'ANDage=20"的条件。

LambdaQueryWrapper优势LambdaQueryWrapper通过Lambda表达式引用实体类属性,避免字符串硬编码字段名,如LambdaQueryWrapper<User>().eq(User::getName,"Tom"),编译期即可校验字段合法性,减少拼写错误。

常用条件方法示例包含eq(等于)、ne(不等于)、gt(大于)、ge(大于等于)、lt(小于)、le(小于等于)、like(模糊查询)、in(包含)、between(范围)等方法,如queryWrapper.between("age",18,30).orderByDesc("create_time")。

UpdateWrapper使用场景UpdateWrapper专用于构建更新条件,支持set方法设置字段值,如newUpdateWrapper<User>().eq("id",1).set("email","new@"),可实现指定条件的更新操作。分页插件配置与使用

分页插件配置类实现创建MybatisPlusConfig配置类,通过@Bean注解注册MybatisPlusInterceptor,添加PaginationInnerInterceptor并指定数据库类型(如DbType.MYSQL)。

分页查询代码示例使用Page对象指定页码和每页条数,调用selectPage方法传入Page对象和查询条件,返回的Page对象包含总记录数、总页数及当前页数据。

分页参数说明Page构造函数参数:current(当前页码,从1开始)、size(每页记录数);返回结果包含getTotal()(总记录数)、getPages()(总页数)、getRecords()(当前页数据列表)。逻辑删除功能实现

逻辑删除配置(application.yml)在配置文件中设置逻辑删除字段名及值:mybatis-plus.global-config.db-config.logic-delete-field:deleted;logic-delete-value:1;logic-not-delete-value:0

实体类注解(@TableLogic)在实体类删除字段上添加注解:@TableLogicprivateIntegerdeleted;自动实现查询时过滤已删除数据

删除操作演示调用BaseMapper的deleteById方法,实际执行UPDATE语句将deleted字段设为1,而非物理删除

查询自动过滤执行selectList等查询方法时,MyBatis-Plus自动追加条件:WHEREdeleted=0,无需手动处理乐观锁插件应用

乐观锁概念与应用场景乐观锁是一种并发控制机制,假设数据冲突概率低,通过版本号或时间戳实现,适用于读多写少场景,如商品库存扣减、余额更新等。

乐观锁插件配置步骤1.实体类添加@Version注解标识版本字段;2.配置类注册OptimisticLockerInnerInterceptor插件;3.确保数据库表存在版本字段(如version)。

核心代码实现示例实体类:@VersionprivateIntegerversion;配置类:interceptor.addInnerInterceptor(newOptimisticLockerInnerInterceptor());业务层:updateById(user)自动触发版本校验。

冲突处理与注意事项版本冲突时抛出OptimisticLockException,需业务层捕获并处理;仅支持updateById(id)和update(entity,wrapper)方法;建议版本字段设为int/bigint类型。05实战案例演示用户管理模块设计模块功能规划包含用户信息的增删改查、分页查询、条件筛选、逻辑删除等核心功能,满足基础用户管理需求。数据库表设计以用户表(sys_user)为例,包含id、username、password、email、status、create_time等字段,采用下划线命名法,主键自增。实体类定义使用@Data注解简化代码,@TableName指定对应表名,@TableId设置主键策略,@TableField标注字段映射关系,如@TableField("user_name")。分层架构设计遵循Controller→Service→Mapper三层架构,Controller处理请求,Service实现业务逻辑,Mapper负责数据访问,各层职责清晰。数据库表设计规范表名采用下划线命名法(如sys_user),主键字段命名为id且类型为BIGINT,包含逻辑删除字段(如deletedTINYINTDEFAULT0)及自动填充字段(如create_time、update_time)。实体类注解使用使用@TableName指定对应数据库表名,@TableId定义主键策略(如IdType.AUTO自增),@TableField映射字段关系,@TableLogic标识逻辑删除字段。Lombok简化实体类开发通过@Data注解自动生成getter、setter、toString等方法,减少样板代码,如:@Data@TableName("sys_user")publicclassUser{...}字段映射与类型转换开启map-underscore-to-camel-case配置实现数据库下划线字段(如user_name)到实体类驼峰属性(userName)的自动转换,无需手动指定@TableField。实体类与数据库表设计CRUD接口实现代码实体类定义使用Lombok注解简化代码,通过@TableName指定数据库表名,@TableId设置主键策略。示例:@Data@TableName("sys_user")publicclassUser{@TableId(type=IdType.AUTO)privateLongid;privateStringusername;privateStringpassword;}Mapper接口定义继承BaseMapper接口获得基础CRUD方法。示例:publicinterfaceUserMapperextendsBaseMapper<User>{}Service层实现通过继承ServiceImpl实现Service层功能。示例:@ServicepublicclassUserServiceImplextendsServiceImpl<UserMapper,User>implementsUserService{}Controller层接口提供RESTful接口,调用Service层方法。示例:@PostMapping("/user")publicResultsave(@RequestBodyUseruser){returnResult.success(userService.save(user));}条件查询与分页实现

条件构造器核心用法MyBatis-Plus提供QueryWrapper与LambdaQueryWrapper两种条件构造方式,支持eq、like、ge等30+条件方法。LambdaQueryWrapper通过实体类方法引用避免字符串字段名硬编码,如LambdaQueryWrapper<User>().eq(User::getName,"Tom")。

分页插件配置步骤1.创建配置类注册MybatisPlusInterceptor;2.添加PaginationInnerInterceptor并指定数据库类型(如DbType.MYSQL);3.通过Page对象设置页码和每页条数,调用selectPage方法实现物理分页。

实战代码示例条件查询:List<User>users=userService.list(newQueryWrapper<User>().lambda().ge(User::getAge,18).like(User::getName,"张"));分页查询:Page<User>page=userService.page(newPage<User>(1,10),Wrappers.emptyWrapper())。Controller层接口设计RESTful接口规范遵循RESTful设计原则,使用标准HTTP方法(GET/POST/PUT/DELETE)对应CRUD操作,URL路径采用名词复数形式(如/users),通过状态码表示操作结果。核心接口定义包含用户列表查询(GET/users)、用户详情获取(GET/users/{id})、新增用户(POST/users)、更新用户(PUT/users/{id})、删除用户(DELETE/users/{id})等基础接口。参数接收与响应处理使用@RequestParam接收查询参数,@PathVariable获取路径参数,@RequestBody接收JSON请求体;统一响应格式,包含状态码、消息和数据体,如{"code":200,"msg":"success","data":{}}。分页查询接口实现定义分页查询接口(GET/users/page),接收pageNum和pageSize参数,返回包含总记录数、总页数和数据列表的分页结果,如{"total":100,"pages":5,"records":[...]}。条件查询接口示例通过QueryWrapper构建动态条件,实现多条件组合查询,如GET/users?name=张三&age=20,后端使用LambdaQueryWrapper.eq(User::getName,name).eq(User::getAge,age)处理。Postman接口测试演示测试环境准备确保SpringBoot应用已启动,服务端口默认为8080。Postman工具已安装,基础测试数据已准备(如用户表中存在id=1的测试数据)。查询接口测试(GET)请求URL:http://localhost:8080/api/user/1,请求方法:GET。预期响应:返回id=1的用户信息JSON数据,状态码200OK。新增接口测试(POST)请求URL:http://localhost:8080/api/user,请求体:{"username":"test","password":"123456","age":20}。预期响应:返回新增用户ID,状态码201Created。分页查询测试(GET)请求URL:http://localhost:8080/api/user/page?pageNum=1&pageSize=10,预期响应:返回第1页数据,包含总记录数、当前页数据列表及分页信息。06高级功能与性能优化自定义SQL实现方法

Mapper接口定义方法在Mapper接口中声明自定义方法,方法名与XML文件中的SQL语句ID对应,参数根据查询需求定义。

编写XML映射文件在resources/mapper目录下创建XML文件,通过<select>、<insert>等标签编写自定义SQL,namespace属性需与Mapper接口全类名一致。

调用自定义方法在Service层注入Mapper接口,直接调用自定义方法执行SQL,支持复杂查询、多表关联等场景。

注解方式编写SQL通过@Select、@Insert等注解在Mapper接口方法上直接编写SQL,适用于简单SQL场景,无需创建XML文件。多表关联查询实战

01多表关联场景与表结构设计以用户-订单场景为例,需设计用户表(user)和订单表(order),订单表通过user_id字段与用户表主键关联,实现一对多关系。

02VO对象定义与数据封装创建UserOrderVO类,包含用户ID、姓名、订单ID、订单金额等跨表字段,用于封装关联查询结果,避免实体类冗余。

03Mapper接口扩展与XML实现在UserMapper接口中定义selectUserWithOrders方法,通过XML文件编写JOIN语句,示例:SELECTu.id,,o.order_id,o.amountFROMuseruLEFTJOIN`order`oONu.id=o.user_idWHEREu.id=#{userId}。

04关联查询调用与结果处理在Service层调用自定义Mapper方法,返回UserOrderVO列表,可直接用于Controller层数据响应,简化多表数据组装逻辑。批量操作性能优化

01数据库连接URL优化修改数据库连接URL,添加rewriteBatchedStatements=true参数,启用MySQL批量处理功能,提升批量插入/更新效率。示例:jdbc:mysql://localhost:3306/db?rewriteBatchedStatements=true。

02调整批量插入批次大小根据数据库性能和网络情况,合理设置批量操作批次大小,建议每批次500-1000条数据。通过MyBatis-Plus的saveBatch方法实现,如userService.saveBatch(userList,500)。

03使用MyBatis-Plus批量接口直接调用MyBatis-Plus提供的批量操作接口,如IService的saveBatch、updateBatchById等方法,内部已优化SQL执行逻辑,减少数据库交互次数。核心依赖引入在pom.xml中添加MyBatis-PlusGenerator依赖:<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version></version></dependency>,同时需

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论