美文网首页
Mybatis Example 对象

Mybatis Example 对象

作者: hemiao3000 | 来源:发表于2023-03-28 08:29 被阅读0次

    Example 对象是一种简化条件查询的方案。通过它,你避免去编写大量的 DAO 中的 selectByXxx() 方法。

    在对单表进行条件查询时,Example 对象非常好用,但是对于「多表关联查询,且查询条件分散在多表中的情况」Example 对象就无能为力了。这种情况下,在不引入新的方案的前提下,则需要使用之前的「注解」功能,由程序员自己编码 SQL 语句了。

    简单的情况

    这里的简单情况指的是:没有,或只有 and 关系:

    EmployeeExample example = new EmployeeExample();
    
    example.createCriteria()
        .andEmpnoEqualTo(7369)
        .andSalGreaterThanOrEqualTo(1500)
        .andSalLessThan(2000);
    
    List<Employee> list = dao.selectByExample(example);
    System.out.println(list.size());
    

    or() 方法是一个更通用的形式,可以用于实现任意的查询条件。其原理在于,任何一个复杂的查询语句,总能写成如下形式:

    where (... and ... and ...) or (... and ... and ...) or (...)
    

    复杂的情况

    这里的复杂情况指的是:有 or 关系,甚至是 andor 混用。

    TestTableExample example = new TestTableExample();
    
    // 第 1 个括号中的两个并列条件
    example.or()
        .andAaaEqualTo(5)
        .andBbbIsNull();
    
    // 第 2 个括号中的两个并列条件
    example.or()
        .andCccNotEqualTo(9)
        .andDddIsNotNull();
    
    // 第 3 个括号中的唯一的条件
    List<Integer> list = new ArrayList<Integer>();
    list.add(8);
    list.add(11);
    list.add(14);
    list.add(22);
    example.or()
        .andEeeIn(field5Values);
    
    // 第 4 个括号中的唯一的条件
    example.or()
        .andFffBetween(3, 7);
    

    相当于

    where (aaa = 5 and bbb is null)
         or (ccc != 9 and ddd is not null)
         or (eee in (8, 11, 14, 22))
         or (fff between 3 and 7);
    

    相关文章

      网友评论

          本文标题:Mybatis Example 对象

          本文链接:https://www.haomeiwen.com/subject/vzutddtx.html