在 MyBatis 框架中,Example 是一个由 MyBatis Generator(代码生成工具)自动创建的类,用于动态构建 SQL 查询中的 WHERE 子句。它通过封装查询条件,避免了手动拼接 SQL 的繁琐,提升代码可读性和可维护性。以下是其核心要点:
一、Example 的核心作用
-
动态条件封装
Example类将查询条件(如等于、大于、模糊匹配等)封装为对象,开发者通过链式调用方法组合条件,无需手写WHERE语句。-
例如:
UserExample example = new UserExample(); example.createCriteria() .andUsernameEqualTo("admin") // username = 'admin' .andAgeGreaterThan(20); // AND age > 20
生成的 SQL:
WHERE username = 'admin' AND age > 20。 -
-
支持复杂逻辑组合
- 组内条件:默认用
AND连接(如criteria.andXxx().andYyy())。 - 组间条件:通过
oredCriteria属性支持多组OR关系(见下文详解)。
- 组内条件:默认用
二、Example 的核心结构✨
-
Criteria类- 是
Example的内部类,用于定义一组条件(组内条件默认为AND连接)。 - 通过
andXxx()方法添加具体条件(如andUsernameEqualTo())。
- 是
-
oredCriteria属性-
类型为
List<Criteria>,存储多个条件组。 -
组间关系为
OR,例如:Criteria group1 = example.createCriteria(); // 第一组:id IN (1,2) group1.andIdIn(Arrays.asList(1, 2)); Criteria group2 = example.createCriteria(); // 第二组:name LIKE 'A%' group2.andNameLike("A%"); // 最终 SQL: WHERE (id IN (1,2)) OR (name LIKE 'A%')此处 oredCriteria包含 group1 和 group2。
-
-
关键方法
createCriteria():创建新条件组并添加到oredCriteria。or(Criteria criteria):显式添加条件组(推荐使用)。
三、Example 的典型用法
-
基础查询
UserExample example = new UserExample(); example.createCriteria() .andEmailLike("%@gmail.com") // 邮箱含 "@gmail.com" .andStatusEqualTo(1); // 状态为激活 List<User> users = userMapper.selectByExample(example); -
多组
OR条件UserExample example = new UserExample(); // 第一组:手机号以 138 开头 Criteria criteria1 = example.createCriteria(); criteria1.andPhoneLike("138%"); // 第二组:注册时间在 2025 年后 Criteria criteria2 = example.createCriteria(); criteria2.andCreateTimeGreaterThan("2025-01-01"); // 组合条件:(phone LIKE '138%') OR (create_time > '2025-01-01') List<User> users = userMapper.selectByExample(example); -
排序与去重
example.setOrderByClause("create_time DESC"); // 按创建时间降序 example.setDistinct(true); // 去重查询
四、Example 的优缺点
✅ 优点:
- 代码简洁:避免 SQL 字符串拼接错误。
- 类型安全:方法名强制匹配字段(如
andAgeGreaterThan()要求参数为数字)。 - 动态灵活:支持条件动态增减。
❌ 局限性:
- 仅限单表查询:多表关联需手写 SQL。
- 生成类臃肿:表字段多时
Example类体积较大。
五、设计思想解析
Example 的本质是 “条件对象化”:
- 将 SQL 的
WHERE子句拆解为Criteria对象(组内条件)和oredCriteria(组间关系)。 - 通过方法名(如
andXxx())隐式定义运算符(=,>,LIKE等),实现语义化编程。
总结
Example 是 MyBatis 动态查询的“构造器”,核心价值在于:
- 用
Criteria封装组内AND条件。 - 用
oredCriteria管理组间OR逻辑。 - 通过方法链取代 SQL 拼接,提升开发效率。
适合单表复杂条件查询,但多表关联仍需结合 XML 或注解 SQL。合理使用可显著减少冗余代码,增强可读性。
2137

被折叠的 条评论
为什么被折叠?



