以动态order by为例,即通过ifforeach标签动态拼接order by的排序字段。动态排序的案例详见最下面的测试。

Mapper.xml

<select id="dynamicOrder" resultType="com.p7.demo.model.Person">select * from person <if test="orderBy != null and orderBy.orderByMap.size > 0">order by<!-- 遍历Map,index指向map的key,item指向map的value--><foreach collection="orderBy.orderByMap" index="key"item="value" separator=","><!--这里要注意#和$的区别,mybatis会将#{}转义,${}会取值的字符串#{key} #{value} -->${key} ${value}        </foreach></if>
</select>

Mapper.class

public interface PersonMapper {List<Person> dynamicOrder(@Param("orderBy") OrderBy orderBy);
}

OrderBy.class

public class OrderBy {/*** key:排序的列* value:排序的方式*/private Map<String, OrderByEnum> orderByMap = new LinkedHashMap<String, OrderByEnum>();public Map<String, OrderByEnum> getOrderByMap() {return orderByMap;}public static OrderBy build() {return new OrderBy();}public OrderBy addColumn(String column, Integer sortType) {if (sortType == null) {return this;}this.orderByMap.put(column, OrderByEnum.getOrderBy(sortType));return this;}public boolean notExistsOrderBy() {return this.orderByMap.size() == 0;}public enum OrderByEnum {ASC(1), DESC(2);OrderByEnum(int orderBy) {this.orderBy = orderBy;}public static final int ASC_IDX = 1;public static final int DESC_IDX = 2;private int orderBy;public static OrderByEnum getOrderBy(int orderBy) {return ASC.orderBy == orderBy ? ASC : DESC;}}}

动态SQL

<sql id="dynamicOrder"><if test="orderBy != null and orderBy.orderByMap.size > 0">order by<!--遍历Map,index指向map的key,item指向map的value--><foreach collection="orderBy.orderByMap" index="key"item="value" separator=","><!--这里要注意#和$的区别,mybatis会将#{}转义,${}会取值的字符串#{key} #{value}-->${key} ${value}</foreach></if>
</sql>

测试

Integer sortedType = null;
Integer enabledSortedType = null;
OrderBy build = OrderBy.build();
build.addColumn("sorted", sortedType).addColumn("enabled", enabledSortedType);
// 如果为真,说明 sortedType 和 enabledSortedType 都为 null,此时可以考虑给默认排序方式
if (build.existsOrderBy()) {build.addColumn("sorted", OrderByEnum.ASC_IDX).addColumn("update_time", OrderByEnum.DESC_IDX);
}
build.addColumn("sorted", OrderByEnum.ASC_IDX).addColumn("update_time", OrderByEnum.DESC_IDX);
List<Person> people = mapper.dynamicOrder(build);

Mybatis遍历Map集合(Java/Mybatis动态排序)相关推荐

  1. java mybatis 返回map_mybatis返回map集合的格式是什么?mybatis返回map集合实例

    Mybatis因为会与数据库交互,所以经常会有返回map集合的场景,那一般mybatis返回map集合的格式是什么呢?下面小编就用一些实例与你分享分享吧. 例1:返回key不定:返回key为学员id, ...

  2. Java之五种遍历Map集合的方式

    摘要:在java中所有的map都实现了Map接口,因此所有的Map都可以用以下的方式去遍历. 在java中所有的map都实现了Map接口,因此所有的Map都可以用以下的方式去遍历.这篇文章主要给大家介 ...

  3. Java中遍历Map集合的5种方式总结

    这篇文章主要给大家介绍了关于Java中遍历Map集合的5种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值. 方式一 通过Map.keySet使用iterator遍历 ...

  4. java对list中map集合中某个字段排序

    java对list中map集合中某个字段排序 适用于字符串排序,数字对比不可用,以下示例,当把sort的值改为74,66,142时排序不对看示例2 示例1 List<Map<String, ...

  5. java map foreach_java foreach遍历map集合的方法案例

    java foreach遍历map集合的方法是java jdk1.8时出现的新方法,使用了Interface BiConsumer接口来实现,T代表map集合key的类型,U代表map集合Value的 ...

  6. 1.6 Java遍历Map集合

    Java遍历Map集合的四种方式 Map 集合的遍历与 List 和 Set 集合不同.Map 有两组值,因此遍历时可以只遍历值的集合,也可以只遍历键的集合,也可以同时遍历.Map 以及实现 Map ...

  7. java中如何高效遍历Map集合

    1. 前言 [推荐]使用entrySet遍历Map类集合KV,而不是keySet方式进行遍历. 说明:keySet其实是遍历了2次,一次是转为Iterator对象,另一次是从hashMap中取出key ...

  8. JAVA中哈希表的使用-遍历map集合

    java中哈希表的使用第二例-即将罗马数字转换为整数 代码: class Solution { public int romanToInt(String s) { HashMap<Charact ...

  9. 【Groovy】map 集合 ( map 集合遍历 | 使用 map 集合的 find 方法遍历 map 集合 | 代码示例 )

    文章目录 一.使用 map 集合的 find 方法遍历 map 集合 二.代码示例 一.使用 map 集合的 find 方法遍历 map 集合 使用 map 集合的 find 方法遍历 map 集合 ...

最新文章

  1. 密码强弱度检测万能插件
  2. ubuntu1804系统设置在哪里_新风净化系统的风口到底该放在哪里?
  3. 网络请求的基本知识《极客学院 --AFNetworking 2.x 网络解析详解--1》学习笔记...
  4. mysql存储过程——procedure[prəˈsiːdʒər]
  5. iTunes 降级安装 12.6
  6. SAP 电商云 Spartacus UI 和路由相关的 State 处理
  7. Jsp+Servlet+Mysql实现的在线鲜花商城源码
  8. Python笔试题汇总
  9. 编译原理-第四版-刘铭---期末复习
  10. 打开计算机后无法缩小怎么办,电脑打开窗口小怎么办
  11. opencv python 人脸识别 相似度_python3.6+opencv+keras等人脸识别匹配初探
  12. 如何查看本机flash版本
  13. wegame服务器选择不显示,wegame辅助功能不显示怎么解决
  14. Graphics2D 使用详解 【转】
  15. Seguros Sura选择Akur8来提升其在拉美市场的保险定价流程
  16. 职场干货——职场多年,一些对付小人的经验之谈
  17. git 解决冲突后提交 fatal: cannot do a partial commit during a merge.
  18. 网络转载——人生最重要的三种能力,不是读书能学来的!
  19. 谷歌浏览器常用功能 去掉锁屏显示正在播放
  20. android禁止下拉刷新,Android开发之无痕过渡下拉刷新控件的实现思路详解

热门文章

  1. 液晶12864汉字显示程序及显示顺序正常的C语言程序
  2. 西门子S7-1200 PLC选型前这些要了解
  3. 淘淘商城之商品添加功能实现
  4. Eclipse开启弹出Subversive Connector Discovery窗口解决办法
  5. mysql联合查询和关联查询
  6. LEDE/OpenWrt for TL-WDR5600(QCA956X)
  7. 编写一个简单的汇编程序(DOSBox 0.74和MASM 6.15)
  8. 点击图片放大预览,遮罩屏幕放大展示
  9. 计算机辅助几何设计(CAGD)的简单介绍
  10. Oracle ojdbc6-11.2.0.3.jar下载以及Maven手动安装jar包