有时会遇到根据特定的情况动态创建表,并对表进行批量插入,对于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如何动态生成插入的列及批量插入值的更多相关文章

  1. MyBatis :Insert (返回主键、批量插入)

    一.前言    数据库操作怎能少了INSERT操作呢?下面记录MyBatis关于INSERT操作的笔记,以便日后查阅. 二.insert元素 属性详解   其属性如下: parameterType , ...

  2. Mybatis 插入一条或批量插入 返回带有自增长主键记录

    首先讲一下,  插入一条记录返回主键的 Mybatis 版本要求低点,而批量插入返回带主键的 需要升级到3.3.1版本,3.3.0之前的都不行, <dependency> <grou ...

  3. mybatis 特殊符号转义和模糊查询和批量插入

    1 xml文件特殊符号转义 <          < >          > <>   <> &      & &apos; ...

  4. SQLServer如何在批量插入后,获取批量插入的自增列的值

    解决方法如下: Use the OUTPUT functionality to grab all the INSERTED Id back into a table. 使用output 功能获取所有插 ...

  5. C#中使用SqlBulkCopy的批量插入和OracleBulkCopy的批量插入

    1.首先我们做一下准备工作,在sql server和oracle分别建立一个Student表 oracle中 --创建Student表 -- create table Student( stuId n ...

  6. java反射的应用+mybatis+spring动态生成数据库表

    最近接触了一个类似于代码生成工具的活.思路是,通过java的反射机制得到类的字段和字段类型, 从而可以创建一个map集合存储表名(由类名决定的特殊结构字符串),表字段(由类变量确定),表字段类型(由变 ...

  7. PHP 根据php传的值修改 select 中动态生成的 option 组的默认选中值

    有一个情况今天遇到了:通过后台传过来的一组下拉框的option值,需要默认选中其中某一项. html 部分是这样的: <select class="form-control" ...

  8. mybatis 的动态SQL

    在XML 中支持的几种标签: • if • choose.when.otherwise • where • set • trim • foreach OGNL 表达式 1. el or e22. el ...

  9. 个人永久性免费-Excel催化剂功能第32波-空行空列批量插入和删除

    批量操作永远是效率提升的王道,也是Excel用户们最喜欢能够实现的操作虽说有些批量操作不一定合适Excel的最佳实践操作,但万千世界,无奇不有,特别是在国人眼中领导最大的等级森严的职场环境下.Exce ...

  10. 161102、MyBatis中批量插入

    方法一: <insert id="insertbatch" parameterType="java.util.List"> <selectKe ...

随机推荐

  1. SciTech-Mathematics-数学专业笔记总结

    数学专业笔记总结: https://gitee.com/duanjinyi/real-number-set-and-function

  2. 题解:[NOIP2016 提高组] 蚯蚓

    洛谷同步链接 题目传送门 前置结论 结论 对于整数 $x_1,x_2$ ,当 $x_1\geq x_2,0<p<1$ 时有: $\lfloor px_1 \rfloor \geq \lfl ...

  3. mysql中date_format函数格式化日期,如何精确到毫秒?

    直接看官网文档 : https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_date-format ...

  4. win11 24h2系统更新后右键没反应的问题

    有雨林木风官网的用户,已经在电脑上更新到最新版win11 24h2系统了,但是更新后,却出现使用鼠标右键没有反应的问题,该如何解决呢?本文中,雨林木风小编将于大家分享详细的处理方法,有需要的朋友可以一 ...

  5. unity Addressable Asset

    需要自己在Package manager添加Addressable包 使用方法:https://www.jianshu.com/p/e79b2eef97bf

  6. DBA 行业是否将会逐渐消亡?

    DBA 行业是否将会消亡? 最近几年由于企业数据上云.自动化运维.人工智能等技术的快速发展,让很多 DBA 感到焦虑,担心技术的变革会让自己饭碗不保,其实大可不必如此.新技术的到来意味着一些简单机械. ...

  7. LCP 35. 电动车游城市(分层图最短路+Dijkstra)

    leedcode测试链接:https://leetcode.cn/problems/DFPeFJ/ 题解: class Solution { public: int electricCarPlan(v ...

  8. Ubuntu 22.04 安装 XRDP

    Ubuntu 22.04 安装 XRDP,替代系统自带RDP远程桌面 原因:Ubuntu的自带RDP远程桌面很好用,但很傻,必须设置自动登录才能用.而设置了自动登录也不能解开KEYRING,必须在电脑 ...

  9. 修改 winget 镜像

    以管理员身份启动 PowerShell , 运行以下 2 条命令: winget source remove winget winget source add winget https://mirro ...

  10. 别再为密码管理器付费了!我用 Sealos 一键部署了 Vaultwarden,太香了!

    哈喽兄弟们,是我!今天来聊个扎心的话题:密码管理器. 1Password 太贵,LastPass 不安全,免费的又各种限制... 咱们只想安安静静地记个密码,怎么就这么难? 所以,今天我就来给大家安利 ...