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

【MybatisPlus】条件构造器、自定义SQL、Service接口


在这里插入图片描述

🐌个人主页: 🐌 叶落闲庭
💨我的专栏:💨
c语言
数据结构
javaEE
操作系统
Redis

石可破也,而不可夺坚;丹可磨也,而不可夺赤。


MybatisPlus

  • 一、条件构造器
    • 1.1 基于QueryWrapper查询
    • 1.2 基于QueryWrapper修改
    • 1.3 基于UpdateWrapper修改
    • 1.4 基于LambdaQueryWrapper查询
  • 二、自定义SQL
    • 2.1 基于Wrapper来构建where条件
    • 2.2 在mapper>方法参数中用Param注解声明wrapper变量名称,必须是ew
    • 2.3 自定义SQL,并使用Wrapper条件
  • 三、Service接口
    • 3.1 Service接口基本用法

一、条件构造器

MybatisPlus支持各种复杂的where条件,可以满足日常开发的所有需求:


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


BaseMapper中的方法参数可以是一个条件构造器Wrapper,通过继承关系可以看出查询的条件构造器(QueryWrapper)和修改的条件构造器(UpdateWrapper)都继承自AbstractWrapper,在AbstractWrapper中有多个方法可以使用,如eq表示等于,ge表示大于等于等等,只要在where条件中用到的都可以在AbstractWrapper中对应的方法实现。
而QueryWrapper和UpdateWrapper处理继承父类AbstractWrapper的所有功能外,还拓展了自己的功能,QueryWrapper就是在父类的基础上拓展类select的功能,同理UpdateWrapper就是拓展了更新相关的功能,即setSql方法,通过字符串的形式把set的部分写出来,然后拼到sql语句中。


在这里插入图片描述


在这里插入图片描述
还有一个构造器是在构造条件时基于Lambda的语法实现上述功能的

1.1 基于QueryWrapper查询

 @Test
void testQueryWrapper() {//1.构建查询条件QueryWrapper<User2> wrapper = new QueryWrapper<User2>().select("id","username","password").like("username","a");//2.查询List<User2> user2s = user2Mapper.selectList(wrapper);user2s.forEach(System.out::println);
}

1.2 基于QueryWrapper修改

@Test
void testUpdateByQueryWrapper() {//要更新的数据User2 user2 = new User2();user2.setPassword("000");//更新的条件QueryWrapper<User2> wrapper = new QueryWrapper<User2>().eq("username","zhaoliu");//执行更新user2Mapper.update(user2,wrapper);
}

1.3 基于UpdateWrapper修改

@Test
void testUpdateWrapper() {UpdateWrapper<User2> wrapper = new UpdateWrapper<User2>().setSql("password = '111'").in("id",1,3,4);//执行更新user2Mapper.update(null,wrapper);
}

1.4 基于LambdaQueryWrapper查询

@Test
void testLambdaQueryWrapper() {//1.构建查询条件LambdaQueryWrapper<User2> wrapper = new LambdaQueryWrapper<User2>().select(User2::getId,User2::getUsername,User2::getPassword).like(User2::getUsername,"a");//2.查询List<User2> user2s = user2Mapper.selectList(wrapper);user2s.forEach(System.out::println);
}

二、自定义SQL

  • 我们可以利用MybatisPlus的Wrapper来构建复杂的where条件,然后自己定义SQL语句中剩下的部分

2.1 基于Wrapper来构建where条件

@Test
void testCustomSqlUpdate() {//更新条件String password = "333";//执行更新QueryWrapper<User2> wrapper = new QueryWrapper<User2>().in("id",2,5,6);//调用自定义方法user2Mapper.updatePwdByIds(wrapper,password);
}

2.2 在mapper>方法参数中用Param注解声明wrapper变量名称,必须是ew

void updatePwdByIds(@Param("ew") QueryWrapper<User2> wrapper,@Param("password") String password);

2.3 自定义SQL,并使用Wrapper条件

@Update("update tb_user2 set password = #{password} ${ew.customSqlSegment}")
void updatePwdByIds(@Param("ew") QueryWrapper<User2> wrapper,@Param("password") String password);

三、Service接口

3.1 Service接口基本用法

  • 自定义Service接口继承IService接口
public interface IUserService extends IService<User2> {
}
  • 自定义Service实现类,实现自定义接口并继承Servicelmpl类
public class UserServiceImpl extends ServiceImpl<User2Mapper,User2> implements IUserService {
}
  • Service新增:
@Test
void testSaveUser() {User2 user = new User2();user.setId(7);user.setUsername("老七");user.setPassword("777");userService.save(user);
}
  • Service查询:
@Test
void testQuery() {List<Integer> ids = new ArrayList<>();ids.add(1);ids.add(3);ids.add(5);List<User2> user2s = userService.listByIds(ids);user2s.forEach(System.out::println);
}

相关文章:

  • Java排序算法之基数排序
  • 物联网AI MicroPython学习之语法 network网络配置模块
  • 2010年数据结构408
  • Realistic fault detection of li-ion battery via dynamical deep learning
  • JimuReport积木报表 v1.6.5 版本发布—免费报表工具
  • AIOT数字孪生智慧工地一体化管理平台源码
  • Vue3 源码解读系列(五)——响应式
  • [Socket]Unix socket 运行权限问题
  • 关于跨域问题的个人理解
  • Vue 3.0 + vite + axios+PHP跨域问题的解决办法
  • 【数据结构】顺序表 | 详细讲解
  • 17. 机器学习——SVM
  • 专业的SRM系统全流程管理服务
  • iText v1.8.1(OCR截图文字识别工具)
  • centralwidget 不能布局
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • 【Linux系统编程】快速查找errno错误码信息
  • Angular Elements 及其运作原理
  • Java 23种设计模式 之单例模式 7种实现方式
  • Java精华积累:初学者都应该搞懂的问题
  • SegmentFault 技术周刊 Vol.27 - Git 学习宝典:程序员走江湖必备
  • 不发不行!Netty集成文字图片聊天室外加TCP/IP软硬件通信
  • 多线程 start 和 run 方法到底有什么区别?
  • 浏览器缓存机制分析
  • 排序算法之--选择排序
  • 前端之Sass/Scss实战笔记
  • 强力优化Rancher k8s中国区的使用体验
  • 使用API自动生成工具优化前端工作流
  • ionic异常记录
  • TPG领衔财团投资轻奢珠宝品牌APM Monaco
  • $redis-setphp_redis Set命令,php操作Redis Set函数介绍
  • (6)添加vue-cookie
  • (C#)Windows Shell 外壳编程系列4 - 上下文菜单(iContextMenu)(二)嵌入菜单和执行命令...
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (java版)排序算法----【冒泡,选择,插入,希尔,快速排序,归并排序,基数排序】超详细~~
  • (ZT) 理解系统底层的概念是多么重要(by趋势科技邹飞)
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (转)c++ std::pair 与 std::make
  • .bat批处理(四):路径相关%cd%和%~dp0的区别
  • .net反编译的九款神器
  • .NET框架
  • .NET中的十进制浮点类型,徐汇区网站设计
  • @AliasFor注解
  • @configuration注解_2w字长文给你讲透了配置类为什么要添加 @Configuration注解
  • @Transactional类内部访问失效原因详解
  • [ Linux ] Linux信号概述 信号的产生
  • [100天算法】-二叉树剪枝(day 48)
  • [AI]ChatGPT4 与 ChatGPT3.5 区别有多大
  • [bzoj1324]Exca王者之剑_最小割
  • [CareerCup] 13.1 Print Last K Lines 打印最后K行
  • [codeforces]Recover the String
  • [EFI]Acer Aspire A515-54g电脑 Hackintosh 黑苹果efi引导文件
  • [iOS开发]事件处理与响应者链
  • [ITIL学习笔记]之事件管理(2)
  • [js高手之路] dom常用API【appendChild,insertBefore,removeChild,replaceChild,cloneNode】详解与应用...