一、引言
MP自带的条件构造器虽然很强大,有时候也避免不了写稍微复杂一点业务的sql,那么那么今天说说MP怎么自定义sql语句吧。另外,除了下文提到的通过queryWrapper实现筛选以外,调用查询时,如果你需要做分页,通过mybatisPlus提供的分页接口IPage,能够避免自己手写分页的sql语句

二、具体实现
使用注解实现:

在我们Mapper接口中定义自定义方法即可。

 public interface UserMapper extends BaseMapper<TaskEntity> {    
 
  /**    
   * 如果自定义的方法还希望能够使用MP提供的Wrapper条件构造器,则需要如下写法
   * @param userWrapper
   */
   @Select("SELECT * FROM user ${ew.customSqlSegment}")
   List<StatisticsCommunityModel> getCockpitCommunityTop(@Param(Constants.WRAPPER)Wrapper<TaskEntity> userWrapper);

使用xml实现:

public interface TaskMapper extends BaseMapper<TaskEntity> {

    List<StatisticsCommunityModel> getCockpitCommunityTop(@Param(Constants.WRAPPER) Wrapper<TaskEntity> userWrapper);
}
<select id="getCockpitCommunityTop" resultType="com.chinaentropy.community.domain.model.task.StatisticsCommunityModel">
         SELECT community_name,community_code,COUNT(community_name) AS community_count FROM tk_task ${ew.customSqlSegment}  GROUP BY community_name,community_code  ORDER BY COUNT(community_name)  DESC limit 10
    </select>

无论使用哪种方式实现两者的搭配使用,
其核心都是 ${ew.customSqlSegment} 在SQL语句占位,@Param(Constants.WRAPPER)Wrapper userWrapper) 设置入参
最后在需要的时候传入已经配置好的queryWrapper
例如:taskMapper.getCockpitCommunityTop(queryWrapper);

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐