jeecgboot 多表连接查询 分页
说明:
jeecgboot 使用的是mybatis plus,在查询时使用条件构造器中的 QueryWrapper 对象来进行完成,该对象中的getCustomSqlSegment()方法是获取自定义SQL的: 所以,我们使用QueryWrapper构造后在mapper中获取到自定义SQL拼接到我们的联表查询语句之后。
mybatis plus文档地址:
代码过程:
我的需求:根据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); @Overridepublic 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语句如下:
上一篇:
通过多线程提高代码的执行效率例子