热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

浅谈MyBatis循环Map(高级用法)

这篇文章主要介绍了浅谈MyBatis循环Map(高级用法),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

今天遇到一个比较特殊的业务,需要对传入的Map数据在映射文件中进行遍历,在之前的学习中,我们也知道MyBatis有默认对集合的操作list和array,但是没有默认的map,所有不能直接写collection="map",如果这么处理,它会当成是根据map.get("map")获取传递value只,==大部分情况下是一个map中是不会有“map”这个key的,于是就是报错==。如果你想用map标识来获取参数map,就需要保证传入的Map参数有@Param("map")注解。

1.Mybatis入参Map的使用

1.1 传递Map数据

第一种:自己封装传递Map中的KEY值,模拟数据

//service:
public List getByMap(Map> map){
    Map paramsMap= new HashMap();
    params.put("paramsMap", map);
    return this.getByMap(paramsMap);  
}
//dao:
int getByMap(Map map)

第二种:个人推荐@Param注解

//service直接调用dao
int getByMap(@param("paramsMap") Map map)

1.2 映射文件XML

(1)循环KEY值写法:

  
  ${k} = #{k}  
 

(2)循环VAVLUE值写法

  
  ${v} = #{v}  
 

其实本质就是使用的Map.Entiy对象中的属性,自己回顾一下Java中对Map的遍历方式有几种

1.3 KEY获取VALUE

  
    
    ${k} = ${paramsMap[k]}  
   
 

==注意:这里使用的$来获取数据,绝大部分情况下我们个人不推荐使用$符号==

个人推荐方式:一次循环得到key和value值,这里使用#和$都是可以的


  #{key} = #{value}

==回顾:#和$的区别,应该还记得吧!==

1.4 表达式书写错误

通常我们设置值的时候,会以#{}的方式,而不是${},如下:==错误写法==

  
    
    ${k} = #{paramsMap[k]}  
   
 

这样书写,取不了值了,${condition[k]} 能取的出值,但#{condition[k]} 取出来的值却实null,正确的写法应该是:

  
    
    ${k} = #{paramsMap[${k}]} 
   
 

2.Map高级用法

MyBatis嵌套循环map的高级用法:假如参数类型是这么一个类型结构: Map map = new HashMap>,我想要拼装出来的sql如下:

select * from 表名
where (
  (id = 1 and name in ('悟空','唐僧','八戒') or
  (id = 2 and name in ('刘备','张飞','关羽') or
  (id = 3 and name in ('小三','王五','王八') or
  ……
)

id对应的是Map中KEY,而in中的数据是Map中的value

Map> map = new HashMap<>();
List nameList = new ArrayList<>();
nameList.add("悟空");
nameList.add("唐僧");
nameList.add("八戒");
map.put("1",nameList);

nameList = new ArrayList<>();
nameList.add("刘备");
nameList.add("张飞");
nameList.add("关羽");
map.put("2",nameList);

(1)第一种写法:就是通过KEY获取value的形式

SELECT * FROM 表名
WHERE 

  (id = #{key} AND name in
  
    #{name}
  
  )

(1)第二种写法:个人喜欢的方式

SELECT * FROM 表名
WHERE 

  (id = #{key} AND name in
  
    #{name}
  
  )

 到此这篇关于浅谈MyBatis循环Map(高级用法)的文章就介绍到这了,更多相关MyBatis循环Map内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!


推荐阅读
  • 一个建表一个执行crud操作建表代码importandroid.content.Context;importandroid.database.sqlite.SQLiteDat ... [详细]
  • Spring Data JdbcTemplate 入门指南
    本文将介绍如何使用 Spring JdbcTemplate 进行数据库操作,包括查询和插入数据。我们将通过一个学生表的示例来演示具体步骤。 ... [详细]
  • 如何在不同数据库中提取前N%的记录
    本文详细介绍了如何在SQL Server、Oracle和MySQL等不同数据库中提取前N%的记录。通过具体的示例和代码,帮助读者理解和掌握这些方法。 ... [详细]
  • 本文介绍 DB2 中的基本概念,重点解释事务单元(UOW)和事务的概念。事务单元是指作为单个原子操作执行的一个或多个 SQL 查询。 ... [详细]
  • MySQL Server 8.0.28 升级至 8.0.30 的详细步骤
    为了修复安全漏洞,本文档提供了从 MySQL Server 8.0.28 升级到 8.0.30 的详细步骤,包括备份数据库、停止和删除旧服务、安装新版本以及配置相关环境变量。 ... [详细]
  • RocketMQ在秒杀时的应用
    目录一、RocketMQ是什么二、broker和nameserver2.1Broker2.2NameServer三、MQ在秒杀场景下的应用3.1利用MQ进行异步操作3. ... [详细]
  • 包含phppdoerrorcode的词条 ... [详细]
  • MySQL初级篇——字符串、日期时间、流程控制函数的相关应用
    文章目录:1.字符串函数2.日期时间函数2.1获取日期时间2.2日期与时间戳的转换2.3获取年月日、时分秒、星期数、天数等函数2.4时间和秒钟的转换2. ... [详细]
  • 解决SQL Server数据库sa登录名无法连接的问题
    在安装SQL Server数据库后,使用Windows身份验证成功,但使用SQL Server身份验证时遇到问题。本文将介绍如何通过设置sa登录名的密码、启用登录名状态以及开启TCP协议来解决这一问题。 ... [详细]
  • 在将Web服务器和MySQL服务器分离的情况下,是否需要在Web服务器上安装MySQL?如果安装了MySQL,如何解决PHP连接MySQL服务器时出现的连接失败问题? ... [详细]
  • SQL 连接详解与应用
    本文详细介绍了 SQL 连接的概念、分类及实际应用,包括内连接、外连接、自连接等,并提供了丰富的示例代码。 ... [详细]
  • 本文介绍了如何使用Flume从Linux文件系统收集日志并存储到HDFS,然后通过MapReduce清洗数据,使用Hive进行数据分析,并最终通过Sqoop将结果导出到MySQL数据库。 ... [详细]
  • 本文介绍了如何在 Spring 3.0.5 中使用 JdbcTemplate 插入数据并获取 MySQL 表中的自增主键。 ... [详细]
  • BIEE中的最终用户界面被称为Presentation Layer(展现层)。展现层呈现的内容与用户在Web报表开发界面中看到的一致,使用业务语言进行描述,隐藏了技术细节,如星型模型。本文将详细介绍展现层的设计要点及其与业务模型层的关系。 ... [详细]
  • Hadoop的文件操作位于包org.apache.hadoop.fs里面,能够进行新建、删除、修改等操作。比较重要的几个类:(1)Configurati ... [详细]
author-avatar
手机用户2602937555
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有