获取map的key并遍历
<foreach collection="map.keys" open="(" close=")" separator="," index="index" item="key">
获取map的value并遍历
<foreach collection="map.values" open="(" close=")" separator="," item="value" index="index">
同时遍历map的key和value(注意:.entrySet() 是可以省略的)
<foreach collection="after.entrySet()" separator="," index="key" item="value" >
${key}=#{value}
</foreach>
代码示例
dao层对应的增删改方法
修改是传了两个map作为参数一个是修改前的map作为条件另一个是修改后的数据
int insert(@Param("map") HashMap<String, String> map,@Param("tableName") String tableName);
int delete(@Param("map") HashMap<String, String> map,@Param("tableName") String tableName);
int update(@Param("before") HashMap<String, String> before,@Param("after") HashMap<String, String> after,@Param("tableName") String tableName);
以下三个代码段则是对应mybatis的语句
<insert id="insert">
insert into ${tableName}
<foreach collection="map.keys" open="(" close=")" separator="," index="index" item="key">
${key}
</foreach>
values
<foreach collection="map.values" open="(" close=")" separator="," item="value" index="index">
#{value}
</foreach>
</insert>
<delete id="delete">
delete from ${tableName} where
<foreach collection="map.entrySet()" index="key" item="value" separator="and">
${key}=#{value}
</foreach>
</delete>
<update id="update">
update ${tableName} set
<foreach collection="after.entrySet()" separator="," index="key" item="value" >
${key}=#{value}
</foreach>
where
<foreach collection="before.entrySet()" index="key" item="value" separator="and">
${key}=#{value}
</foreach>
</update>
其实 .entrySet() 是可以省略的:
<update id="update">
update ${tableName} set
<foreach collection="after" separator="," index="key" item="value" >
${key}=#{value}
</foreach>
where
<foreach collection="before" index="key" item="value" separator="and">
${key}=#{value}
</foreach>
</update>
参考:
- MyBatis获取Map中的key和value
- MyBatis如何遍历Map的key和value
- MyBatis 遍历Map
- MyBatis之foreach遍历Map实现
- MyBatis循环Map(高级用法)
工作中的一个模块:系统设置
SysSettingMapper.java
public interface SysSettingMapper extends BaseMapper<SysSetting> {
int batchInsert(@Param("settingMap") Map<String, Object> settingMap);
}
SysSettingMapper.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">
<mapper namespace="com.wanma.framework_web.mapper.SysSettingMapper">
<insert id="batchInsert">
<foreach collection="settingMap" index="key" item="value" separator=";">
INSERT INTO sys_setting(`name`, `value`) VALUES
(#{key}, #{value})
ON DUPLICATE KEY UPDATE `value` = #{value}
</foreach>
</insert>
</mapper>
表:sys_setting
-- -- 表的结构 `sys_setting` -- CREATE TABLE `sys_setting` ( `id` int(11) NOT NULL COMMENT '自增ID', `name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '名称', `value` varchar(600) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '值', `add_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '添加时间', `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间' ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='系统设置表';