首页 > 其他分享 >Mybatis如何动态生成插入的列及批量插入值

Mybatis如何动态生成插入的列及批量插入值

时间:2024-08-15 08:58:22浏览次数:12  
标签:hashMap put 列及 插入 Mybatis new hashMap2 LinkedHashMap

有时会遇到根据特定的情况动态创建表,并对表进行批量插入,对于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的写法。

标签:hashMap,put,列及,插入,Mybatis,new,hashMap2,LinkedHashMap
From: https://www.cnblogs.com/zys2019/p/18359145

相关文章

  • Mybatis学习日记-day4-ResultMap
    一、学习目标    在之前的学习博客里对数据进行增删改查的操作,都是基于数据库表的列名Java对象的属性名一致的情况下,但是,这个世界并不是这么美好。        当数据库表的列名与Java对象的属性名不一致,或者数据类型需要特殊处理;此外,如果数据库中的某个列是枚......
  • 高阶数据结构(Java):AVL树插入机制的探索
    目录1、概念1.1什么是AVL树2.1平衡因子3、AVL树节点的定义4、AVL树的插入机制4.1初步插入节点4.2更新平衡因子4.3 提升右树高度4.3.1右单旋4.3.2左右双旋4.4 提升左树高度4.4.1左单旋 4.4.2右左双旋5、AVL树的验证6、AVL树的删除1、概念1.1什......
  • leetcode面试经典150题- 380. O(1) 时间插入、删除和获取随机元素
     https://leetcode.cn/problems/insert-delete-getrandom-o1/description/?envType=study-plan-v2&envId=top-interview-150gotypeRandomizedSetstruct{isHavemap[int]inttotalintarr[]int}funcConstructor()RandomizedSet{retur......
  • Mybatis扩展
    Mybatis扩展1.批量扫描mapper在之前每创建一个mapper,就需要在mybatis-config.xml文件中,注册该mapper。<mappers>  <mapperresource="mapper/EmployeeMapper.xml"/></mappers>可以在mappers标签中使用package标签,进行包扫描<mappers>  <packagename="com.z......
  • 代码随想录训练营day20|235. 二叉搜索树的最近公共祖先,701.二叉搜索树中的插入操作,450
    二叉搜索树的最近公共祖先题目根据二叉搜索树的特性,它的公共祖先肯定是值夹在p和q之间的(满足此条件的第一个点)TreeNode*getroot(TreeNode*root,TreeNode*p,TreeNode*q){ if(rooot==NULL)returnNULL; if(root->val<p->val&&root->val<q->val){ returngetroot(r......
  • Mybatis动态sql
    Mybatis动态sql在创建sql语句时,有时会遇到传入的参数为空的问题,也就是某些条件有时候不取值。这时就可以用动态sql来创建sql语句,不用自己拼接sql语句。1.if和where标签在sql语句条件外面包一层if标签,if标签的属性test可以进行判断,当判断为true后才会把标签内部的条件拼......
  • Magic-Api数据库插入操作汇总
    1.测试表准备--id非自增CREATETABLE`test_idms`(`id`varchar(32)CHARACTERSETutf8mb4COLLATEutf8mb4_general_ciNOTNULL,`name`varchar(255)COLLATEutf8mb4_general_ciDEFAULTNULLPRIMARYKEY(`id`))ENGINE=InnoDB;--id自增CREATETABLE......
  • springboot+vue+mybatis计算机毕业设计汉服商城网站+PPT+论文+讲解+售后
    本系统为用户而设计制作“梦回汉唐”汉服商城网站,旨在实现“梦回汉唐”汉服商城网站智能化、现代化管理。本“梦回汉唐”汉服商城网站自动化系统的开发和研制的最终目的是将“梦回汉唐”汉服商城网站的运作模式从手工记录数据转变为网络信息查询管理,从而为现代管理人员的使用提......
  • MyBatis从入门到面试:超全
    MyBatis从入门到面试MyBatis启动!!!1.引入依赖<dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.13</version><!--版本号可以根据需要进行调整--></dependency>1.配置文件首先,我们需......
  • MyBatis基本流程
    MyBatis基本流程基本使用步骤准备数据CREATEDATABASE`mybatis-example`;​USE`mybatis-example`;​CREATETABLE`t_emp`(emp_idINTAUTO_INCREMENT,emp_nameCHAR(100),emp_salaryDOUBLE(10,5), PRIMARYKEY(emp_id));​INSERTINTO`t_emp`(emp_na......