mybatis中动态使用HashMap进行参数映射

2023-12-09

好的,这有点重新发布这个问题使用 ibatis 将 HashMap 值插入表(但我正在寻找一种不同的方式 - 答案对我不起作用)..

DB1GetStudentDataMapper.xml(这查询一个数据库)

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.testing.db1.DB1GetStudentDataMapper">

<select id="selectAllStudents" resultType="java.util.Map">
        SELECT STUDENT_CD, STUDENT_NM, PARENT_CD, CREATED_DATE
        FROM STUDENT
        WHERE STD_STATUS='ACT'
</select>

</mapper>

DB2InsertStudentMapper.xml(这查询不同的数据库)

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.testing.db2.DB2InsertStudentMapper">
                
<insert id="insertStudent" parameterType="java.util.HashMap">
  INSERT INTO STUDENT
  <!-- dynamically select column names from hashmap -->
  (#{stdMap.keySet}) // this is not working - its coming as null
   <!-- dynamically select values for the above columns from hashmap -->
   VALUES (#{stdMap.values}) // this is not working - its coming as null
</insert>
           
</mapper>

DB2InsertStudentMapper.java

public interface TMODSBDataRefreshMapper {
    
    void insertStudent(@Param("stdMap") HashMap stdMap);
}

StudentDataProcess.java

public class Student {
    
    // I have defaultExecutorType as BATCH in my mapper config file
    
        private DB1GetStudentDataMapper db1Mapper; // Interface Mapper for first data source
        private DB2InsertStudentMapper db2Mapper; // Interface Mapper for second data source
        
        public processStudent() throws Exception {
            
            List<HashMap> rs = db1Mapper.selectAllStudents(); // Gets some 15k+ records
            for(int i =0; i < rs.size(); i++) { // so this will loop through 15k+ records
                HashMap result = rs.get(i);
                System.out.println(result.keySet()); // prints column names from select query [STUDENT_CD, STUDENT_NM, PARENT_CD, CREATED_DATE]
                System.out.println(result.values()); // prints above column values of first data set [1001, Mike, 5001, 2021-07-01]
                
                // All I am trying is to insert above 15k records into different database dynamically rather than creating POJO
                db2Mapper.insertStudent(result);
            }
            
        }
            
}

Note:仅举个例子,我使用了 4 列 - 我有 150 多个列需要使用。

PS:请记住,当您使用较少的列时,此解决方案效果更好 - 但如果您进行批量插入,则效果不佳 - 它会影响性能。


当使用迭代地图时<foreach />,键和值被分配给指定的变量index and item分别。
因此,您的插入语句应该如下所示。

<insert id="insertStudent">
  INSERT INTO STUDENT (
    <foreach collection="stdMap" index="col" separator=",">
      ${col}
    </foreach>
  ) VALUES (
    <foreach collection="stdMap" item="val" separator=",">
      #{val}
    </foreach>
  )
</insert>
  • 你必须使用${}对于列名称和#{}为了价值观。请参阅FAQ了解详情。
  • 要以相同的顺序迭代地图,您应该使用java.util.LinkedHashMap作为结果类型<select />.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mybatis中动态使用HashMap进行参数映射 的相关文章

  • Play框架运行应用程序问题

    每当我尝试运行使用以下命令创建的新 Web 应用程序时 我都会收到以下错误Play http www playframework org Error occurred during initialization of VM Could no
  • Java - 将节点添加到列表的末尾?

    这是我所拥有的 public class Node Object data Node next Node Object data Node next this data data this next next public Object g
  • 制作一个交互式Windows服务

    我希望我的 Java 应用程序成为交互式 Windows 服务 用户登录时具有 GUI 的 Windows 服务 我搜索了这个 我发现这样做的方法是有两个程序 第一个是服务 第二个是 GUI 程序并使它们进行通信 服务将从 GUI 程序获取
  • Final字段的线程安全

    假设我有一个 JavaBeanUser这是从另一个线程更新的 如下所示 public class A private final User user public A User user this user user public void
  • JAXb、Hibernate 和 beans

    目前我正在开发一个使用 Spring Web 服务 hibernate 和 JAXb 的项目 1 我已经使用IDE hibernate代码生成 生成了hibernate bean 2 另外 我已经使用maven编译器生成了jaxb bean
  • 多个 Maven 配置文件激活多个 Spring 配置文件

    我想在 Maven 中构建一个环境 在其中我想根据哪些 Maven 配置文件处于活动状态来累积激活多个 spring 配置文件 目前我的 pom xml 的相关部分如下所示
  • 操作错误不会显示在 JSP 上

    我尝试在 Action 类中添加操作错误并将其打印在 JSP 页面上 当发生异常时 它将进入 catch 块并在控制台中打印 插入异常时出错 请联系管理员 在 catch 块中 我添加了它addActionError 我尝试在jsp页面中打
  • Spring Data JPA 应用排序、分页以及 where 子句

    我目前正在使用 Spring JPA 并利用此处所述的排序和分页 如何通过Spring data JPA通过排序和可分页查询数据 https stackoverflow com questions 10527124 how to query
  • 路径中 File.separator 和斜杠之间的区别

    使用有什么区别File separator和一个正常的 在 Java 路径字符串中 与双反斜杠相反 平台独立性似乎不是原因 因为两个版本都可以在 Windows 和 Unix 下运行 public class SlashTest Test
  • 无法解析插件 Java Spring

    我正在使用 IntelliJ IDEA 并且我尝试通过 maven 安装依赖项 但它给了我这些错误 Cannot resolve plugin org apache maven plugins maven clean plugin 3 0
  • 如何在PreferenceActivity中添加工具栏

    我已经使用首选项创建了应用程序设置 但我注意到 我的 PreferenceActivity 中没有工具栏 如何将工具栏添加到我的 PreferenceActivity 中 My code 我的 pref xml
  • 使用Caliper时如何指定命令行?

    我发现 Google 的微型基准测试项目 Caliper 非常有趣 但文档仍然 除了一些示例 完全不存在 我有两种不同的情况 需要影响 JVM Caliper 启动的命令行 我需要设置一些固定 最好在几个固定值之间交替 D 参数 我需要指定
  • AWS 无法从 START_OBJECT 中反序列化 java.lang.String 实例

    我创建了一个 Lambda 函数 我想在 API 网关的帮助下通过 URL 访问它 我已经把一切都设置好了 我还创建了一个application jsonAPI Gateway 中的正文映射模板如下所示 input input params
  • 如何从指定日期获取上周五的日期? [复制]

    这个问题在这里已经有答案了 如何找出上一个 上一个 星期五 或指定日期的任何其他日期的日期 public getDateOnDay Date date String dayName 我不会给出答案 先自己尝试一下 但是 也许这些提示可以帮助
  • 在mockito中使用when进行模拟ContextLoader.getCurrentWebApplicationContext()调用。我该怎么做?

    我试图在使用 mockito 时模拟 ContextLoader getCurrentWebApplicationContext 调用 但它无法模拟 here is my source code Mock org springframewo
  • 如何从泛型类调用静态方法?

    我有一个包含静态创建方法的类 public class TestClass public static
  • 如何在桌面浏览器上使用 webdriver 移动网络

    我正在使用 selenium webdriver 进行 AUT 被测应用程序 的功能测试自动化 AUT 是响应式网络 我几乎完成了桌面浏览器的不同测试用例 现在 相同的测试用例也适用于移动浏览器 因为可以从移动浏览器访问 AUT 由于它是响
  • 静态变量的线程安全

    class ABC implements Runnable private static int a private static int b public void run 我有一个如上所述的 Java 类 我有这个类的多个线程 在里面r
  • 编译器抱怨“缺少返回语句”,即使不可能达到缺少返回语句的条件

    在下面的方法中 编译器抱怨缺少退货声明即使该方法只有一条路径 并且它包含一个return陈述 抑制错误需要另一个return陈述 public int foo if true return 5 鉴于Java编译器可以识别无限循环 https
  • 将 List 转换为 JSON

    Hi guys 有人可以帮助我 如何将我的 HQL 查询结果转换为带有对象列表的 JSON 并通过休息服务获取它 这是我的服务方法 它返回查询结果列表 Override public List

随机推荐

  • AVAudioPlayer 在模拟器上工作但在真实设备上不工作

    当我播放录制的音频时 出现此错误 致命错误 在解包可选值时意外发现 nil 在这行代码上 SoundPlayer try AVAudioPlayer contentsOfURL getFileURL 但它在除真实设备之外的模拟器上运行良好
  • Rails 表单提交与远程 => true -- js 文件渲染但不执行

    有一个类似的问题here and here但都没有我正在寻找的答案 我也做了很多搜索 rails format js render 但无法解决这个问题 在 Rails 4 中 我有一个经过验证的表单 如下所示 don t want to c
  • 模拟 ScheduledExecutorService 与“不要模拟您不拥有的类型”哲学

    Mocking 预定执行服务确实会让测试我的课程变得更容易 但根据模拟推荐这似乎是一个坏主意 因为模拟类的逻辑可能会以错误的方式使用 但单元测试仍然会报告成功 似乎为它编写一个包装器是 干净 的方式 但我有一种感觉 这只会导致接口的完全重复
  • Python3 在同一行上打印 - 7 段设备格式的数字

    我是 Python 新手 很难将输出打印在一行上 这与在线 Python 课程 Learning Python Essentials Lab 5 1 10 6 和打印到 7 段设备有关 如果您不熟悉 7 段设备 请参阅维基百科 我没有使用任
  • 是否可以将搜索过滤器/框添加到树视图组件中?

    我正在制作扩展 我很好奇是否可以向树组件添加搜索过滤器 框 我目前正在用 javascript 编码扩展 但我不确定它是否可能 这就是我想在树视图顶部添加的内容 它将在 v1 70 中内置到 vscode 中 它在我为垂直选项卡组编写的树视
  • 使用 Linq 表达式和反射获取属性值的通用方法

    亲爱的反思之神 我想要一个通用的GetValue
  • 正则表达式 match() 无法捕获 python 中的简单模式

    我正在尝试在 Python 中使用一些简单的正则表达式函数 我正在使用正则表达式来捕获阿拉伯字母表中的模式 但在最简单的情况下 当人们在模式的开头添加几个字母时 无论是否有连字 它似乎都不起作用 gt gt gt p re compile
  • 等待几秒钟而不阻止 UI 执行

    我想在两条指令之间等待几秒钟 但不阻止执行 例如 Thread Sleep 2000 这不好 因为它会阻塞执行 我的想法是 我调用一个方法 然后等待 X 秒 例如 20 秒 监听即将到来的事件 在 20 秒结束时 我应该根据 20 秒内发生
  • C#.NET 使用 Windows 服务获取计算机的用户名

    我很难获取使用 Windows 服务登录计算机的人的用户名 当同时使用 System Environment UserName 或 WindowsIdentity GetCurrent UserName 时 我得到 NTAUTHORITY
  • 了解Android 6权限方法

    我试图从图库中获取图像并将其设置为图像视图 但在 Android 6 中存在一些权限问题 以下是请求许可的方法 我应该要求读取外部存储还是写入外部存储 这是我到目前为止所做的 private static final int READ CO
  • 如何使用 tastypie 登录 django

    我试图在自定义身份验证中覆盖 is authenticated 我有一些简单的事情 首先 是这样的 class MyAuthentication BasicAuthentication def init self args kwargs s
  • md-icons 如何在浏览器上呈现

    我在我的项目中使用了material2和Material图标 我想知道这些命名图标是如何在浏览器中呈现的 我用过
  • 电子重建内发生未处理的错误

    我正在尝试使用 Sqlite3 重建我的 ElectronJS 应用程序 我已经安装了 Python VS 开发工具 但它仍然给我错误 我的 Package json name hello version 1 0 0 description
  • django中如何区分首次注册用户和常规登录用户

    我所有的工作都使用 django allauthsignin signup and logout功能和工作正常 现在我有一个功能 1 当用户第一次注册并登录时 我需要将他重定向到成功页面 验证页面 success 2 当已经注册的用户登录时
  • 使用 boost::spirit 以任意顺序解析命名参数

    我正在为一种输入文件编写一个解析器 输入文件看起来像 CalculationBlock CalculationTitle Test Parser Input System MatchingRadius 25 0 StepSize 0 01
  • 如何使用 solc 0.5 编译 Solidity

    编译 js const path require path const solc require solc const fs require fs extra const buildPath path resolve dirname bui
  • 当我打印新值时,我得到以前的浮点值

    我正在得到输出0 23从第二个printf 但类型转换给出了所需的输出 如果我不使用类型转换 则会打印先前的值 编译器版本是GCC 6 3 include
  • 如何分析 .net 垃圾收集器?

    我想知道如何分析垃圾收集器的性能并监控三代 我想知道是否有可能在任何时间点知道当前对象生活在什么地方gen0 gen1 gen2 你可以得到PerfMon 中有关 GC 性能的有用信息 但没有你想要的那么细化 NET内存性能有很多 计数器
  • 如何让 geom_errorbar 在 ggplot2 的条形图上正确“闪避”?

    我正在尝试制作带有误差线的分组条形图 但是 我无法使误差条看起来正确 即比主条更薄 并且位置正确 位于条的中心 这position选项和position dodge 似乎工作不正常 我不明白为什么 根据其他类似问题的例子 这应该有效 我正在
  • mybatis中动态使用HashMap进行参数映射

    好的 这有点重新发布这个问题使用 ibatis 将 HashMap 值插入表 但我正在寻找一种不同的方式 答案对我不起作用 DB1GetStudentDataMapper xml 这查询一个数据库