文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

mybatis实现遍历Map的key和value

2024-04-02 19:55

关注

mybatis 遍历Map的key和value

sql.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">
<!--namespace必须是接口的全类名 -->
<mapper namespace="com.genius">
 
	<!-- 1.0 查询表结构是否存在 -->
	<select id="selectOne" parameterType="java.util.HashMap"
		resultType="java.util.HashMap">
		select count(*) as num from ${tableName} where seq =
		#{seq};
	</select>
 
	<!-- 1.1 插入一条数据 -->
	<insert id="insertOne" parameterType="java.util.Map">
		insert into ${tableName}
		<foreach collection="content.keys" item="key" open="(" close=")"
			separator=",">
			${key}
		</foreach>
		values
		<foreach collection="content.values" item="value" open="("
			close=")" separator=",">
			#{value}
		</foreach>
	</insert>
 
	<!-- 1.2 更新记录 -->
	<update id="updateOne" parameterType="java.util.Map">
		UPDATE ${tableName} SET
		<foreach collection="content.keys" item="key" open="" close=""
			separator=",">
			${key} = #{content[${key}]}
		</foreach>
		where seq = #{content[seq]} and genius_uid <=
		#{content[genius_uid]};
	</update>
 
	<!-- 1.3 删除无效数据 -->
	<delete id="deleteOne" parameterType="java.util.Map">
		delete from ${tableName}
		where seq = #{content[seq]};
	</delete>
 
</mapper>

java代码

SqlSession session = MyBatisConnectionFactory.getSession("pg");
				HashMap<String, Object> params = new HashMap<>(); //传入的参数
				params.put("content", tableContent);
				params.put("tableName", tableName);
				params.put("seq", seq);
int flag = session.delete("deleteOne", params); //删除记录
HashMap<String, Object> map = session.selectOne("selectOne", params); //查询记录是否存在
flag = session.update("updateOne", params) > 0 ? true : false; //更新
flag = session.insert("insertOne", params) > 0 ? true : false; //新增

foreach嵌套遍历Map的key和value

最近做东西,需要向数据库存储一个保存在HashMap的key和value中的数据。具体的结构大致是Map<Object, Set<String>>。

数据库中需要保存两个个字段:1.key中对象的id,set中的多个string,显然id和set中的string是1对多的关系;需要嵌套循环。

一开始怀疑Mybatis能否做到这样灵活sql,经过尝试,证明了Mybatis的强大。

具体做法:(Oracle数据库)

<insert id="saveMatchResult" >
  INSERT INTO sp4_acl_so (acl_id, so_uuid__proc_def_id)
  <foreach collection="aclDeviceMap.keys" index="index" item="item" separator="UNION ALL">
    <foreach collection="aclDeviceMap[item]" index="index_set" item="set" separator="UNION ALL">
      SELECT #{item.aclId}, #{set}
      FROM DUAL
    </foreach>
  </foreach>
</insert>

使用

aclDeviceMap.keys可以取到所有的key,遍历。

内层循环中使用

aclDeviceMap[item]类似aclDeviceMap.get("key")取当前key对应的value值。由于value是set所以还需要遍历。

结果保存成功。再次膜拜强大的Mybatis。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯