一、引言
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);