说明:
jeecgboot 使用的是mybatis plus,在查询时使用条件构造器中的 QueryWrapper 对象来进行完成,该对象中的getCustomSqlSegment()方法是获取自定义SQL的:
所以,我们使用QueryWrapper构造后在mapper中获取到自定义SQL拼接到我们的联表查询语句之后。
mybatis plus文档地址:mybatis plus querywrapper
代码过程:
我的需求:根据openid查询到做过的结果数据,结果数据需要联表查询获取:
前端【小程序】:
wx.request({
url: getPayResultListByOpenId,
data: {
pageNo: this.data.page,
pageSize: this.data.limit,
openId: wx.getStorageSync('openid')
},
success: (res) => {
},
fail: (res) => {
console.log(res);
}
})
controller:
@RequestMapping(value = "getPayResultListByOpenId")
@ResponseBody
public Result<?> queryPageList(PayTestresult payTestresult,
@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
HttpServletRequest req) {
QueryWrapper<PayTestresult> queryWrapper = QueryGenerator.initQueryWrapper(payTestresult, req.getParameterMap());
Page<PayTestresult> page = new Page<PayTestresult>(pageNo, pageSize);
IPage<PayTestresult> pageList = payTestresultService.pageList(page, queryWrapper);
return Result.OK(pageList);
}
service,serviceimpl:
IPage<PayTestresult> pageList(Page<PayTestresult> page, QueryWrapper<PayTestresult> queryWrapper);
@Override
public IPage<PayTestresult> pageList(Page<PayTestresult> page, QueryWrapper<PayTestresult> queryWrapper) {
return testresultMapper.getPageList(page, queryWrapper);
}
mapper层:
IPage<PayTestresult> getPageList(Page page, @Param(MybatisPlusConst.QUERYWRAPPER) Wrapper<PayTestresult> queryWrapper);
MybatisPlusConst是自定义的一个常量类,QUERYWRAPPER是自定义的字段
public class MybatisPlusConst {
public static final String QUERYWRAPPER = "ew";
public static final String SQL = "sql";
}
mapper层的SQL语句:使用 ${ew.customSqlSegment}获取到自定义的SQL语句,拼接
<select id="getPageList" resultType="org.jeecg.modules.paytest.entity.PayTestresult">
SELECT b.descp, b.que_count, b.read_num, b.pic AS picPath, a.*
FROM pay_testresult a
LEFT JOIN pay_test b ON a.test_id = b.id
${ew.customSqlSegment}
</select>
结果:
打印出的SQL语句如下: