MyBatisPlus系列之条件构造器 EntityWrapper

上篇:MyBatisPlus系列之通用CRUD操作

一、条件构造器 EntityWrapper

1、EntityWrapper简介

(1)Mybatis-Plus 通过 EntityWrapper(简称 EW,MP 封装的一个查询条件构造器)或者 Condition(与EW类似) 来让用户自由的构建查询条件,简单便捷,没有额外的负担,能够有效提高开发效率 

(2)实体包装器,主要用于处理 sql 拼接,排序,实体参数查询等 

(3)注意: 使用的是数据库字段,不是Java属性! 

(4)条件参数说明:

 本节,我们采用EntityWrapper,“ctrl+n”搜索查看它是继承Wrapper,如代码所示:

public class EntityWrapper<T> extends Wrapper<T> {

    /**
     * 数据库表映射实体类
     */
    protected T entity = null;

    public EntityWrapper() {
        /* 注意,传入查询参数 */
    }

    public EntityWrapper(T entity) {
        this.entity = entity;
    }

    public EntityWrapper(T entity, String sqlSelect) {
        this.entity = entity;
        this.sqlSelect = sqlSelect;
    }

    @Override
    public T getEntity() {
        return entity;
    }

    public void setEntity(T entity) {
        this.entity = entity;
    }

    /**
     * SQL 片段
     */
    @Override
    public String getSqlSegment() {
        /*
         * 无条件
		 */
        String sqlWhere = sql.toString();
        if (StringUtils.isEmpty(sqlWhere)) {
            return null;
        }

        /*
         * 根据当前实体判断是否需要将WHERE替换成 AND 增加实体不为空但所有属性为空的情况
		 */
        return isWhere != null ? (isWhere ? sqlWhere : sqlWhere.replaceFirst("WHERE", AND_OR)) : sqlWhere.replaceFirst("WHERE", AND_OR);
    }

 而在Wrapper里面,它是封装的有几个方法

2、需求

(1)条件构造器采用selectPage方法 ,查询分页操作

比如:年龄在18~50之间且性别为男且姓名为Tom的所有用户

代码实现:

	/**
	 * 条件构造器   查询操作
	 */
	@Test
	public void testEntityWrapperSelect() {
		//我们需要分页查询tbl_employee表中,年龄在18~50之间且性别为男且姓名为Tom的所有用户

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


		}

打印输出:

 数据库的信息:

(2)条件构造器采用selectList方法 查询

比如:性别为女并且名字中带有"老师" 或者  邮箱中带有"a",代码实现:

	/**
	 * 条件构造器   查询操作
     * 查询tbl_employee表中, 性别为女并且名字中带有"老师" 或者  邮箱中带有"a"
	 */
	@Test
	public void testEntityWrapperSelect() {
				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);
		}

打印输出:

(3)条件构造器采用update方法实现修改操作

未修改前的数据:

代码实现:

	/**
	 * 条件构造器  修改操作
	 */
	@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", "小泽老师")
						.eq("age", 27)
		);
	}

 打印输出:

修改后的数据:

 

(4)条件构造器采用delete方法做删除操作

比如:删除名字为“Tom”,年龄23岁。 代码实现:

/**
	 * 条件构造器  删除操作
	 * 删除名字为“Tom”,年龄23岁
	 */
	@Test
	public void testEntityWrapperDelete() {

		employeeMapper.delete(
				new EntityWrapper<Employee>()
						.eq("last_name", "Tom")
						.eq("age", 23)
		);
	}

控制台打印输出:

删除前的数据:

 

删除后的数据:

(5)条件构造器采用EntityWrapper常用方法 

比如:查询性别为女的, 根据age进行排序(asc/desc), 简单分页

	/**
	 * 条件构造器   查询操作
	 */
	@Test
	public void testEntityWrapperSelect() {
		// 查询性别为女的, 根据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);


		}

控制台打印输出:

数据表的信息: 

 (6)条件构造器采用Condition的用法

比如:我们需要分页查询tbl_employee表中,年龄在18~50之间且性别为男且姓名为Tom的所有用户

/**
	 * 条件构造器   查询操作
	 */
	@Test
	public void testEntityWrapperSelect() {

		//我们需要分页查询tbl_employee表中,年龄在18~50之间且性别为男且姓名为Tom的所有用户

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

 控制台打印输出:

数据表的信息: 

 

 3、小结

MP: EntityWrapper Condition

条件构造器 MyBatis MBG : xxxExample→Criteria : QBC( Query By Criteria)

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值