• 记录 mybatis plus QuerWapper使用 FIND_IN_SET


    1.需求:

        一条记录属于多个分类时,使用 MySQL 自带函数 find_in_set 实现多值匹配查询

    例如:

         查询楼盘名称为name=xxx,查询出楼盘ID为:1,2,3
        方案表存的是楼盘ID信息; real_estate_ids ={1,2,5,8,9} 这条记录里面,怎么在方案表查出楼盘为xxx的数据呢?

    2.分析:

     (1)表名 (crm_programme)

     

      (2).表字段楼盘ID(real_estate_ids)

    3.MySQL 提供的 find_in_set 函数,进行数据的查询
        find_in_set 用法:
        find_in_set(参数一,参数二)

     参数说明:

        参数一:想要查询的分类值,如 1
        参数二:方案表中的分类所存储的字段,如 real_estate_ids

    方案表(crm_programme) 楼盘ID,有多个,以英文 , 相隔,如 1,2,5,8,9


    # 查询 real_estate_ids = 1 or real_estate_ids = 3 的记录

    第一种方法:直接使用自定义查询语句,使用Mysql中的find_in_set 函数。

          SELECT * FROM `crm_programme` where find_in_set(1,real_estate_ids) or find_in_set(3,real_estate_ids);

    第二种方法:利用mybatis-plus的lambda().apply 拼接SQL,代码如下
      List  realIds = crmProgrammeService.getIdsByRealEstateNames(name);
      if (!CollectionUtils.isEmpty(realIds)){
                    if (realIds.size() == 1){
                        queryWrapper.like("real_estate_ids", realIds.get(0));
                    } else {
                        for (int i = 0; i < realIds.size(); i++) {
                            if (i == 0) {
                                queryWrapper.apply(null != realIds.get(i), "(find_in_set({0},real_estate_ids)", realIds.get(i));
                            } else {
                                if (i == realIds.size() - 1) {
                                    queryWrapper.or().apply(null != realIds.get(i), "find_in_set({0},real_estate_ids))", realIds.get(i));
                                } else {
                                    queryWrapper.or().apply(null != realIds.get(i), "find_in_set({0},real_estate_ids)", realIds.get(i));
                                }
                            }
                        }
                    }
     } else {
         queryWrapper.isNull("real_estate_ids");
     }

  • 相关阅读:
    Java中为什么wait和notify方法要在同步块中调用
    Dynaform 7.0安装说明教程
    华为防火墙 DMZ 设置
    上位机开发之三菱PLC通信
    神经网络控制基本原理,神经网络理论及其应用
    cmdline-tools component is missing
    requestAnimationFrame实现vue虚拟滚动插件
    京东零售大数据云原生平台化实践
    统一日志处理
    【电源专题】案例:异常样机为什么只在40%以下电量时与其他样机显示电量差异10%,40%以上电量差异却都在5%以内。
  • 原文地址:https://blog.csdn.net/qq_34410726/article/details/126561485