Mybatis遍历Map集合(Java/Mybatis动态排序)
以动态order by
为例,即通过if
和foreach
标签动态拼接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动态排序)相关推荐
- java mybatis 返回map_mybatis返回map集合的格式是什么?mybatis返回map集合实例
Mybatis因为会与数据库交互,所以经常会有返回map集合的场景,那一般mybatis返回map集合的格式是什么呢?下面小编就用一些实例与你分享分享吧. 例1:返回key不定:返回key为学员id, ...
- Java之五种遍历Map集合的方式
摘要:在java中所有的map都实现了Map接口,因此所有的Map都可以用以下的方式去遍历. 在java中所有的map都实现了Map接口,因此所有的Map都可以用以下的方式去遍历.这篇文章主要给大家介 ...
- Java中遍历Map集合的5种方式总结
这篇文章主要给大家介绍了关于Java中遍历Map集合的5种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值. 方式一 通过Map.keySet使用iterator遍历 ...
- java对list中map集合中某个字段排序
java对list中map集合中某个字段排序 适用于字符串排序,数字对比不可用,以下示例,当把sort的值改为74,66,142时排序不对看示例2 示例1 List<Map<String, ...
- java map foreach_java foreach遍历map集合的方法案例
java foreach遍历map集合的方法是java jdk1.8时出现的新方法,使用了Interface BiConsumer接口来实现,T代表map集合key的类型,U代表map集合Value的 ...
- 1.6 Java遍历Map集合
Java遍历Map集合的四种方式 Map 集合的遍历与 List 和 Set 集合不同.Map 有两组值,因此遍历时可以只遍历值的集合,也可以只遍历键的集合,也可以同时遍历.Map 以及实现 Map ...
- java中如何高效遍历Map集合
1. 前言 [推荐]使用entrySet遍历Map类集合KV,而不是keySet方式进行遍历. 说明:keySet其实是遍历了2次,一次是转为Iterator对象,另一次是从hashMap中取出key ...
- JAVA中哈希表的使用-遍历map集合
java中哈希表的使用第二例-即将罗马数字转换为整数 代码: class Solution { public int romanToInt(String s) { HashMap<Charact ...
- 【Groovy】map 集合 ( map 集合遍历 | 使用 map 集合的 find 方法遍历 map 集合 | 代码示例 )
文章目录 一.使用 map 集合的 find 方法遍历 map 集合 二.代码示例 一.使用 map 集合的 find 方法遍历 map 集合 使用 map 集合的 find 方法遍历 map 集合 ...
最新文章
- 密码强弱度检测万能插件
- ubuntu1804系统设置在哪里_新风净化系统的风口到底该放在哪里?
- 网络请求的基本知识《极客学院 --AFNetworking 2.x 网络解析详解--1》学习笔记...
- mysql存储过程——procedure[prəˈsiːdʒər]
- iTunes 降级安装 12.6
- SAP 电商云 Spartacus UI 和路由相关的 State 处理
- Jsp+Servlet+Mysql实现的在线鲜花商城源码
- Python笔试题汇总
- 编译原理-第四版-刘铭---期末复习
- 打开计算机后无法缩小怎么办,电脑打开窗口小怎么办
- opencv python 人脸识别 相似度_python3.6+opencv+keras等人脸识别匹配初探
- 如何查看本机flash版本
- wegame服务器选择不显示,wegame辅助功能不显示怎么解决
- Graphics2D 使用详解 【转】
- Seguros Sura选择Akur8来提升其在拉美市场的保险定价流程
- 职场干货——职场多年,一些对付小人的经验之谈
- git 解决冲突后提交 fatal: cannot do a partial commit during a merge.
- 网络转载——人生最重要的三种能力,不是读书能学来的!
- 谷歌浏览器常用功能 去掉锁屏显示正在播放
- android禁止下拉刷新,Android开发之无痕过渡下拉刷新控件的实现思路详解
热门文章
- 液晶12864汉字显示程序及显示顺序正常的C语言程序
- 西门子S7-1200 PLC选型前这些要了解
- 淘淘商城之商品添加功能实现
- Eclipse开启弹出Subversive Connector Discovery窗口解决办法
- mysql联合查询和关联查询
- LEDE/OpenWrt for TL-WDR5600(QCA956X)
- 编写一个简单的汇编程序(DOSBox 0.74和MASM 6.15)
- 点击图片放大预览,遮罩屏幕放大展示
- 计算机辅助几何设计(CAGD)的简单介绍
- Oracle ojdbc6-11.2.0.3.jar下载以及Maven手动安装jar包