首页 > 解决方案 > 使用注解时如何在mybatis中使用hashmap将值插入一行?

问题描述

如果我有类似的对象,我可以使用 MyBatis 插入数据库,

public class Student {
   private int id;
   private String name;
}
..
@Insert("INSERT INTO STUDENT (ID,NAME) VALUES (#{id}, #{name})")
@Options(useGeneratedKeys = true, keyProperty = "id")
void insert(Student student);

但是,如果我有一个带有值的哈希图,我该如何使用 mybatis,

studentDetailsMap = [{id,10},{name,"smith"}] //represented as key value pairs for understanding

我所拥有的是具有如此多列的大表,并且 mybatis 可以将数据作为每行的哈希图提供给 mybatis。这种情况太多了,所以我不想创建很多pojo类,这就是为什么我试图找到一种直接从hashmap插入到mybatis的方法。

标签: javamybatisspring-mybatis

解决方案


  1. 在映射器 XML 中创建映射器元素:

    <insert id="fnInsert"> insert into ${tablename} <trim> <trim prefix="(" suffix=")" suffixOverrides=","> <foreach collection="mapdata" item="element" index="index" separator=",">${index}</foreach>
    </trim> select <foreach collection="mapdata" item="element" index="index" separator=","> <trim> #{element} </trim> </foreach> from dual </trim> </insert>


  1. 在界面中创建相应的函数。

public int insertMICTables(@Param("tablename") String tablename, @Param("mapdata") Map<String, String> mapdata);

  1. 准备输入参数:

    Map<String, String> mapdata = new HashMap<String, String>();
    mapdata.put("columna", "id01");
    mapdata.put("columnb", "Hello manager");
    this._epMapper.insertMICTables("tablename", mapdata) ;
    

推荐阅读