版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_30038111/article/details/84584526
以动态order by
为例,即通过if
和foreach
标签动态拼接order by
的排序字段
Mapper.xml
<select id="dynamicOrder" resultType="com.p7.demo.model.Person">
select * from person
<if test="orderBy != null">
order by
<!--
遍历Map,index指向map的key,item指向map的value
-->
<foreach collection="orderBy.kColumnsVOrder" index="key"
item="value" separator=",">
<!--
这里要注意#和$的区别,mybatis会将#{}转义,${}会取值的字符串
#{key} #{value}
-->
${key} ${value}
</foreach>
</if>
</select>
Mapper.class
public interface PersonMapper {
List<Person> dynamicOrder(@Param("orderBy") Order order);
}
Order.class
public class Order {
private Map<String, OrderEnum> kColumnsVOrder = new LinkedHashMap<String, OrderEnum>();
public Map<String, OrderEnum> getkColumnsVOrder() {
return kColumnsVOrder;
}
}
OrderEnum.class
public enum OrderEnum {
ASC, DESC;
}
测试
Order order = new Order();
Map<String, OrderEnum> getkColumnVOrder = order.getkColumnsVOrder();
getkColumnVOrder.put("age", OrderEnum.DESC);
List<Person> people = mapper.dynamicOrder(order);