以下代码背景为实现商品搜索及排序功能。
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 == "c"">
i.sell_counts DESC
</when>
<when test="paramsMap.sort == "p"">
tempSpec.price_discount asc
</when>
<otherwise>
i.item_name asc
</otherwise>
</choose>
</select>
</mapper>