mybatis實現(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ù)庫存儲一個保存在HashMap的key和value中的數(shù)據(jù)。具體的結(jié)構(gòu)大致是Map<Object, Set<String>>。
數(shù)據(jù)庫中需要保存兩個個字段:1.key中對象的id,set中的多個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。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java?方法(方法的定義,可變參數(shù),參數(shù)的傳遞問題,方法重載,方法簽名)
這篇文章主要介紹了Java?方法(方法的定義,可變參數(shù),參數(shù)的傳遞問題,方法重載,方法簽名),文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,感興趣的小伙伴可以參考一下2022-09-09使用Spring開啟@Async異步方式(javaconfig配置)
這篇文章主要介紹了使用Spring開啟@Async異步方式(javaconfig配置),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-08-08Dubbo+Nacos服務(wù)啟動報錯,返回unknown user的問題
這篇文章主要介紹了Dubbo+Nacos服務(wù)啟動報錯,返回unknown user的問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-09-09Spring中的@Conditional注解實現(xiàn)分析
這篇文章主要介紹了Spring中的@Conditional注解實現(xiàn)分析, @Conditional是Spring 4出現(xiàn)的注解,但是真正露出價值的是Spring Boot的擴(kuò)展@ConditionalOnBean等,需要的朋友可以參考下2023-12-12Java中JDBC實現(xiàn)動態(tài)查詢的實例詳解
從多個查詢條件中隨機(jī)選擇若干個組合成一個DQL語句進(jìn)行查詢,這一過程叫做動態(tài)查詢。下面通過實例代碼給大家講解JDBC實現(xiàn)動態(tài)查詢的方法,需要的朋友參考下吧2017-07-07