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

优质院校建设网站万网搭建淘宝客网站

优质院校建设网站,万网搭建淘宝客网站,招商加盟网站系统,企业网站管理系统 免费#x1f4e2; 大家好#xff0c;我是 【战神刘玉栋】#xff0c;有10多年的研发经验#xff0c;致力于前后端技术栈的知识沉淀和传播。 #x1f497; #x1f33b; CSDN入驻不久#xff0c;希望大家多多支持#xff0c;后续会继续提升文章质量#xff0c;绝不滥竽充数… 大家好我是 【战神刘玉栋】有10多年的研发经验致力于前后端技术栈的知识沉淀和传播。 CSDN入驻不久希望大家多多支持后续会继续提升文章质量绝不滥竽充数欢迎多多交流。 文章目录 写在前面的话MyBatis-Plus技术简介整合步骤功能改造过程复盘LambdaQueryWrapper 总结陈词 写在前面的话 本系列博文已连载到第10篇在前几篇文章基础上我们已经得到了一个完整的前后端项目并且后端已经接入了MyBatis 完成了教师表的 CURD 操作本篇文章在此基础上整合MyBatis-Plus从而进一步强化功能。 关联文章 《程序猿入职必会1 · 搭建拥有数据交互的 SpringBoot 》 《程序猿入职必会2 · 搭建具备前端展示效果的 Vue》 《程序猿入职必会3 · SpringBoot 各层功能完善 》 《程序猿入职必会4 · Vue 完成 CURD 案例 》 《程序猿入职必会5 · CURD 页面细节规范 》 《程序猿入职必会6 · 返回结果统一封装》 《程序猿入职必会7 · 前端请求工具封装》 《程序猿入职必会8 · 整合 Knife4j 接口文档》 《程序猿入职必会9 · 用代码生成器快速开发》 MyBatis-Plus 技术简介 MyBatis-Plus简称 MP是一个 MyBatis 的增强工具在 MyBatis 的基础上只做增强不做改变为简化开发、提高效率而生。 更详细的内容介绍建议直接看官网这边不展开赘述直接上实操下文简称为“MP”。 整合步骤 引言这边是基于之前的 SpringBoot3 后端项目并且已经整合 MyBatis 的基础上介绍之前内容可以参考 《程序猿入职必会1 · 搭建拥有数据交互的 SpringBoot 》和《程序猿入职必会3 · SpringBoot 各层功能完善 》。 **Step1、引入依赖 ** !-- 整合MyBatis-Plus -- dependencygroupIdcom.baomidou/groupIdartifactIdmybatis-plus-spring-boot3-starter/artifactIdversion3.5.5/version /dependency!-- 整合MyBatis -- !--dependencygroupIdorg.mybatis.spring.boot/groupIdartifactIdmybatis-spring-boot-starter/artifactIdversion3.0.3/version /dependency--引入MyBatis-Plus相关依赖这里有两个注意事项 1、这里要引入适配SpringBoot3的版本而不是mybatis-plus-boot-starter。这里的 mybatis-plus-spring-boot3-starter 是专门为 Spring Boot 3.x 版本设计的启动器支持 Spring Boot 3.x 的特性和依赖。而 mybatis-plus-boot-starter 通常是为较早版本的 Spring Boot如 2.x设计的启动器。 Tips网上很多教程都是写 mybatis-plus-boot-starter导致不少问题。 2、MyBatis-Plus 的依赖包含了 MyBatis 的这里建议把后者的依赖注释除非你可以保障两者的版本一致否则可能会引发一系列意想不到的问题。 Step2、修改配置 和 MP 相关的配置无非就是 datasource 和 Mybatis在之前的基础上只需要将属性 mybatis 改成 mybatis-plus其他都不需要调整。 mybatis-plus:mapper-locations: classpath:/mappings/**/*Mapper.xmltype-aliases-package: com.lw.sbdemo2.entityconfig-location: classpath:mybatis-config.xmlStep3、修改实体类 这里只需要添加一个 TableId 注解标识一下主键即可这里由于主键字段不是id所以需要加注解。 其他都是表和字段由于也是基于表生成的代码遵循约定大于配置原则可以不需要调整。 正常情况使用 TableField 标识字段TableName 标识表名自动支持驼峰转下划线。 public class ZyTeacherInfo {TableIdSchema(description 教师编号)NotBlank(message 教师编号不能为空)private java.lang.String teaCode;Schema(description 教师名称)Size(min 2, max 8, message 教师名称长度需在2-8位)private java.lang.String teaName;...省略其他代码 }对应表信息 Step4、修改 Mapper 这里直接选择新建一个 Mapper以示区别因为旧的 Mapper 已经有继承一个自己封装的基类了。 创建一个 Mapper 接口继承 MP 的BaseMapper如下所示 package com.lw.sbdemo2.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.lw.sbdemo2.entity.ZyTeacherInfo; import org.apache.ibatis.annotations.Mapper;Mapper public interface ZyTeacherInfoMpMapper extends BaseMapperZyTeacherInfo {}Step5、编写测试 Controller 这里先临时写一个接口这里只为测试正常不直接注入Mapper。 Autowired private ZyTeacherInfoMpMapper zyTeacherInfoMpMapper;GetMapping() public ListZyTeacherInfo findList(ZyTeacherInfo zyTeacherInfo) {QueryWrapperZyTeacherInfo queryWrapper new QueryWrapper();queryWrapper.eq(tea_name, zyTeacherInfo.getTeaName());ListZyTeacherInfo zyTeacherInfos zyTeacherInfoMpMapper.selectList(queryWrapper);for (ZyTeacherInfo teacherInfo : zyTeacherInfos) {System.out.println(teacherInfo);}return zyTeacherInfos; }启动程序用 Knife4j 测试一下效果如下所示。 效果还可以至此基础整合工作算完成了。 功能改造 之前 MyBatis 的版本实现了 CURD 的完整功能那整合完 MP 之后也不能落下。 使用前面的 ZyTeacherInfoMpMapper已经可以实现大部分的功能它提供的方法可不少。 但总不能在 Controller 层直接操作 Mapper 吧而且一些操作毕竟还是要组装 QueryWrapper 等实现不够清爽。 那就把常用的方法封装到业务 Service 类里面即可。 这里上一段示例代码 Slf4j Service public class ZyTeacherInfoMpService extends ServiceImplZyTeacherInfoMpMapper, ZyTeacherInfo {/*** 插入用户*/public void addUser(ZyTeacherInfo user) {this.save(user);}/*** 删除用户*/public void deleteUser(Long id) {this.removeById(id);}/*** 更新用户*/public void updateUser(ZyTeacherInfo user) {this.updateById(user);}/*** 根据ID查询用户*/public ZyTeacherInfo getUserById(Long id) {return this.getById(id);}/*** 查询所有用户*/public ListZyTeacherInfo getAllUsers() {return this.list();}/*** 根据条件查询用户LambdaQueryWrapper方式*/public ListZyTeacherInfo getUsersByName(String name) {LambdaQueryWrapperZyTeacherInfo queryWrapper new LambdaQueryWrapper();queryWrapper.eq(ZyTeacherInfo::getTeaName, name);return this.list(queryWrapper);}/*** 更新电话LambdaUpdateWrapper方式*/public void updateUserPhone(Long userId, String phone) {LambdaUpdateWrapperZyTeacherInfo updateWrapper new LambdaUpdateWrapper();updateWrapper.eq(ZyTeacherInfo::getTeaCode, userId).set(ZyTeacherInfo::getTeaPhone, phone);this.getBaseMapper().update(null, updateWrapper);} }可以看到了选择多样化更复杂的一些场景可以借助 LambdaQueryWrapper 和 LambdaUpdateWrapper 实现。 上面只是部分示例并不是完整代码同时实战时框架层面可以考虑进一步的封装。 过程复盘 可以看到整个过程相当丝滑大部分操作 MP 都提供了 Service 和 Mapper 层的基类主要是去除了 SQL-XML。 虽然都是代码生成器生成的但还是减少不少代码量最主要是操作数据更贴近了程序猿的思维。 当然一些复杂的多表查询或者想提升SQL的性能那还是继续选择 XML 的方式较为合适。 MP 允许无缝使用 MyBatis 原有的功能两者并不冲突。 LambdaQueryWrapper LambdaQueryWrapper 是 MyBatis-Plus 提供的一个非常强大的查询构造器它允许你以 Lambda 表达式的方式构建查询条件。以下是一些复杂场景的示例展示如何使用 LambdaQueryWrapper 进行多条件查询、组合条件、排序等操作。 假设我们有一个 User 实体包含字段 name、age 和 email。 1、多条件查询 我们想要查询年龄大于 18 且名字包含 “John” 的用户。 LambdaQueryWrapperUser queryWrapper new LambdaQueryWrapper(); queryWrapper.gt(User::getAge, 18) // 年龄大于 18.like(User::getName, John); // 名字包含 JohnListUser users userService.list(queryWrapper);2、组合条件查询 假设我们想要查询年龄在 20 到 30 之间的用户并且邮箱不为空。 LambdaQueryWrapperUser queryWrapper new LambdaQueryWrapper(); queryWrapper.between(User::getAge, 20, 30) // 年龄在 20 到 30 之间.isNotNull(User::getEmail); // 邮箱不为空ListUser users userService.list(queryWrapper);3、使用 OR 条件 假设我们想要查询名字为 “Alice” 或者年龄小于 25 的用户。 LambdaQueryWrapperUser queryWrapper new LambdaQueryWrapper(); queryWrapper.gt(User::getAge, 18) // 年龄大于 18.like(User::getName, John); // 名字包含 JohnListUser users userService.list(queryWrapper);4、排序和分页 假设我们想要查询所有用户按照年龄降序排列并且只获取前 10 条记录。 LambdaQueryWrapperUser queryWrapper new LambdaQueryWrapper(); queryWrapper.orderByDesc(User::getAge) // 按照年龄降序排列.last(LIMIT 10); // 只获取前 10 条记录ListUser users userService.list(queryWrapper);5、复杂的嵌套条件 假设我们想要查询年龄大于 18 且名字包含 “John” 或者邮箱以 “example.com” 结尾的用户。 LambdaQueryWrapperUser queryWrapper new LambdaQueryWrapper(); queryWrapper.gt(User::getAge, 18) // 年龄大于 18.and(wrapper - wrapper // 嵌套条件.like(User::getName, John).or().likeRight(User::getEmail, example.com)); // 邮箱以 example.com 结尾ListUser users userService.list(queryWrapper);6、动态条件查询 在某些情况下查询条件可能是动态的。假设我们有一个查询条件对象用户可以选择性地输入查询条件。 public ListUser dynamicQuery(UserQueryDTO queryDTO) {LambdaQueryWrapperUser queryWrapper new LambdaQueryWrapper();if (queryDTO.getName() ! null) {queryWrapper.like(User::getName, queryDTO.getName());}if (queryDTO.getAge() ! null) {queryWrapper.eq(User::getAge, queryDTO.getAge());}if (queryDTO.getEmail() ! null) {queryWrapper.eq(User::getEmail, queryDTO.getEmail());}return userService.list(queryWrapper); }LambdaQueryWrapper 提供了灵活的方式来构建复杂的查询条件支持多种操作如条件组合、排序、分页等。通过使用 Lambda 表达式可以避免硬编码字段名从而提高代码的可读性和安全性。 总结陈词 此篇文章介绍了MyBatis-Plus 的基础整合过程整体还是挺好用的推荐仅供学习参考。 简单列了一下实战关于 MP 还有很多基础和扩展用法可以自行掌握加油 后续会逐步分享企业实际开发中的实战经验有需要交流的可以联系博主。
http://www.w-s-a.com/news/719130/

相关文章:

  • PHP搭建IDC网站青岛福瀛建设集团网站
  • 安徽网站优化多少钱软件界面设计的基本原则
  • 网站建设动态页面修改删除dnf卖飞机的网站怎么做的
  • 万网是做什么的seo综合
  • 网站关键词分隔符php网站开发平台下载
  • 郑州那家做网站便宜商业计划书免费word版
  • 秦时明月的个人网站怎么做网站开发公司需要招聘哪些人
  • 广告网站建设制作设计服务商安卓app软件定制
  • 公司网站设计与实现中国职业培训在线官方网站
  • 网站服务器空间租用郑州官网网站推广优化
  • 郑州网站建设外包业务wordpress站酷首页
  • 机关门户网站 建设 方案个人怎么申请注册商标
  • 梧州网站建设有哪些九江网站建设优化
  • APP网站建设开发企业发展英文seo招聘
  • 临海市住房和城乡建设规划局网站高校图书馆网站的建设方案
  • 建立门户网站张店易宝网站建设
  • wordpress中英文站点厦门seo顾问屈兴东
  • 邯郸网站建设项目重庆网站备案系统
  • 网站导航容易做黄冈网站建设报价
  • 美橙互联建站网站被截止徐州网站建站
  • 网站班级文化建设视频深圳企业网页设计公司
  • 钦州网站建设公司做宣传网站买什么云服务器
  • 58同城有做网站wordpress怎么改标题和meta
  • 安通建设有限公司网站东莞地铁app
  • 群晖nas做网站滨州教育平台 网站建设
  • 住房城市乡建设部网站装修平台有哪些
  • 小米网站 用什么做的深圳广告公司前十强
  • 勤哲网站开发视频瑞安 网站建设培训
  • 有个蓝色章鱼做标志的网站高端的网站建设怎么做
  • 建站网址导航hao123html网页设计实验总结