mybatis實(shí)現(xiàn)遍歷Map的key和value
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 查詢表結(jié)構(gòu)是否存在 -->
<select id="selectOne" parameterType="java.util.HashMap"
resultType="java.util.HashMap">
select count(*) as num from ${tableName} where seq =
#{seq};
</select>
<!-- 1.1 插入一條數(shù)據(jù) -->
<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 刪除無效數(shù)據(jù) -->
<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<>(); //傳入的參數(shù)
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
最近做東西,需要向數(shù)據(jù)庫存儲(chǔ)一個(gè)保存在HashMap的key和value中的數(shù)據(jù)。具體的結(jié)構(gòu)大致是Map<Object, Set<String>>。
數(shù)據(jù)庫中需要保存兩個(gè)個(gè)字段:1.key中對象的id,set中的多個(gè)string,顯然id和set中的string是1對多的關(guān)系;需要嵌套循環(huán)。
一開始懷疑Mybatis能否做到這樣靈活sql,經(jīng)過嘗試,證明了Mybatis的強(qiáng)大。
具體做法:(Oracle數(shù)據(jù)庫)
<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:就是在接口中使用@Param("aclDeviceMap")標(biāo)注了變量
使用
aclDeviceMap.keys可以取到所有的key,遍歷。
內(nèi)層循環(huán)中使用
aclDeviceMap[item]類似aclDeviceMap.get("key")取當(dāng)前key對應(yīng)的value值。由于value是set所以還需要遍歷。
結(jié)果保存成功。再次膜拜強(qiáng)大的Mybatis。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
基于EasyExcel實(shí)現(xiàn)百萬級數(shù)據(jù)導(dǎo)入導(dǎo)出詳解
大數(shù)據(jù)的導(dǎo)入和導(dǎo)出,相信大家在日常的開發(fā)、面試中都會(huì)遇到。本文將為大家詳細(xì)介紹一下如何利用EasyExcel實(shí)現(xiàn)百萬級數(shù)據(jù)導(dǎo)入導(dǎo)出,需要的可以參考一下2023-01-01
spring-boot-maven-plugin引入出現(xiàn)爆紅(已解決)
這篇文章主要介紹了spring-boot-maven-plugin引入出現(xiàn)爆紅(已解決),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03
詳解Android系統(tǒng)中的root權(quán)限獲得原理
這篇文章主要介紹了詳解Android系統(tǒng)中的Root權(quán)限獲得原理,安卓基于Linux,所以原理也相當(dāng)于Linux中的root用戶,需要的朋友可以參考下2015-08-08
對SpringBoot項(xiàng)目Jar包進(jìn)行加密防止反編譯的方案
最近項(xiàng)目要求部署到其他公司的服務(wù)器上,但是又不想將源碼泄露出去,要求對正式環(huán)境的啟動(dòng)包進(jìn)行安全性處理,防止客戶直接通過反編譯工具將代碼反編譯出來,本文介紹了如何對SpringBoot項(xiàng)目Jar包進(jìn)行加密防止反編譯,需要的朋友可以參考下2024-08-08
Eclipse可視化插件WindowBuilder的安裝方法
這篇文章主要介紹了Eclipse可視化插件WindowBuilder的安裝方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06
java使用MulticastSocket實(shí)現(xiàn)多點(diǎn)廣播
這篇文章主要為大家詳細(xì)介紹了java使用MulticastSocket實(shí)現(xiàn)多點(diǎn)廣播,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-01-01

