java - 使用注解时如何在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的方法。
解决方案
在映射器 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>
- 在界面中创建相应的函数。
public int insertMICTables(@Param("tablename") String tablename, @Param("mapdata") Map<String, String> mapdata);
准备输入参数:
Map<String, String> mapdata = new HashMap<String, String>(); mapdata.put("columna", "id01"); mapdata.put("columnb", "Hello manager"); this._epMapper.insertMICTables("tablename", mapdata) ;
推荐阅读
- web-config - 将 Web.Config 中的 URL 重写规则从 page?v=data 更改为 /page/data 而无需重定向
- c# - 如何从 lambda 表达式中提取自定义属性值?
- swift - 如何在 ScrollView 中保存缩放视图
- html - 如何解决从 observable 获取数据的问题
- python - 如何限制我的服务器一次只接受一个客户端套接字连接?
- pattern-matching - 球拍图案匹配套装
- kotlin - 无法将 ArrayList 保存到 sharedpreferences
- javascript - 使用电子邮件链接登录会在 Web 应用程序上出现无效模式错误
- django - 如何从多表单按钮提交中删除 django 对象?
- c++ - 为 Debian 软件包指定较新的 C++ 标准库依赖项