mybatisplus如何拼接动态sql
为了让代码更通用,为了让代码更简洁,所以有时候我们需要把查询条件动态化
后端代码如下:
@GetMapping("/selectOrder")public R<Page> selectOrder(String openid,String query,int page, int pageSize){System.out.println("订单界面数据展示");System.out.println("接收到的openid,"+openid);System.out.println("接收到的query,"+query);System.out.println("接收到的page,"+page);System.out.println("接收到的pageSize,"+pageSize);//分页构造器Page<Xcx_2OrderData> pageInfo = new Page<>(page,pageSize);//条件构造器QueryWrapper<Xcx_2OrderData> queryWrapper = new QueryWrapper<>();queryWrapper.eq("openid",openid);// 当 query 不为空时,拼接上额外的查询条件// 使用 Hutool 将 query 字符串解析为 MapMap<String, Object> queryMap = JSONUtil.toBean(query, Map.class);// 遍历 Map,构造查询条件for (Map.Entry<String, Object> entry : queryMap.entrySet()) {String key = entry.getKey();Object value = entry.getValue();queryWrapper.eq(key, value);}// TODO 这里应该再加一个条件,因为用户如果进入支付输入密码界面的时候,这时候用户手机关机了// TODO 然后既不能微信通知中让我们改变其状态为未支付,也不能在前端取消支付时候也不会触发(也不能让我们改成未支付),这时候数据库// TODO 中的pay_success字段就是为null,而不是为待支付: not_pay字段,这会出现一个什么情况呢// TODO 就是说页面这种查全部可以查到,但是不属于其他四个任何一个分类,所以拼接pay_success字段不为null的值// TODO bububu,这里不拼接pay_success字段不为null的值了,直接给pay_success字段为null的值全部删掉即可QueryWrapper<Xcx_2OrderData> objectQueryWrapper = new QueryWrapper<>();objectQueryWrapper.isNull("pay_success");xcx_2OrderDataService.remove(objectQueryWrapper);//分页查询xcx_2OrderDataService.page(pageInfo,queryWrapper);return R.success(pageInfo);}
前端部分代码如下(requestApi是我封装的wx.request):
// 请求数据const res_order = reactive({order_data:[]})const {order_data} = toRefs(res_order)async function getOrder(sk,query){const openid = wx.getStorageSync('openid')//取出本地缓存的用户信息// const res = await db.collection('order_data').where(query).limit(10).skip(sk).orderBy('order_time','desc').get()const res =await requestApi('/selectOrder',{openid:openid,query:query,page:sk,pageSize:10})console.log(res)res_order.order_data = [...res_order.order_data,...res.data.records]}// 上拉加载let loading = ref(false)let page_n = ref(1)onReachBottom(async()=>{//onReachBottom只能在父组件才能触底loading.value = truepage_n.value++let sk = page_n.value * 10await getOrder(sk,data.tab[re.value].query)loading.value = false})