Mybatis如何动态生成插入的列及批量插入值
有时会遇到根据特定的情况动态创建表,并对表进行批量插入,对于Mybatis来说,也是非常简单的。
先看dao层
void insertBatch(@Param("tableName") String tableName, @Param("dbColumns") List<String> dbColumns,@Param("dbValues") List<LinkedHashMap> dbValues);
注:这里的值dbValues必须使用LinkedHashMap类型,因为其内部元素是有序的,否则会导致插入列不对应。
sql语句(mapper.xml)
<!--批量插入values-->
<sql id="values">
<foreach item="item" collection="dbValues" separator=",">
<foreach collection="item" item="detailItem" index="index" open="(" close=")" separator=",">
#{detailItem}
</foreach>
</foreach>
</sql> <!--批量插入-->
<insert id="insertBatch">
insert into ${tableName} (
<foreach collection="dbColumns" item="columnItem" separator=",">
${columnItem}
</foreach>
)
values <include refid="values"/>
</insert>
实际上是对字段进行进一步循环。
测试方法
List<String> cols = new ArrayList<>(Arrays.asList("name", "sex", "age"));
List<LinkedHashMap> data = new ArrayList<>();
LinkedHashMap hashMap = new LinkedHashMap();
hashMap.put("name", "张三");
hashMap.put("sex", "男");
hashMap.put("age", "12");
LinkedHashMap hashMap2 = new LinkedHashMap();
hashMap2.put("name", "张三");
hashMap2.put("sex", "男");
hashMap2.put("age", "12");
data.add(hashMap);
data.add(hashMap2);
userDao.insertBatch("t_user_001", cols, data);
这个测试方法只是为了演示,实际场景可能不止如此,主要为了展示xml的写法。
Mybatis如何动态生成插入的列及批量插入值的更多相关文章
- MyBatis :Insert (返回主键、批量插入)
一.前言 数据库操作怎能少了INSERT操作呢?下面记录MyBatis关于INSERT操作的笔记,以便日后查阅. 二.insert元素 属性详解 其属性如下: parameterType , ...
- Mybatis 插入一条或批量插入 返回带有自增长主键记录
首先讲一下, 插入一条记录返回主键的 Mybatis 版本要求低点,而批量插入返回带主键的 需要升级到3.3.1版本,3.3.0之前的都不行, <dependency> <grou ...
- mybatis 特殊符号转义和模糊查询和批量插入
1 xml文件特殊符号转义 < < > > <> <> & & ' ...
- SQLServer如何在批量插入后,获取批量插入的自增列的值
解决方法如下: Use the OUTPUT functionality to grab all the INSERTED Id back into a table. 使用output 功能获取所有插 ...
- C#中使用SqlBulkCopy的批量插入和OracleBulkCopy的批量插入
1.首先我们做一下准备工作,在sql server和oracle分别建立一个Student表 oracle中 --创建Student表 -- create table Student( stuId n ...
- java反射的应用+mybatis+spring动态生成数据库表
最近接触了一个类似于代码生成工具的活.思路是,通过java的反射机制得到类的字段和字段类型, 从而可以创建一个map集合存储表名(由类名决定的特殊结构字符串),表字段(由类变量确定),表字段类型(由变 ...
- PHP 根据php传的值修改 select 中动态生成的 option 组的默认选中值
有一个情况今天遇到了:通过后台传过来的一组下拉框的option值,需要默认选中其中某一项. html 部分是这样的: <select class="form-control" ...
- mybatis 的动态SQL
在XML 中支持的几种标签: • if • choose.when.otherwise • where • set • trim • foreach OGNL 表达式 1. el or e22. el ...
- 个人永久性免费-Excel催化剂功能第32波-空行空列批量插入和删除
批量操作永远是效率提升的王道,也是Excel用户们最喜欢能够实现的操作虽说有些批量操作不一定合适Excel的最佳实践操作,但万千世界,无奇不有,特别是在国人眼中领导最大的等级森严的职场环境下.Exce ...
- 161102、MyBatis中批量插入
方法一: <insert id="insertbatch" parameterType="java.util.List"> <selectKe ...
随机推荐
- SciTech-Mathematics-数学专业笔记总结
数学专业笔记总结: https://gitee.com/duanjinyi/real-number-set-and-function
- 题解:[NOIP2016 提高组] 蚯蚓
洛谷同步链接 题目传送门 前置结论 结论 对于整数 $x_1,x_2$ ,当 $x_1\geq x_2,0<p<1$ 时有: $\lfloor px_1 \rfloor \geq \lfl ...
- mysql中date_format函数格式化日期,如何精确到毫秒?
直接看官网文档 : https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_date-format ...
- win11 24h2系统更新后右键没反应的问题
有雨林木风官网的用户,已经在电脑上更新到最新版win11 24h2系统了,但是更新后,却出现使用鼠标右键没有反应的问题,该如何解决呢?本文中,雨林木风小编将于大家分享详细的处理方法,有需要的朋友可以一 ...
- unity Addressable Asset
需要自己在Package manager添加Addressable包 使用方法:https://www.jianshu.com/p/e79b2eef97bf
- DBA 行业是否将会逐渐消亡?
DBA 行业是否将会消亡? 最近几年由于企业数据上云.自动化运维.人工智能等技术的快速发展,让很多 DBA 感到焦虑,担心技术的变革会让自己饭碗不保,其实大可不必如此.新技术的到来意味着一些简单机械. ...
- LCP 35. 电动车游城市(分层图最短路+Dijkstra)
leedcode测试链接:https://leetcode.cn/problems/DFPeFJ/ 题解: class Solution { public: int electricCarPlan(v ...
- Ubuntu 22.04 安装 XRDP
Ubuntu 22.04 安装 XRDP,替代系统自带RDP远程桌面 原因:Ubuntu的自带RDP远程桌面很好用,但很傻,必须设置自动登录才能用.而设置了自动登录也不能解开KEYRING,必须在电脑 ...
- 修改 winget 镜像
以管理员身份启动 PowerShell , 运行以下 2 条命令: winget source remove winget winget source add winget https://mirro ...
- 别再为密码管理器付费了!我用 Sealos 一键部署了 Vaultwarden,太香了!
哈喽兄弟们,是我!今天来聊个扎心的话题:密码管理器. 1Password 太贵,LastPass 不安全,免费的又各种限制... 咱们只想安安静静地记个密码,怎么就这么难? 所以,今天我就来给大家安利 ...