mybatis createcriteria和or的区别

本文解析了MyBatis Generator插件中createcriteria与or方法的区别。createcriteria用于在无已有规则时创建新规则;而or则始终创建新规则并以逻辑或的方式添加到规则集合中。

mybatis generator插件生成的example中,有createcriteria和or方法,他们有什么区别呢?
通过源码,能很清楚的看出差别。

createcriteria,当没有规则时,则加入到现有规则,但有规则时,不再加入到现有规则,只是返回创建的规则

public Criteria createCriteria() {
        Criteria criteria = createCriteriaInternal();
        if (oredCriteria.size() == 0) {
            oredCriteria.add(criteria);
        }
        return criteria;
}

or,创建的规则,加入到规则集中,并且是or的关系。

public Criteria or() {
    Criteria criteria = createCriteriaInternal();
    oredCriteria.add(criteria);
    return criteria;
}
### MyBatis Example 中使用 `or` 方法进行查询 在 MyBatis 的动态 SQL 查询中,可以通过 `org.apache.ibatis.session.SqlSession` `Example` 类来构建复杂的查询条件。其中,`Criteria` 是用于定义查询条件的核心类之一,支持多种逻辑运算符,包括 `and` `or`。 #### 使用 `or` 方法的语法说明 当需要组合多个条件并以逻辑 OR 关系连接时,可以调用 `criteria.or()` 来创建一个新的子条件组[^1]。以下是具体的方法描述: - 调用 `example.createCriteria().or()` 可以为当前 Criteria 对象添加新的 OR 子句。 - 每次调用 `or()` 后,都会返回一个新的 Criteria 实例,因此可以在该实例上继续设置其他条件。 #### 示例代码 下面是一个完整的示例,展示如何在 MyBatis Example 中使用 `or` 构建查询条件: ```java import org.apache.ibatis.session.SqlSession; import com.example.mapper.UserMapper; import com.example.model.User; import com.example.model.UserExample; public class MyBatisOrQueryExample { public static void main(String[] args) { try (SqlSession session = SqlSessionFactory.openSession()) { UserMapper mapper = session.getMapper(UserMapper.class); // 创建 Example 对象 UserExample example = new UserExample(); // 开始构建第一个 AND 条件 UserExample.Criteria criteria = example.createCriteria(); criteria.andUsernameLike("John%"); // 姓名以 John 开头 // 添加 OR 条件 UserExample.Criteria orCriteria = example.or(); // 新增一组 OR 条件 orCriteria.andEmailEqualTo("test@example.com"); // 邮箱等于 test@example.com // 执行查询 List<User> users = mapper.selectByExample(example); // 输出结果 for (User user : users) { System.out.println(user.getUsername() + " - " + user.getEmail()); } } catch (Exception e) { e.printStackTrace(); } } } ``` 上述代码展示了如何通过 `createCriteria()` 初始化一个标准条件,并通过 `or()` 方法新增另一组 OR 条件。 --- #### 注意事项 1. **多层嵌套**:如果需要更复杂的关系(如 `(A and B) or C`),则需合理利用括号分组的概念,在实际开发中可能涉及多次调用 `or()` 或者手动编写 XML 映射文件。 2. **性能优化**:对于大规模数据表,过多的 OR 条件可能导致索引失效,建议评估查询计划并适当调整设计[^3]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值