Mybatis- 动态sql之if及choose(when otherwise)标签

208 阅读1分钟

以下代码背景为实现商品搜索及排序功能。
Mapper定义: ItemsMapperCustom

import com.imooc.pojo.vo.SearchItemsVo;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;

public interface ItemsMapperCustom {
    public List<SearchItemsVo> searchItems(@Param("paramsMap") Map<String,Object> map);

xml定义:ItemsMapperCustom.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.imooc.mapper.ItemsMapperCustom">
    <select id="searchItems" parameterType="Map" resultType="com.imooc.pojo.vo.SearchItemsVo">
        select
            i.id AS itemId,
            i.item_name AS itemName,
            i.sell_counts AS sellCounts,
            ii.url AS imgUrl,
            tempSpec.price_discount AS price
        FROM
            items i
        LEFT JOIN
            items_img ii
        ON
            i.id = ii.item_id
        LEFT JOIN
            (SELECT
              item_id, MIN(price_discount) AS price_discount
            FROM
              items_spec
            GROUP BY
              item_id
            ) tempSpec
            ON
              tempSpec.item_id = i.id
        WHERE
          ii.is_main = 1
        <if test="paramsMap.keywords != null and paramsMap.keywords != '' ">
            AND i.item_name like '%${paramsMap.keywords}%'
        </if>
        ORDER BY
           <!--k:默认排序,根据name-->
           <!--c:根据销量排序,-->
           <!--p:根据价格排序-->
        <choose>
            <when test="paramsMap.sort == &quot;c&quot;">
                i.sell_counts DESC
            </when>
            <when test="paramsMap.sort == &quot;p&quot;">
                tempSpec.price_discount asc
            </when>
            <otherwise>
                i.item_name asc
            </otherwise>
        </choose>
    </select>

</mapper>

参考链接:www.cnblogs.com/xidian2014/…