今天在写update代码时候突发奇想,要是我在foreach语句中遍历map不就可以将要修改的值的名字和要修改的值都放到map中一次全拿进来吗?于是我就开始测试
之前学的foreache语句是将要要遍历的List放到map里面,通过map的key找到放到map里面的List
于是我就将想要遍历的map放进了另一个map里面
Map<String, Object> hashMap = new HashMap<>();
hashMap.put("id",2);
hashMap.put("userCode","zyy");
hashMap.put("userName","zyy");
hashMap.put("userPassword","0123456789");
hashMap.put("gender",1);
hashMap.put("birthday","1999-10-01");
hashMap.put( "phone","17872018056");
hashMap.put("address","湖南省岳阳市平江县");
hashMap.put("userRole",1);
hashMap.put("createdBy",1);
hashMap.put("creationDate","2021-05-13");
hashMap.put("modifyBy",1);
hashMap.put("modifyDate","2021-05-13");
Map<String, Object> hashMap2 = new HashMap<>();
hashMap2.put("hashMap",hashMap);
然后通过查询官方文档得知当使用map作为collection集合时index就表示map的键,item代表map中这个键对应的的值,于是其对应的xml代码为
<update id="modify" parameterType="map">
update smbms_user
<foreach collection="hashMap" index="keys" item="value" open="set " separator="," close=" ">
${keys}=#{value}
</foreach>
<where>
id = 2
</where>
</update>
这样就能成功获取到map中的键和值了
在查询资料的过程中我还了解到一种方法
java代码
public int searchCount(Map<String, Object> map) {
Map<String, Object> map1 = new HashMap<String, Object>();
map1.put("aa", map);
return sqlSessionTemplate.selectOne("org.lanqiao.dao.StudentDao.searchCount", map1);
}
xml中代码
<!-- 符合条件的数据一共有多少条 -->
<select id="searchCount" resultType="int" parameterType="map" >
select count(*) from student
<where>
<foreach collection="aa.keys" index="index" item="item" separator="and">
${item}=#{aa[${item}]}
</foreach>
</where>
</select>
这里面有一些我不了解的操作正好一起记录下来
这里aa.keys是获取map中键的集合
还有aa[]是在map中查找[]中填的键对应的值,但是在Java代码中无法使用???这个以后了解了再回来填坑