it编程 > 编程语言 > Java

mybatisFlex各种链式sql写法小结

9人参与 2025-04-25 Java

1.关联left join

 public list<tocagentuserrelationvo> selecttocagentuserrelationbyphones(list<string> phones) {
        querywrapper querywrapper = querywrapper.create()
                .select(toc_agent_user_relation.all_columns)
                .select(toc_user_info.phone,toc_user_info.nick_name)
                .select(toc_group_patient_relations.doctor_id,toc_group_patient_relations.create_time.as("binddoctortime"))
                .from(toc_agent_user_relation)
                .leftjoin(toc_user_info).on(toc_user_info.id.eq(toc_agent_user_relation.user_id))
                .leftjoin(toc_group_patient_relations).on(toc_group_patient_relations.patient_id.eq(toc_agent_user_relation.user_id))
                .where(toc_user_info.phone.in(phones))
                .orderby(toc_agent_user_relation.create_time.desc());
        return tocagentuserrelationmapper.selectlistbyqueryas(querywrapper,tocagentuserrelationvo.class);
    }

2.find_in_set+left join+and (or)写法

 public <r> page<r> dietitianlist(dietitianlistrequest request, class<r> astype) {
        querywrapper querywrapper = querywrapper.create()
                .select(toc_user_info.id,toc_user_info.nick_name,toc_user_info.img_url,toc_user_info.tag,toc_user_info.good_at,toc_user_info.good_at_remark)
                .select(toc_nutritionist_order_num.consult_order_number)
                //计算好评率=好评数目/总订单数目
                .select(toc_nutritionist_order_num.good_reputation_number.divide(toc_nutritionist_order_num.consult_order_number).as("goodrate"))
                .from(toc_user_info)
                .leftjoin(toc_nutritionist_order_num).on(toc_nutritionist_order_num.user_id.eq(toc_user_info.id));
        querywrapper.where(toc_user_info.platform.eq(3));
        querywrapper.where(toc_user_info.user_type.eq(usertypeenum.toc_doctor));
        if(request.getillnessid() != null){
            querywrapper.and("find_in_set('" + request.getillnessid() + "',good_at)");
        }

        if(request.getillnessids() != null && !request.getillnessids().isempty()){
            querywrapper.and(q -> { for (long illnessid : request.getillnessids()) { q.or("find_in_set('" + illnessid + "',good_at)"); } });

        }
        querywrapper.orderby("goodrate", false);
        pagedomain pagedomain = tablesupport.buildpagerequest();
        return tocuserinfomapper.paginateas(pagedomain.getpagenum(), pagedomain.getpagesize(), querywrapper, astype);
    }

3.修改部分字段写法

   public void updatereservephone(nutritionistrequest request) {
        updatechain.of(tocuserinfo.class)
                .set(tocuserinfo::getreservephone, request.getreservephone())
                .where(tocuserinfo::getid).eq(request.getuserid())
                .update();
    }

4.sum+case_().when().then().else_().end()写法

    public statisticsreturnvo selectregistrationcodeincome(statisticsrequest request) {
        querywrapper wrapper = querywrapper.create()
                .select(sum(case_().when(sys_wx_pay_order.user_from.eq(4)).then(sys_wx_pay_order.pay_money).else_(0.00).end()).as("num1"))
                .select(sum(case_().when(sys_wx_pay_order.user_from.eq(5)).then(sys_wx_pay_order.pay_money).else_(0.00).end()).as("num2"))
                .select(sum(case_().when(sys_wx_pay_order.user_from.eq(2)).then(sys_wx_pay_order.pay_money).else_(0.00).end()).as("num3"))
                .from(sys_wx_pay_order)
                .where(sys_wx_pay_order.user_from.in(2,4,5));
        wrapper.eq(syswxpayorder::getagentuserid, request.getagentid());
        wrapper.between(syswxpayorder::getcreatetime, request.getbegintime(), request.getendtime());
        wrapper.eq(syswxpayorder::getpaystate,1);
        return syswxpayordermapper.selectonebyqueryas(wrapper, statisticsreturnvo.class);
    }

4.count+case_().when().then().else_().end()写法

public list<tocreservetimevo> getreservetimeslotrule(tocreservequery query) {
        querywrapper querywrapper = querywrapper.create()
                .select(toc_reserve_time_slot_rule.id.as("slotid"),
                        toc_reserve_time_slot_rule.time_slot,
                        toc_reserve_time_slot_rule.max_capacity.as("totalavailable"))
                .select(count(case_().when(toc_reserve_detail.status.eq(1)).then(toc_reserve_detail.id).else_(null).end()).as("reservedcount"))
                .select(toc_reserve_time_slot_rule.max_capacity.subtract(count(toc_reserve_detail.id)) .as("remainingslots"))
                .from(toc_reserve_time_slot_rule)
                .leftjoin(toc_reserve_detail).on(toc_reserve_detail.slot_id.eq(toc_reserve_time_slot_rule.id))
                .where(toc_reserve_time_slot_rule.date_rule_id.eq(query.getid()))
                .groupby(toc_reserve_time_slot_rule.id, toc_reserve_time_slot_rule.time_slot, toc_reserve_time_slot_rule.max_capacity);
        return tocreservetimeslotrulemapper.selectlistbyqueryas(querywrapper,tocreservetimevo.class);
    }

5.字段加减乘除写法

 public <r> page<r> dietitianlist(dietitianlistrequest request, class<r> astype) {
        querywrapper querywrapper = querywrapper.create()
                .select(toc_user_info.id,toc_user_info.nick_name,toc_user_info.img_url,toc_user_info.tag,toc_user_info.good_at,toc_user_info.good_at_remark)
                .select(toc_nutritionist_order_num.consult_order_number)
                //计算好评率=好评数目/总订单数目
                .select(toc_nutritionist_order_num.good_reputation_number.divide(toc_nutritionist_order_num.consult_order_number).as("goodrate1"))
                .select(toc_nutritionist_order_num.good_reputation_number.multiply(toc_nutritionist_order_num.consult_order_number).as("goodrate2"))
                .select(toc_nutritionist_order_num.good_reputation_number.subtract(toc_nutritionist_order_num.consult_order_number).as("goodrate3"))
                .select(toc_nutritionist_order_num.good_reputation_number.add(toc_nutritionist_order_num.consult_order_number).as("goodrate4"))
                .from(toc_user_info)
                .leftjoin(toc_nutritionist_order_num).on(toc_nutritionist_order_num.user_id.eq(toc_user_info.id));
        querywrapper.where(toc_user_info.platform.eq(3));
        querywrapper.where(toc_user_info.user_type.eq(usertypeenum.toc_doctor));
        pagedomain pagedomain = tablesupport.buildpagerequest();
        return tocuserinfomapper.paginateas(pagedomain.getpagenum(), pagedomain.getpagesize(), querywrapper, astype);
    }

6. and +(字段 or 字段写法)

  public <r> page<r> dietitianlist(dietitianlistrequest request, class<r> astype) {
        querywrapper querywrapper = querywrapper.create()
                .select(toc_user_info.id,toc_user_info.nick_name,toc_user_info.img_url,toc_user_info.tag,toc_user_info.good_at,toc_user_info.good_at_remark)
                .select(toc_nutritionist_order_num.consult_order_number)
                //计算好评率=好评数目/总订单数目
                .select(toc_nutritionist_order_num.good_reputation_number.divide(toc_nutritionist_order_num.consult_order_number).as("goodrate"))
                .from(toc_user_info)
                .leftjoin(toc_nutritionist_order_num).on(toc_nutritionist_order_num.user_id.eq(toc_user_info.id));
        querywrapper.and(toc_nutritionist_order_num.good_reputation_number.eq(1).or(toc_nutritionist_order_num.good_reputation_number.gt(1)));

        
        pagedomain pagedomain = tablesupport.buildpagerequest();
        return tocuserinfomapper.paginateas(pagedomain.getpagenum(), pagedomain.getpagesize(), querywrapper, astype);
    }

7.批量修改写法

  public int batchuntiegroup(list<long> relationids) {
        //每次执行1000条
        db.executebatch(relationids, 1000, tocgrouppatientrelationsmapper.class
                , (mapper, relationid) -> {
                    //下面是具体的执行sql写法
                    updatechain.of(mapper)
                            .set(tocgrouppatientrelations::getgroupid, null)
                            .set(tocgrouppatientrelations::getgroupname, "")
                            .where(tocgrouppatientrelations::getrelationid).eq(relationid)
                            .update();
                });
        return constants.success_code;
    }

到此这篇关于mybatisflex各种链式sql写法小结的文章就介绍到这了,更多相关mybatisflex链式sql内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)
打赏 微信扫一扫 微信扫一扫

您想发表意见!!点此发布评论

推荐阅读

一文详解Java异常处理你都了解哪些知识

04-25

Java中的@SneakyThrows注解用法详解

04-25

解决Maven项目idea找不到本地仓库jar包问题以及使用mvn install:install-file

04-25

Spring Boot 整合 SSE的高级实践(Server-Sent Events)

04-25

Spring Boot读取配置文件的五种方式小结

04-25

深入解析SpringBoot中#{}和${}的使用

04-25

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论