IPage和Page都是new Page
网上查资料都说IPage封装了Page,所以以下都基于这个理解
- IPage + SQL
/*serviceImpl*/
@Service
public class ServiceImpl implements Service {
@Autowired
private Mapper mapper;
@Override
public IPage queryNewsList(Integer page, Integer pageSize, String query) {
//mySelectPage为自己写的SQL语句
//Page page1 = new Page<>(page,pageSize);
//IPage iPage = mapper.mySelectPage(page1,query)
IPage iPage = mapper.mySelectPage(new Page<>(page, pageSize), query);
return iPage;
}
}
- IPage + QueryWrapper
/*serviceImpl*/
@Service
public class ServiceImpl implements Service {
@Autowired
private Mapper mapper;
@Override
public IPage queryNewsList(Integer page, Integer pageSize) {
QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.orderByDesc("orderBy");
//MP自带的selectPage方法
//Page page1 = new Page<>(page,pageSize);
//IPage iPage = mapper.selectPage(page1 , queryWrapper);
IPage iPage = mapper.selectPage(new Page<>(page, pageSize),
queryWrapper);
return iPage;
}
}
- mybatisPlus的mapper.selectPage或者其他的MP方法,应该都可以自己重写,以下是selectPage源码和我自己修改的selectPage
/**源码:
* 获取自定义SQL 简化自定义XML复杂情况
* <p>使用方法</p>
* <p>`自定义sql` + ${ew.customSqlSegment}</p>
* <p>1.逻辑删除需要自己拼接条件 (之前自定义也同样)</p>
* <p>2.不支持wrapper中附带实体的情况 (wrapper自带实体会更麻烦)</p>
* <p>3.用法 ${ew.customSqlSegment} (不需要where标签包裹,切记!)</p>
* <p>4.ew是wrapper定义别名,可自行替换</p>
*/
public String getCustomSqlSegment() {
MergeSegments expression = getExpression();
if (Objects.nonNull(expression)) {
NormalSegmentList normal = expression.getNormal();
String sqlSegment = getSqlSegment();
if (StringUtils.isNotEmpty(sqlSegment)) {
if (normal.isEmpty()) {
return sqlSegment;
} else {
return Constants.WHERE + " " + sqlSegment;
}
}
}
return StringUtils.EMPTY;
}
/**我自己修改的selectPage如下:直接在对应的XML文件中,写同名sql"selectPage",这样这个Mapper下的selectPage就会被修改,
${ew.customSqlSegment}为service层控制的queryWapper条件构造器
这个就很牛逼了,直接连表查,属于脱裤子放屁*/
<select id="selectPage" resultType="qwq">
select *
from(
select QAQ.*,QwQ.*
from QAQ
inner join QwQ
on QAQ.subject_id = QwQ.subject_id
) as a
${ew.customSqlSegment}
</select>