SoFunction
Updated on 2025-04-25

Summary of various chain sql writing methods for mybatisFlex

1. Associate LEFT JOIN

 public List<TocAgentUserRelationVO> selectTocAgentUserRelationByPhones(List<String> phones) {
        QueryWrapper queryWrapper = ()
                .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.(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.(phones))
                .orderBy(TOC_AGENT_USER_RELATION.CREATE_TIME.desc());
        return (queryWrapper,);
    }

2. FIND_IN_SET+LEFT JOIN+AND (OR) writing method

 public &lt;R&gt; Page&lt;R&gt; dietitianList(DietitianListRequest request, Class&lt;R&gt; asType) {
        QueryWrapper queryWrapper = ()
                .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)
                //Calculate the positive review rate = the number of positive reviews/total orders                .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));
        (TOC_USER_INFO.(3));
        (TOC_USER_INFO.USER_TYPE.eq(UserTypeEnum.TOC_DOCTOR));
        if(() != null){
            ("FIND_IN_SET('" + () + "',good_at)");
        }

        if(() != null &amp;&amp; !().isEmpty()){
            (q -&gt; { for (Long illnessId : ()) { ("FIND_IN_SET('" + illnessId + "',good_at)"); } });

        }
        ("goodRate", false);
        PageDomain pageDomain = ();
        return ((), (), queryWrapper, asType);
    }

3. Modify some fields writing

   public void updateReservePhone(NutritionistRequest request) {
        ()
                .set(TocUserInfo::getReservePhone, ())
                .where(TocUserInfo::getId).eq(())
                .update();
    }

+case_().when().then().else_().end() writing method

    public StatisticsReturnVo selectRegistrationCodeIncome(StatisticsRequest request) {
        QueryWrapper wrapper = ()
                .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));
        (SysWxPayOrder::getAgentUserId, ());
        (SysWxPayOrder::getCreateTime, (), ());
        (SysWxPayOrder::getPayState,1);
        return (wrapper, );
    }

+case_().when().then().else_().end() writing method

public List<TocReserveTimeVo> getReserveTimeSlotRule(TocReserveQuery query) {
        QueryWrapper queryWrapper = ()
                .select(TOC_RESERVE_TIME_SLOT_RULE.("slotId"),
                        TOC_RESERVE_TIME_SLOT_RULE.TIME_SLOT,
                        TOC_RESERVE_TIME_SLOT_RULE.MAX_CAPACITY.as("totalAvailable"))
                .select(count(case_().when(TOC_RESERVE_DETAIL.(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(()))
                .groupBy(TOC_RESERVE_TIME_SLOT_RULE.ID, TOC_RESERVE_TIME_SLOT_RULE.TIME_SLOT, TOC_RESERVE_TIME_SLOT_RULE.MAX_CAPACITY);
        return (queryWrapper,);
    }

5. How to write fields addition, subtraction, multiplication and division

 public &lt;R&gt; Page&lt;R&gt; dietitianList(DietitianListRequest request, Class&lt;R&gt; asType) {
        QueryWrapper queryWrapper = ()
                .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)
                //Calculate the positive review rate = the number of positive reviews/total orders                .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));
        (TOC_USER_INFO.(3));
        (TOC_USER_INFO.USER_TYPE.eq(UserTypeEnum.TOC_DOCTOR));
        PageDomain pageDomain = ();
        return ((), (), queryWrapper, asType);
    }

6. AND + (field or field writing)

  public &lt;R&gt; Page&lt;R&gt; dietitianList(DietitianListRequest request, Class&lt;R&gt; asType) {
        QueryWrapper queryWrapper = ()
                .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)
                //Calculate the positive review rate = the number of positive reviews/total orders                .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));
        (TOC_NUTRITIONIST_ORDER_NUM.GOOD_REPUTATION_NUMBER.eq(1).or(TOC_NUTRITIONIST_ORDER_NUM.GOOD_REPUTATION_NUMBER.gt(1)));

        
        PageDomain pageDomain = ();
        return ((), (), queryWrapper, asType);
    }

7. Bulk modification writing method

  public int batchUntieGroup(List&lt;Long&gt; relationIds) {
        //Execute 1000 items each time        (relationIds, 1000, 
                , (mapper, relationId) -&gt; {
                    //The following is the specific implementation of SQL                    (mapper)
                            .set(TocGroupPatientRelations::getGroupId, null)
                            .set(TocGroupPatientRelations::getGroupName, "")
                            .where(TocGroupPatientRelations::getRelationId).eq(relationId)
                            .update();
                });
        return Constants.SUCCESS_CODE;
    }

This is the end of this article about the writing methods of various chained sqls in mybatisFlex. For more related content of mybatisFlex chained sql, please search for my previous articles or continue browsing the related articles below. I hope everyone will support me in the future!