接下来我将为大家详细讲解Mybatis-Plus中and()和or()的使用与原理。
1. and()的使用
1.1 and()的介绍
在Mybatis-Plus中,and()方法用于构建AND条件查询,可以根据需要传入一个或多个参数。使用and()方法,我们可以方便的组合多个查询条件。
1.2 and()示例
下面是一个使用and()方法的示例。假设我们有一个学生表(student
),我们想要根据学生的学号和姓名查询学生信息。代码如下:
QueryWrapper<Student> queryWrapper = new QueryWrapper<>();
queryWrapper.and(i -> i.eq("student_no", "2021001")).and(i -> i.eq("student_name", "张三"));
List<Student> students = studentService.list(queryWrapper);
上面的代码中,我们使用了QueryWrapper对象的and()方法,分别传入了两个Lambda表达式,代表两个查询条件。在第一个Lambda表达式中,我们调用了eq()方法,并传入两个参数,代表学号等于2021001;在第二个Lambda表达式中,我们调用了eq()方法,并传入两个参数,代表姓名等于张三。最后,我们调用了service层的list()方法执行查询,并将结果存入students中。
2. or()的使用
2.1 or()的介绍
在Mybatis-Plus中,or()方法用于构建OR条件查询,同样可以传入一个或多个参数。使用or()方法,我们可以方便的组合多个查询条件。
2.2 or()示例
下面是一个使用or()方法的示例。假设我们有一个学生表(student
),我们想要根据学生的学号或姓名查询学生信息。代码如下:
QueryWrapper<Student> queryWrapper = new QueryWrapper<>();
queryWrapper.or(i -> i.eq("student_no", "2021001")).or(i -> i.eq("student_name", "张三"));
List<Student> students = studentService.list(queryWrapper);
同样是使用QueryWrapper对象,我们这里使用了or()方法,分别传入了两个Lambda表达式,代表两个查询条件。在第一个Lambda表达式中,我们调用了eq()方法,并传入两个参数,代表学号等于2021001;在第二个Lambda表达式中,我们调用了eq()方法,并传入两个参数,代表姓名等于张三。最后,我们同样调用了service层的list()方法执行查询,并将结果存入students中。
3. 原理详解
Mybatis-Plus在底层使用了AbstractWrapper类来实现and()和or()方法。当我们调用and()方法时,Mybatis-Plus实际上会新建一个AbstractWrapper对象,然后将多个查询条件添加到AbstractWrapper对象中,最后返回AbstractWrapper对象。当我们调用or()方法时,同样是新建一个AbstractWrapper对象,但是它会将多个查询条件添加到另一个集合中,并将该集合添加到AbstractWrapper对象中,最后返回AbstractWrapper对象。这样,我们就可以灵活的组合多个查询条件。
总之,Mybatis-Plus中and()和or()方法的使用非常方便,通过组合多个查询条件,我们可以构建出复杂的查询语句。同时,在底层实现中,Mybatis-Plus通过AbstractWrapper类将多个查询条件组合起来,并最终生成SQL语句。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Mybatis-Plus中and()和or()的使用与原理详解 - Python技术站