• MybatisPlus学习笔记5:条件构造器(EntityWrapper)


    以上基本的 CRUD 操作,我们仅仅需要继承一个 BaseMapper 即可实现大部分单表 CRUD 操作。
    BaseMapper 提供了多达 17 个方法供使用, 可以极其方便的实现单一、批量、分页等操作,极大的减少开发负担。
    但是mybatis-plus的强大不限于此,请看如下需求该如何处理:
    需求:
    我们需要分页查询 tb_employee 表中,年龄在 18~50 之间性别为男且姓名为 xx 的所有用户,这时候我们该如何实现上述需求呢?
    使用MyBatis : 需要在 SQL 映射文件中编写带条件查询的 SQL,并用PageHelper 插件完成分页. 实现以上一个简单的需求,往往需要我们做很多重复单调的工作。
    使用MP: 依旧不用编写 SQL 语句,MP 提供了功能强大的条件构造器 ------ EntityWrapper。

    接下来就直接看几个案例体会EntityWrapper的使用。

    1、分页查询年龄在18 - 50且gender为0、姓名为tom的用户:

    List<Employee> employees = emplopyeeDao.selectPage(new Page<Employee>(1,3),
         new EntityWrapper<Employee>()
            .between("age",18,50)
            .eq("gender",0)
            .eq("last_name","tom")
    );
    

    由此案例可知,分页查询和之前一样,new 一个page对象传入分页信息即可。
    至于分页条件,new 一个EntityWrapper对象,调用该对象的相关方法即可。
    between方法三个参数,分别是column、value1、value2,该方法表示column的值要在value1和value2之间;
    eq是equals的简写,该方法两个参数,column和value,表示column的值和value要相等。
    注意column是数据表对应的字段,而非实体类属性字段。

    2、查询gender为0且名字中带有老师、或者邮箱中带有a的用户:

    		// 查询tbl_employee表中, 性别为女并且名字中带有"老师" 或者  邮箱中带有"a"
    		
    		List<Employee> emps = employeeMapper.selectList(
    				new EntityWrapper<Employee>()
    				.eq("gender", 0)
    				.like("last_name", "老师")
    				//.or()    // SQL: (gender = ? AND last_name LIKE ? OR email LIKE ?)    
    				.orNew()   // SQL: (gender = ? AND last_name LIKE ?) OR (email LIKE ?) 
    				.like("email", "a")
    				);
    		System.out.println(emps);
    

    未说分页查询,所以用selectList即可,
    用EntityWrapper的like方法进行模糊查询,
    like方法就是指column的值包含value值,此处like方法就是查询last_name中包含“老师”字样的记录;
    “或者”用or或者orNew方法表示,这两个方法区别不大,用哪个都可以,可以通过控制台的sql语句自行感受其区别。

    3、查询gender为0,根据age排序,简单分页:

    	// 查询性别为女的, 根据age进行排序(asc/desc), 简单分页
    		
    List<Employee> emps  = employeeMapper.selectList(
    		new EntityWrapper<Employee>()
    		.eq("gender", 0)
    		.orderBy("age")
    		//.orderDesc(Arrays.asList(new String [] {"age"}))
    		.last("desc limit 1,3")
    		);
    System.out.println(emps);
    		
    

    简单分页是指不用page对象进行分页。
    orderBy方法就是根据传入的column进行升序排序,若要降序,可以使用orderByDesc方法,也可以如案例中所示用last方法;
    last方法就是将last方法里面的value值追加到sql语句的后面,在该案例中,
    最后的sql语句就变为select ······ order by desc limit 1, 3,追加了desc limit 1,3所以可以进行降序排序和分页。

    4、分页查询年龄在18 - 50且gender为0、姓名为tom的用户:

    List<Employee > emps = employeeMapper.selectPage(
    						new Page<Employee>(1,2), 
    						Condition.create()
    						.between("age", 18, 50)
    						.eq("gender", "1")
    						.eq("last_name", "Tom")
    							
    						);
    		
    System.out.println(emps);	
    

    Condition和EntityWrapper的区别就是,创建条件构造器时,EntityWrapper是new出来的,而Condition是调create方法创建出来。

    5、根据条件更新:

    /**
    	 * 条件构造器  修改操作
    	 */
    @Test
    public void testEntityWrapperUpdate() {
    		
    	Employee employee = new Employee();
    	employee.setLastName("苍老师");
    	employee.setEmail("cls@sina.com");
    	employee.setGender(0);
    		
    		
    	employeeMapper.update(employee, 
    				new EntityWrapper<Employee>()
    				.eq("last_name", "Tom")
    				.eq("age", 44)
    				);
    	}
    

    6、根据条件删除:

    /**
    * 条件构造器  删除操作
    */
    @Test
    public void testEntityWrapperDelete() {
    		
    	employeeMapper.delete(
    				new EntityWrapper<Employee>()
    				.eq("last_name", "Tom")
    				.eq("age", 22)
    				);
    	}
    	
    
  • 相关阅读:
    KMP 算法 C++
    java RTTI笔记 之Class学习笔记(摘自java编程思想)
    java sql
    event
    mysql 编写存储过程
    《淘宝技术这十年》重读笔记
    关于“产品”的笔记
    程序员,当你遇到一个“坑”
    C盘清理大作战
    android开发笔记
  • 原文地址:https://www.cnblogs.com/xidianzxm/p/12512521.html
Copyright © 2020-2023  润新知