2021-07-08

MYBATIS +MYSQL实现分组随机抽取具体数量数据以及使用 MYSQL 的自定义变量 @的问题解决

@Select({
            "<script>",
            "   <foreach item='extractExamPersonParam' collection='extractExamPersonParams' separator='union all'>",
            "       <foreach item='extractParam' collection='extractExamPersonParam.extractParams' separator='union all'>",
            "           SELECT T2.ID_CARD FROM (",
            "<![CDATA[",
            "               SELECT @E:=CASE WHEN @CUSTOMER_NO=T1.PRO_ORG_NO THEN @E+1 ELSE 1 END AS idCardCount, @CUSTOMER_NO:=T1.PRO_ORG_NO AS proOrgNo, T1.ID_CARD FROM",
            "               (SELECT I.ID_CARD, I.PRO_ORG_NO FROM GE_PERSON_INFO I,(SELECT @CUSTOMER_NO:= 0, @E:=1) r ]]>",
            "               WHERE I.TEAM_TYPE_CODE = #{extractExamPersonParam.teamTypeCode}",
            "       <choose>",
            "           <when test='extractExamPersonParam.teamTypeCode == \"01\" or extractExamPersonParam.teamTypeCode == \"03\"'>",
            "               AND I.POSITION_CODE = #{extractParam.positionPostCode}",
            "           </when>",
            "           <otherwise>",
            "               AND I.QUALIFICATION_POST = #{extractParam.positionPostCode}",
            "           </otherwise>",
            "       </choose>",
            "       AND I.PRO_ORG_NO IN ",
            "       <foreach item='orgNo' collection='extractExamPersonParam.orgNos' open='(' separator=',' close=')'>",
            "          #{orgNo}",
            "       </foreach>",
            "       ORDER BY I.PRO_ORG_NO, RAND()) T1 ) T2 WHERE idCardCount &lt;= #{extractParam.extractCount}",
            "       </foreach>",
            "   </foreach>",
            "</script>"
    })
    List<String> extractExamPerson(@Param("extractExamPersonParams") List<ExtractExamPersonParam> extractExamPersonParams);
@Data
@Accessors(chain = true)
public class ExtractExamPersonParam {
    private String teamTypeCode;

    private List<String> orgNos;
    
    private List<ExtractParam> extractParams;

    @Data
    @AllArgsConstructor
    public static class ExtractParam {
        private String positionPostCode;

        private Integer extractCount;
    }
}

自定义变量需要使用"<![CDATA[ ]]>"包住。
自定义变量声明参考Mysql生成序号方式。

参考链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值