MyBatis Plus的内置参数 wrapping的作用是什么?

MyBatis Plus的内置参数对象中,有一个 wrapping 对象。

它的作用是将查询条件封装到一个map中,以方便调用:

{
    "ew" : {
       "sqlSegment" : "name like concat('%',#{name},'%')"
    }
}

然后在SQL语句中,可以使用${ew.sqlSegment}来调用:

@Select("select * from user ${ew.sqlSegment}")
List<User> selectList(@Param("ew") Wrapper<User> wrapper);

这里相当于调用了 name like concat(‘%’,#{name},’%’) 的条件。

MyBatis Plus提供了多种Wrapper类来生成 wrapping 对象:

  • QueryWrapper 构造条件对象
  • StringWrapper 封装 String 参数
  • CollectionWrapper 封装 Collection参数

使用 wrapping 对象的好处是:

  1. 将复杂条件封装在 wrapping 对象中
  2. 方便在SQL语句中引用参数
  3. 有效复用 wrapping 对象

举个例子:

QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.eq("age", 18);

List<User> list1 = userMapper.selectList(wrapper);  
List<User> list2 = userMapper.selectByCustom(wrapper);

// 分别调用2次 wrapping 对象 

总的来说,使用MyBatis Plus的 wrapping 对象可以:

  • 将复杂条件封装在对象中
  • 在SQL中方便调用参数
  • 复用同一个 wrapping 对象

提高SQL的参数传递效率与复用性。