文章目录
- 1. 引言
- 2. Mybatis-Plus简介
- 3. QueryWrapper
- 3.1 基本用法
- 3.2 动态条件拼接
- 3.3 Lambda表达式的高级用法
- 4. UpdateWrapper
- 4.1 基本用法
- 4.2 动态条件拼接
- 4.3 Lambda表达式的高级用法
- 5. 拓展功能与未来展望
- 5.1 动态SQL的使用
- 5.2 自定义条件构造器
- 6. 总结

🎉欢迎来到架构设计专栏~Mybatis-Plus的条件构造器QueryWrapper & UpdateWrapper详解
- ☆* o(≧▽≦)o *☆嗨~我是IT·陈寒🍹
- ✨博客主页:IT·陈寒的博客
- 🎈该系列文章专栏:架构设计
- 📜其他专栏:Java学习路线 Java面试技巧 Java实战项目 AIGC人工智能 数据结构学习
- 🍹文章作者技术和水平有限,如果文中出现错误,希望大家能指正🙏
- 📜 欢迎大家关注! ❤️
1. 引言
在数据库操作中,条件查询和条件更新是非常常见的需求。为了简化代码,Mybatis-Plus提供了强大的条件构造器——QueryWrapper
和UpdateWrapper
。本文将深入探讨这两个条件构造器的使用方法,并通过示例代码帮助读者更好地理解和应用。
2. Mybatis-Plus简介
Mybatis-Plus 是基于Mybatis的一个增强工具库,旨在简化开发,提高效率。它提供了丰富的功能,包括代码生成器、性能优化、条件构造器等。其中,条件构造器是Mybatis-Plus中的一个核心功能,用于构建灵活的查询和更新条件。
3. QueryWrapper
3.1 基本用法
QueryWrapper
用于构建查询条件,可以通过链式调用的方式组装各种查询条件。
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;public class QueryWrapperExample {public static void main(String[] args) {QueryWrapper<User> queryWrapper = new QueryWrapper<>();// 等值条件queryWrapper.eq("name", "John");// 不等值条件queryWrapper.ne("age", 25);// 大于条件queryWrapper.gt("create_time", "2022-01-01");// 小于等于条件queryWrapper.le("update_time", "2023-01-01");// 模糊查询queryWrapper.like("email", "@gmail.com");// 排序queryWrapper.orderByAsc("age");// 使用Lambda表达式queryWrapper.lambda().eq(User::getName, "Alice");// 打印SQL语句System.out.println("SQL: " + queryWrapper.getSqlSelect());}
}
上述代码演示了QueryWrapper
的基本用法,通过不同的方法添加等值、不等值、范围、模糊等查询条件,同时支持Lambda表达式。
3.2 动态条件拼接
在实际应用中,我们经常需要根据不同条件的存在与否来动态构建查询条件。QueryWrapper
提供了一系列的条件拼接方法,例如and
、or
、nested
等。
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;public class DynamicQueryWrapperExample {public static void main(String[] args) {QueryWrapper<User> queryWrapper = new QueryWrapper<>();// 动态条件拼接queryWrapper.and(wrapper -> wrapper.eq("name", "John").ne("age", 25)).or(wrapper -> wrapper.gt("create_time", "2022-01-01").le("update_time", "2023-01-01"));// 打印SQL语句System.out.println("SQL: " + queryWrapper.getSqlSelect());}
}
在上述代码中,通过and
和or
方法,我们可以根据需要动态拼接查询条件,使得代码更加灵活。
3.3 Lambda表达式的高级用法
QueryWrapper
支持Lambda表达式,可以进一步简化代码,提高可读性。
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;public class LambdaQueryWrapperExample {public static void main(String[] args) {QueryWrapper<User> queryWrapper = new QueryWrapper<>();// Lambda表达式queryWrapper.lambda().eq(User::getName, "John").ne(User::getAge, 25).like(User::getEmail, "@gmail.com");// 打印SQL语句System.out.println("SQL: " + queryWrapper.getSqlSelect());}
}
通过lambda
方法,我们可以使用实体类的属性名而不是字符串,使得代码更加健壮和易维护。
4. UpdateWrapper
UpdateWrapper
用于构建更新条件,与QueryWrapper
类似,也支持链式调用和Lambda表达式。
4.1 基本用法
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;public class UpdateWrapperExample {public static void main(String[] args){UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();// 等值条件updateWrapper.eq("name", "John");// 不等值条件updateWrapper.ne("age", 25);// 大于条件updateWrapper.gt("create_time", "2022-01-01");// 小于等于条件updateWrapper.le("update_time", "2023-01-01");// 模糊查询updateWrapper.like("email", "@gmail.com");// 使用Lambda表达式updateWrapper.lambda().set(User::getName, "Alice").eq(User::getAge, 30);// 打印SQL语句System.out.println("SQL: " + updateWrapper.getSqlSet());}
}
UpdateWrapper
的基本用法与QueryWrapper
类似,可以通过链式调用添加等值、不等值、范围、模糊等更新条件。
4.2 动态条件拼接
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;public class DynamicUpdateWrapperExample {public static void main(String[] args) {UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();// 动态条件拼接updateWrapper.and(wrapper -> wrapper.eq("name", "John").ne("age", 25)).or(wrapper -> wrapper.gt("create_time", "2022-01-01").le("update_time", "2023-01-01"));// 打印SQL语句System.out.println("SQL: " + updateWrapper.getSqlSet());}
}
通过and
和or
方法,我们可以动态拼接更新条件,更好地适应各种业务场景。
4.3 Lambda表达式的高级用法
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;public class LambdaUpdateWrapperExample {public static void main(String[] args) {UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();// Lambda表达式updateWrapper.lambda().set(User::getName, "Alice").eq(User::getAge, 30).like(User::getEmail, "@gmail.com");// 打印SQL语句System.out.println("SQL: " + updateWrapper.getSqlSet());}
}
通过lambda
方法,我们可以使用实体类的属性名,使得代码更加简洁和可读。
5. 拓展功能与未来展望
5.1 动态SQL的使用
QueryWrapper
和UpdateWrapper
提供了丰富的条件构造方法,但对于一些特定、复杂的业务场景,可能需要使用动态SQL。Mybatis-Plus也支持动态SQL的编写,可以通过@SqlParser
注解来实现。
@SqlParser(filter = true)
public interface UserMapper extends BaseMapper<User> {@Select("<script> SELECT * FROM user WHERE 1=1 "+ "<if test=\"name != null\"> AND name = #{name} </if>"+ "<if test=\"age != null\"> AND age = #{age} </if>"+ "</script>")List<User> selectUsers(@Param("name") String name, @Param("age") Integer age);
}
5.2 自定义条件构造器
在某些场景下,可能需要根据具体业务需求自定义条件构造器。Mybatis-Plus提供了AbstractWrapper
类,开发者可以继承并实现自己的条件构造器。
import com.baomidou.mybatisplus.core.conditions.AbstractWrapper;public class CustomWrapper<T> extends AbstractWrapper<T, CustomWrapper<T>> {public CustomWrapper() {super();}// 自定义条件构造方法public CustomWrapper<T> customCondition(String condition) {sql.WHERE(condition);return this;}
}
6. 总结
Mybatis-Plus的条件构造器QueryWrapper
和UpdateWrapper
为开发者提供了强大、灵活的条件构建工具,能够大大简化数据库操作的代码。通过本文的介绍,读者可以更加深入地理解这两个条件构造器的使用方法,并在实际项目中灵活应用。在未来,随着Mybatis-Plus的不断更新和完善,我们可以期待更多更强大的功能和特性的加入。希望本文能够帮助开发者更好地利用Mybatis-Plus进行数据库操作,提高开发效率。
🧸结尾 ❤️ 感谢您的支持和鼓励! 😊🙏
📜您可能感兴趣的内容:
- 【Java面试技巧】Java面试八股文 - 掌握面试必备知识(目录篇)
- 【Java学习路线】2023年完整版Java学习路线图
- 【AIGC人工智能】Chat GPT是什么,初学者怎么使用Chat GPT,需要注意些什么
- 【Java实战项目】SpringBoot+SSM实战:打造高效便捷的企业级Java外卖订购系统
- 【数据结构学习】从零起步:学习数据结构的完整路径