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 <R> Page<R> dietitianList(DietitianListRequest request, Class<R> 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 && !().isEmpty()){ (q -> { 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 <R> Page<R> dietitianList(DietitianListRequest request, Class<R> 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 <R> Page<R> dietitianList(DietitianListRequest request, Class<R> 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<Long> relationIds) { //Execute 1000 items each time (relationIds, 1000, , (mapper, relationId) -> { //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!