# query **Repository Path**: chenxxxxxxxx/query ## Basic Information - **Project Name**: query - **Description**: 基于MybatisPlus 的@Query注解使用示例 - **Primary Language**: Java - **License**: EPL-1.0 - **Default Branch**: master - **Homepage**: https://blog.csdn.net/jiandanzhengban/article/details/126555921 - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2024-11-11 - **Last Updated**: 2024-11-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # MybatisPlus查询注解Query的使用示例 ,以下是零基础教学 @Query、@QueryOr注解是基于MybatisPlus的轻量级查询注解,复杂的查询业务需求通过QO+@Query注解优雅的实现,提升开发效率,支持多表关联,支持and、or嵌套,支持自定义排序。 支持的条件包括但不限于:EQ-等于、LK(LIKE)-模糊匹配、LLK(LEFT LIKE)-左模糊匹配、RLK(RIGHT LIKE)-右模糊匹配、GT-大于、LT-小于、GE-大于等于、LE-小于等于、IN-包含、NIN(NOT IN)-不含包、ES(EXISTS)-包含、NES(NOT EXISTS)-不含包、BT(BETWEEN)-在...之间、NBT(NOT BETWEEN)-不在...之间、INL(IS NULL)-等于null、NNL(NOT NULL)-不等于null 等等 1. 使用示例一:使用注解查询 1.1 QO查询类配合前端传过来条件实现查询 ![img.png](czy-biz/src/main/resources/png/img_1.png) ```java @Data public class GoodsQO { /** * 多表关联查询时可以使用别名 如:g.id * 默认查询类型为 eq(equal) * id = */ @ApiModelProperty(value = "商品ID") @Query(field = "g.id") private Long id; /** * like可以指定为:lk(like)、llk(left like)、rlk(right like) * name like '1%' */ @ApiModelProperty(value = "商品名称") @Query(type = Query.Type.RLK) private String name; /** * between 支持集合、数组、逗号分割 * create_Time between '2021-07-09' and '2023-07-09' */ @ApiModelProperty(value = "商品创建时间区间逗号分割") @Query(field = "g.createTime", type = Query.Type.BT) private String createTime; /** * 多字段模糊匹配,适合一键搜索场景 * (name like '%1%' or description like '%1%') */ @ApiModelProperty(value = "商品或描述") @Query(likes = "name,description") private String keyword; /** * 嵌套查询注解@QueryOR 相当于 and (store_id is not null or goods_id is not null) */ @QueryOR private StoreQO storeQO; /** * 排序如:createTime desc,id * (order by create_time desc,id asc) */ @ApiModelProperty(value = "排序,逗号分割") private String sort; } ``` 1.2 Mapper映射类 ```java @Mapper public interface GoodsMapper extends BaseMapper { /** * 根据QO查询 * @param page * @param wrapper * @return */ @Select("select g.*,gs.store_id from goods g join goods_store gs on g.id = gs.goods_id ${ew.customSqlSegment}") IPage selectByQO(Page page, @Param(Constants.WRAPPER) Wrapper wrapper); } ``` 1.3 最终SQL: ```sql SELECT g.*, gs.store_id FROM goods g JOIN goods_store gs ON g.id = gs.goods_id WHERE ( NAME LIKE '1%' AND g.create_time BETWEEN '2021-07-011' AND '2023-07-11' AND ( NAME LIKE '%1%' OR description LIKE '%1%' ) AND ( store_id IS NOT NULL OR goods_id IS NOT NULL) ) LIMIT 10 ``` 2. 使用示例二:前端控制查询条件 如:[{"name":"lk 1"},{"id":"in 1,2,3,4"},{"sort":"gs.createTime desc,status"}] ![img_2.png](czy-biz/src/main/resources/png/img_2.png) 2.1 结合QueryUtils.buildQueryWrapperJson方法解析JSON条件: ```java // 前端传过来的json条件 String json = "[{\"name\":\"lk 1\"},{\"id\":\"in 1,2,3,4\"},{\"sort\":\"createTime desc,status\"}]"; // 设置别名,即前端传过来所有字段默认别名为g QueryAlias queryAlias = QueryAlias.getInstance("g"); // 支持自定义别名 Map aliasMap = new HashMap<>(); aliasMap.put("gs","goodsId,storeId"); queryAlias.setAlias(aliasMap); QueryWrapper queryWrapper = QueryUtils.buildQueryWrapperJson(json, queryAlias); return baseMapper.selectPage(PageUtil.getPage(page), queryWrapper); ``` 2.2 最终SQL: ```sql SELECT g.*, gs.store_id FROM goods g JOIN goods_store gs ON g.id = gs.goods_id WHERE (g.name LIKE '%1%' AND g.id IN ('1','2','3','4')) ORDER BY g.create_time DESC,g.status ASC ``` 3. 使用示例三:后端自定义查询 3.1 使用HashMap构建参数,配合QueryUtils.buildQueryWrapperJson方法: ```java Map param = new HashMap<>(); // 创建时间在 2024-06-06 00:00:00 到 2024-06-06 23:49:22之间 param.put("createTime", "bt 2024-06-06 00:00:00,2024-06-06 23:49:22"); // 名称包含 张或李或王 param.put("name", "lk 张 or 李 or 王"); // 名称或简介等于 1314 param.put("name or description", "lk 1314"); // id等于 1 param.put("id", "1"); // 排序 param.put("sort", "createTime desc,status"); QueryAlias queryAlias = QueryAlias.getInstance("g"); QueryWrapper queryWrapper = QueryUtils.buildQueryWrapperJson(param, queryAlias); return baseMapper.selectByQO(PageUtil.getPage(page), queryWrapper); ``` 3.2 最终SQL: ```sql SELECT * FROM goods g JOIN goods_store gs ON g.id = gs.goods_id WHERE ( ( name LIKE '%1314%' OR description LIKE '%1314%' ) AND ( name LIKE '%张%' OR name LIKE '%李%' OR name LIKE '%王%' ) AND g.id = '1' AND g.create_time BETWEEN '2024-06-06 00:00:00' AND '2024-06-06 23:49:22' ) ORDER BY g.create_time DESC,g.status ASC ``` 4. 博客地址: https://blog.csdn.net/jiandanzhengban/article/details/126555921