最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Mybatis中and和循環(huán)or混用操作(or轉(zhuǎn)換成in)

 更新時(shí)間:2021年07月13日 09:15:30   作者:NO0b  
這篇文章主要介紹了Mybatis中and和循環(huán)or混用操作(or轉(zhuǎn)換成in),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

Mybatis and和循環(huán)or混用

這次項(xiàng)目用到一個(gè)and和or混用的場(chǎng)景 , 因?yàn)橛玫蕉鄠€(gè)or(循環(huán)), 沒想到好的辦法

最終轉(zhuǎn)換成用 IN實(shí)現(xiàn):

場(chǎng)景

用left join鏈接多個(gè)表, 多個(gè)條件and篩選, 其中狀態(tài)(state)條件篩選出多個(gè)可選狀態(tài)的條目,

本來想用and 和 or 但是 or的條件是個(gè)數(shù)組參數(shù), 需要遍歷states , 可能0個(gè)可能多個(gè), 拼了半天沒有成功 , 最后發(fā)現(xiàn)用 IN 和FOREACH就可以了

DAO層接口

List<OrderInfoForm> selectOrdersByStatesSelective(
            @Param(value="order")Order order,
            @Param(value="states")Integer[] states);

Mybatis實(shí)現(xiàn)

<select id="selectOrdersByStatesSelective" resultMap="AllResultMap" >
    select 
    <include refid="All_Column_List" />
    from order_list
    LEFT JOIN product_method ON product_method.`code` = order_list.purchase_method
    LEFT JOIN product_color ON product_color.`code` = order_list.color
    LEFT JOIN product_guarantee ON product_guarantee.`code` = order_list.guarantee
    LEFT JOIN product_info ON order_list.product_id = product_info.id
    LEFT JOIN product_model ON product_info.model = product_model.`code`
    LEFT JOIN product_standard ON product_info.standard = product_standard.`code`
    LEFT JOIN product_state ON product_state.`code` = order_list.order_state
    LEFT JOIN product_apperance ON product_apperance.`code` = order_list.apperance
    LEFT JOIN product_brand ON product_brand.`code` = product_info.brand
    <where>
        <if test="order.orderNum != null " >
            order_num like "%"#{order.orderNum,jdbcType=VARCHAR}"%"
        </if>
        <if test="order.operator != null " >
            and operator like "%"#{order.operator,jdbcType=VARCHAR}"%"
        </if>
        <if test="order.purchaseTime != null" >
            and purchase_time = #{order.purchaseTime,jdbcType=DATE}
        </if>
        <if test="order.orderState != null" >
            and order_state = #{order.orderState,jdbcType=VARCHAR}
        </if>
        <if test="order.serialNum != null" >
            and serial_num like "%"#{order.serialNum,jdbcType=VARCHAR}"%"
        </if>
        
        <if test="states != null and states.length >0">
            <foreach collection="states" item="state" separator="," open=" and order_state in (" close=")">
                #{state,jdbcType=BIGINT}
            </foreach>
        </if>
    </where>
  </select>

這里的重點(diǎn)是:

 <if test="states != null and states.length >0">
            <foreach collection="states" item="state" separator="," open=" and order_state in (" close=")">
                #{state,jdbcType=BIGINT}
            </foreach>
</if>

把多個(gè)state的or關(guān)系轉(zhuǎn)化為 states in (state1,state2,state3...)

in中用foreach循環(huán)

mybatis plus and 和or合并寫法

記錄一下and 和 or 混合使用

sql 語(yǔ)句實(shí)現(xiàn)

SELECT  * FROM somc_operation_plan 
WHERE ( title LIKE '%測(cè)試%' AND ( charge_user = 'xxx' OR execute_user = 'xxx' ) )
LambdaQueryWrapper<SomcOperationPlan> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.like(StringUtils.isNotEmpty(operationPlan.getTitle()), SomcOperationPlan::getTitle, operationPlan.getTitle())
        .and(wrapper -> wrapper.eq(StringUtils.isNotEmpty(operationPlan.getChargeUser()), SomcOperationPlan::getChargeUser, operationPlan.getChargeUser()).or().eq(StringUtils.isNotEmpty(operationPlan.getExecuteUser()), SomcOperationPlan::getExecuteUser, operationPlan.getExecuteUser()));

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

安康市| 巧家县| 罗田县| 米林县| 定南县| 年辖:市辖区| 镇坪县| 沭阳县| 土默特左旗| 吉安县| 海南省| 北碚区| 土默特左旗| 聂荣县| 道孚县| 太和县| 米林县| 西乡县| 新郑市| 扎赉特旗| 洞口县| 广宗县| 榆中县| 报价| 永康市| 玉林市| 深泽县| 扎兰屯市| 汉源县| 乐平市| 读书| 东乌珠穆沁旗| 银川市| 芒康县| 秭归县| 渑池县| 沙湾县| 天水市| 信丰县| 正蓝旗| 定南县|