用ProviderMethodResolver构建sql

本文详细介绍了如何在Java中利用Mybatis的ProviderMethodResolver来动态构建SQL语句,包括其工作原理和实际应用示例,帮助开发者更好地理解和掌握这一特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public interface BusinessPositionSubmittedMapper {
    /**
     * 查询投递的简历
     * @param positionId 职位ID
     * @param query 查询条件
     * @return 简历列表
     */
    @SelectProvider(PositionSubmittedSqlProvider.class)
    List<ResumeSubmittedRowVo> selectByQuery(@Param("positionId") final Long positionId,
                                             @Param("query") final ResumeSubmittedQuery query);
                                             
}
public class PositionSubmittedSqlProvider implements ProviderMethodResolver {

    public static String selectByQuery(final Long positionId, final ResumeSubmittedQuery query) {
        return new SQL() {{
            SELECT("r.id", "rb.full_name as fullName",
                    "rt.job_search_status as jobSearchStatus", "rb.province", "rb.county",
                    "r.completed_percent as completedPercent", "ps.created_time as submittedTime",
                    "ps.processed_state as processedState", "ps.updated_time as operatedTime," +
                    "(case when r.file_id > 0 then true else false end ) as hasFile");
            FROM(Resume.TABLE_NAME + " as r");
            JOIN(PositionSubmitted.TABLE_NAME + " as ps on ps.resume_id = r.id");
            JOIN(ResumeTarget.TABLE_NAME + " as rt on rt.resume_id = r.id");
            JOIN(ResumeBase.TABLE_NAME + " as rb on rb.resume_id = r.id");
            WHERE("ps.position_id = #{positionId}");
            if (Objects.nonNull(query.getJobSearchStatus())) {
                AND().WHERE("rt.job_search_status = #{query.jobSearchStatus}");
            }
            if (Objects.nonNull(query.getProvince()) && Objects.nonNull(query.getCounty())) {
                AND().WHERE("rb.province = #{query.province}");
                AND().WHERE("rb.county = #{query.county}");
            }
            if (Objects.nonNull(query.getCompletedPercentMin()) &&
                    Objects.nonNull(query.getCompletedPercentMax())) {
                AND().WHERE("r.completed_percent between #{query.completedPercentMin} " +
                        "and #{query.completedPercentMax}");
            }
            if (Objects.nonNull(query.getHasFile()) && query.getHasFile()) {
                AND().WHERE("r.file_id > 0");
            }
            if (Objects.nonNull(query.getSubmittedTimeStart()) &&
                    Objects.nonNull(query.getSubmittedTimeEnd())) {
                AND().WHERE("ps.created_time between #{query.submittedTimeStart} " +
                        "and #{query.submittedTimeEnd}");
            }
            if (Objects.nonNull(query.getProcessedState())) {
                AND().WHERE("ps.processed_state = #{query.processedState}");
            }
        }}.toString();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值