代码拉取完成,页面将自动刷新
先看上图,在很多后台管理系统的查询场景中,都会有很多条件的搜索的需求。当我们集成mybatis—plus之后。写法如下
@Test
public void lambdaQueryChainWrapper() {
List<User> list = new LambdaQueryChainWrapper<>(userMapper)
.eq(User::getName, "mck")
.select(User::getEmail, User::getId)
.list();
log.info("list:{}", list);
}
每次我们在做后台的时候都要去在中拼接条件。最繁琐的是,业务上增加了字段的一些骚操作。或者是条件太多。
如果条件搜索很多不仅仅前端需要发送请求的同时携带很多数据。后台也是同步增加很多搜索条件。哎希望这种问题前端改一下得了,后台就别动了。可以参考如下:
get请求
http://localhost:8002/mpJson2?eq$userName=mck
post请求
{
"eq$userName":"mck"
}
服务端:
服务端就是通过 HttpServletRequest request 即可进行取值,并进行条件的拼接操作,前端按照规则进行填充查询条件。这样以来增减查询条件后台就不用动。
@Slf4j
@RestController
public class MpController {
@Resource
private UserMapper userMapper;
@GetMapping("page")
public ApiResultPage<UserDTO> loadPageList(HttpServletRequest request) {
return MpEasyTool.page(request, userMapper, userQueryWrapper -> userQueryWrapper.eq("user_name", "mck"), UserDTO.class);
}
@GetMapping("list")
public ApiResult<List<UserDTO>> loadList(HttpServletRequest request) {
return MpEasyTool.list(request, userMapper, UserDTO.class);
}
@GetMapping("mpJson4")
public ApiResult<List<User>> loadList4(HttpServletRequest request) {
List<User> list= userService.list(request);
return ApiResult.ok(list);
}
}
封装了如下方法
如下所示,自定义 xxxService extends IMpService。可以使用其增强方法。在原生mybatis-plus的方法基础上新增一些常用方方法。
public interface UserService extends IMpService<User> {
}
@Component
public class UserServiceImpl extends MpServiceImpl<UserMapper, User> implements UserService {
}
新增方法
其实mybatis-plus提供了相关注解的方式,标记查询条件,如下所示:他只提供了如下几种,其实也够用来了。
/**
* SQL 比较条件常量定义类
*
* @author hubin
* @since 2018-01-05
*/
public class SqlCondition {
/**
* 等于
*/
public static final String EQUAL = "%s=#{%s}";
/**
* 不等于
*/
public static final String NOT_EQUAL = "%s<>#{%s}";
/**
* % 两边 %
*/
public static final String LIKE = "%s LIKE CONCAT('%%',#{%s},'%%')";
/**
* % 两边 % [oracle使用]
*/
public static final String ORACLE_LIKE = "%s LIKE CONCAT(CONCAT('%%',#{%s}),'%%')";
/**
* % 左
*/
public static final String LIKE_LEFT = "%s LIKE CONCAT('%%',#{%s})";
/**
* 右 %
*/
public static final String LIKE_RIGHT = "%s LIKE CONCAT(#{%s},'%%')";
}
@Data
@Accessors(chain = true)
@TableName(value = "lc_user")
public class User {
@TableId(value = "USER_ID", type = IdType.AUTO)
private Long userId;
@TableField(value = "USER_NAME",whereStrategy = FieldStrategy.NOT_EMPTY,condition = SqlCondition.EQUAL)
private String userName;
@TableField(value ="PASSWORD",whereStrategy = FieldStrategy.NOT_EMPTY,condition = SqlCondition.EQUAL)
private Integer password;
@TableField("STATUS")
private String status;
}
如果嫌弃太少了,参考下面的。
@Data
@Accessors(chain = true)
@TableName(value = "lc_user")
@WrapperGroups(groups = {
@Group(group = "group1", conditionType = ConditionType.OR, splicingType = ConditionType.AND),
@Group(group = "group2", conditionType = ConditionType.AND, splicingType = ConditionType.AND)
})
public class User {
@TableId(value = "USER_ID", type = IdType.AUTO)
private Long userId;
@Wrapper(value = WrapperType.LIKE, group = "group1")
private String userName;
@Wrapper(group = "group1")
private Integer password;
@Wrapper(group="group2")
private String status;
}
上面拼接相当于执行:
SELECT USER_ID,user_name,password,status FROM lc_user WHERE ((user_name LIKE ? OR password = ?) AND (status = ?))
@GetMapping("mpJson3")
public ApiResult<List<User>> loadList3() {
User user = new User();
user.setUserName("mck")
.setPassword(123)
.setStatus("1");
List<User> list = MpEasyTool.list(userMapper, user);
return ApiResult.ok(list);
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。