这是我参与11月更文挑战的第4天,活动详情查看:2021最后一次更文挑战
我们上一篇说完了利用MyBatiesPlus对数据库的基本操作,,这一篇就简述了比较复杂带有条件的操作。
要介绍的就是我们的条件构造器,Mybatis-Plus 通过 EntityWrapper(简称 EW,MP 封装的一个查询条件构造器)或者 Condition(与 EW 类似) 来让用户自由的构建查询条件,简单便捷,没有额外的负担, 能够有效提高开发效率。实体包装器,主要用于处理 sql 拼接,排序,实体参数查询等。
!!!使用的是数据库字段,不是 Java 属性!!!
我们通过几个需求来演示我们的条件构造器
范围查找
我们需要分页查询 tbl_employee 表中,年龄在 18~50 之间性别为男且姓名为 xx 的所有用户
@Test
public void demo10(){
List<Employee> employees = employeeMapper.selectPage(new Page<Employee>(1, 2),
new EntityWrapper<Employee>()
.between("age", 18, 50)
.eq("gender", 1)
.eq("name", "Tom"));
System.out.println(employees);
}
先使用分页查询函数,在参数中创建EntityWrapper,注意我们需要指定泛型,在利用between函数查找值;
在源码中他还是将Wrapper返回,所以我们可以继续使用。
模糊查询
查询性别为女并且名字中带有“老师”或者邮箱中带有“a”
使用方法和范围查找差不多
@Test
public void dome11(){
List<Employee> employees = employeeMapper.selectList(
new EntityWrapper<Employee>()
.eq("gender", 0)
.like("name", "老师")
//.or()
.orNew()
.like("email", "a")
);
System.out.println(employees);
}
这时候我们看到了我们在代码中间使用了两种或者,在这个需求中他们两个函数没有多少区别,我们通过查看日志中SQL语句分析他们两个的不同
or() ==>>SELECT id AS id,`name`,email,gender,age FROM tbl_employee WHERE (gender = ? AND name LIKE ? OR email LIKE ?)
orNew() ==>>SELECT id AS id,`name`,email,gender,age FROM tbl_employee WHERE (gender = ? AND name LIKE ?) OR (email LIKE ?)
通过观察我们发现他们就是其中括号的区别,在后续更复杂的需求我们会使用
条件修改
将我们修改数值封装成对象,再用条件构造器去查找
@Test
public void demo12(){
Employee employee=new Employee();
employee.setName("小明");
employee.setEmail("小明@测试邮箱");
employee.setGender(1);
employeeMapper.update(employee,
new EntityWrapper<Employee>()
.eq("name","Tom")
.eq("age",22)
);
}
条件删除
其实我们写,大家也应知道咋用了
@Test
public void demo13(){
employeeMapper.delete(
new EntityWrapper<Employee>()
.eq("name","Tom")
.eq("age",22)
);
}
Condition
我们使用EntityWrapper时,我们需要创建对象之后才能去使用,但是我们如果使用Condition,我们就可以直接去调用方法,因为他给我们提供了一个静态方法(单例模式)
@Test
public void demo14(){
employeeMapper.delete(
Condition.create()
.eq("name","Tom")
.eq("age",22)
);
}