在使用 Example.Criteria
进行查询时,你可能会遇到需要根据多种情况来构建查询条件的情形。Example.Criteria
是 MyBatis 框架中用于动态构建查询条件的工具,特别适用于需要根据不同的业务逻辑组合不同查询条件的情况。下面是一些常见的用例和如何使用 Example.Criteria
来处理这些情况的例子。
1. 基础使用
假设我们有一个 User
实体类,现在要基于用户名或者邮箱地址进行查询。
Example example = new Example(User.class);
Example.Criteria criteria = example.createCriteria();
criteria.andLike("username", "%john%").orLike("email", "%john.doe@example.com%");
List<User> users = userMapper.selectByExample(example);
这里,我们创建了一个 Example
对象,并通过 createCriteria()
方法创建了 Criteria
对象。然后,我们添加了两个查询条件:一个是用户名包含 “john” 的记录,另一个是电子邮件地址包含特定字符串的记录。这两个条件之间使用 or
关系连接。
2. 使用 AND 和 OR 组合条件
如果需要更加复杂的逻辑组合,比如同时满足几个条件(AND)或至少满足其中一个条件(OR),可以通过链式调用来实现。
Example example = new Example(User.class);
Example.Criteria criteria = example.createCriteria();
// 查找所有激活用户且用户名为'john' 或 邮箱以'@example.com'结尾的用户
criteria.andEqualTo("status", "active")
.and(or -> or.andLike("username", "john")
.orLike("email", "%@example.com"));
List<User> users = userMapper.selectByExample(example);
在这个例子中,首先定义了状态必须是激活(andEqualTo("status", "active")
),接着通过一个匿名函数定义了更进一步的条件:用户名是’john’或者是邮箱以’@example.com’结尾。注意这里的.and(or -> ...)
结构允许你在现有的AND
条件下嵌套更多的OR
条件。
3. 多个 Criteria
有时可能需要完全独立的多个条件集,这时可以使用 or()
方法添加新的 Criteria
:
Example example = new Example(User.class);
Example.Criteria criteria = example.createCriteria()
.andEqualTo("status", "active");
example.or(example.createCriteria()
.andLike("username", "john"))
.or(example.createCriteria()
.andLike("email", "%@example.com"));
List<User> users = userMapper.selectByExample(example);
此示例展示了如何利用 or()
方法将多个不相关的条件集合并起来执行查询。
以上就是一些关于如何使用 Example.Criteria
来构建多样化查询条件的基本指导。根据你的具体需求调整上述代码片段即可适应更多复杂场景。