浅谈MyBatis-Plus学习之条件构造器 EntityWrapper

时间:2022-09-20 18:25:37

一、EntityWrapper介绍

在实际的开发过程中更多的是带有复杂条件的SQL操作,而不是简单的增删改查。而在这方面MP也提供了条件构造器EntityWrapper(简称EW)来让开发者*构建SQL操作条件。

注意:条件封装属性,使用的是数据库字段,而不是Java实体属性!

以下列出的是MybatisPlus提供的条件参数:

浅谈MyBatis-Plus学习之条件构造器 EntityWrapper

二、以下是EntityWrapper的使用例子

 

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations= {"classpath:applicationContext.xml"})
public class TestEntityWrapper {
    @Autowired
    private EmployeeMapper employeeMapper;
    
    @Test
    public void testEntityWrapperSelectPage() {
        //需要分页查询 tbl_employee 表中,年龄在 18~50 之间性别为男且姓名为 xx 的所有用户
        List<Employee> emps = employeeMapper.selectPage(new Page<Employee>(1, 2), 
                                  new EntityWrapper<Employee>()
                                  .between("age", 18, 50)
                                  .eq("gender", 0)
                                  .eq("last_name", "jack"));
        System.out.println(emps);
        
    }
    
    @Test
    public void testEntityWrapperSelectList() {
        //需要查询 tbl_employee 表中, 性别为男且姓名中带有“J”的 或者 邮箱中带有“a”的所有用户
        List<Employee> emps = employeeMapper.selectList(new EntityWrapper<Employee>()
                                  .eq("gender", 1)
                                  .like("last_name", "j")
                                  //.or()  //WHERE (gender = ? AND last_name LIKE ? OR email LIKE ?)
                                  .orNew() //WHERE (gender = ? AND last_name LIKE ?) OR (email LIKE ?)
                                  .like("email", "a"));
        System.out.println(emps);
    }
    
    /**
     * 条件构造器  修改操作
     */
    @Test
    public void testEntityWrapperUpdate() {
        //修改tbl_employee 表中, 年龄为25且姓名为“jack”的用户
        //将修改的结果封装成对象
        Employee entity = new Employee();
        entity.setLastName("Lucy");
        entity.setEmail("[email protected]");
        Integer res = employeeMapper.update(entity,    //UPDATE tbl_employjee SET last_name=?, email=? WHERE (age = ? AND last_name = ?) 
                       new EntityWrapper<Employee>()
                              .eq("age", 25)
                              .eq("last_name", "jack")
                       );
        System.out.println("res: "   res);
    }
    
    /**
     * 条件构造器  删除操作
     */
    @Test
    public void testEntityWrapperDelete() {
        //删除名字有“o”且性别为女的用户
        employeeMapper.delete(new EntityWrapper<Employee>()  //WHERE (last_name LIKE ? AND gender = ?) 
                              .like("last_name", "o")
                              .eq("gender", 0)
                               );
    }
    
    /**
     * 条件构造器,排序操作
     */
    @Test
    public void testEntityWrapperSort() {
        //查询为女的,根据age进行排序(asc/desc),简单排序
        List<Employee> page = employeeMapper.selectPage(new Page<Employee>(1, 2), 
                                  new EntityWrapper<Employee>()  // WHERE (gender = ?) ORDER BY age ASC
                                  .eq("gender", 0)
                                  //.orderAsc(Arrays.asList(new String[] {"age"})));
                                  .orderBy("age")  // WHERE (gender = ?) ORDER BY age Desc
                                  .last("Desc") //手动拼接SQL,有注入危险  
                                  ); 
        System.out.println(page);
    }
    
    /**
     * Condiction的使用
     */
    @Test
    public void testConditionSelectPage() {
        //需要分页查询 tbl_employee 表中,年龄在 18~50 之间性别为男且姓名为 xx 的所有用户
        List<Employee> page = employeeMapper.selectPage(new Page<Employee>(1, 2), 
                                  Condition.create()
                                  .between("age", 18, 50)
                                  .eq("gender", 1)
                                  .eq("last_name", "jack")
                                  );
        System.out.println(page);
        
    }
}