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


🐌个人主页: 🐌 叶落闲庭

💨我的专栏:💨
c语言
数据结构
javaEE
操作系统
Redis

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


MybatisPlus

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

java 复制代码
 @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修改

java 复制代码
@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修改

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

1.4 基于LambdaQueryWrapper查询

java 复制代码
@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条件

java 复制代码
@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

java 复制代码
void updatePwdByIds(@Param("ew") QueryWrapper<User2> wrapper,@Param("password") String password);

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

java 复制代码
@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接口
java 复制代码
public interface IUserService extends IService<User2> {
}
  • 自定义Service实现类,实现自定义接口并继承Servicelmpl类
java 复制代码
public class UserServiceImpl extends ServiceImpl<User2Mapper,User2> implements IUserService {
}
  • Service新增:
java 复制代码
@Test
void testSaveUser() {
    User2 user = new User2();
    user.setId(7);
    user.setUsername("老七");
    user.setPassword("777");
    userService.save(user);
}
  • Service查询:
java 复制代码
@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);
}
相关推荐
阿里云大数据AI技术24 分钟前
Hologres AI Function 文本分类实战:从提示词设计到 KV-Cache 调优,全程 SQL 搞定
人工智能·sql
白帽小丑1 小时前
# 一次 MySQL DELETE 误操作的数据恢复尝试实录
数据库·mysql
Quincy_Freak3 小时前
信创内网数据规范实践:银河麒麟下SQLite本地数据安全管理方案
数据库·sqlite·arm·数据库管理·大数据分析·银河麒麟·aarch64
2601_962683895 小时前
治理遗留系统中的“生肉 SQL”:一次用多模型协作优化慢查询的实战复盘
数据库·人工智能·sql
酱学编程6 小时前
【从零到一实现一个 AI Agent 框架 · 第四篇】04. 任务规划:拆解复杂目标 -
服务器·网络·数据库·人工智能
shushangyun_7 小时前
2026智能采购商城系统选型指南:如何引领企业数字化采购升级
java·大数据·数据库·人工智能·机器学习
dexi.Chi 攻城狮7 小时前
SQL层次查询语法
经验分享·笔记·sql
华山令狐虫8 小时前
DBAPI AI 写 SQL:支持动态 SQL 与参数占位符,自然语言一键生成
数据库·人工智能·sql·dbapi
IvorySQL8 小时前
PG 技术日报|2026-07-04
数据库·人工智能·postgresql·开源
Hoxy.R8 小时前
KingbaseES读写分离高可用集群扩容、备库重建与故障切换实战
运维·数据库