Mybatis 动态表名+Map参数传递+批量操作详解

作者:零三一 时间:2023-04-02 04:08:00 

需求:

之前项目一个变动,需要对3张mysql数据库表数据进行清洗,3张表表名不同,表结构完全相同,需要对这3张表进行相同的增、改、查动作,一开始比较紧急先对一张表进行操作,后来复制了3个一样的 service、dao、mapper等。后来对代码进行优化,研究了一下动态表名的处理。

1,查询操作:

查询操作只需要传入动态表名的时候,传递参数仍然是map

mapper.xml内,需要使用statementType="STATEMENT",采用非预编译模式

mapper.xml内,动态表名的获取使用 ${tableName}

Mybatis 动态表名+Map参数传递+批量操作详解

2,批量插入操作:

查询操作只需要传入动态表名的时候,传递参数仍然是map

mapper.xml内,不需要使用statementType="STATEMENT",否则会在运行时报错提示语法错误(具体原因不是很清楚)。

动态表名的获取使用 ${tableName}, 而insert 的 collection 属性名为传入参数的map内的key名,不需要任何修饰符。

list内容使用 #{item.guid}来获取,而不是$。

Mybatis 动态表名+Map参数传递+批量操作详解

补充知识:mybatis动态传入表名并返回map,返回空间点的坐标

mybatis学习中

动态传入表名并返回某几个字段map,取某个空间表的shape字段的坐标。代码如下

xml文件


<select id="selectLocationByPrimaryKey" statementType="STATEMENT" resultType="java.util.HashMap" parameterType="java.util.Map">
  select t.shape.minx as X,t.shape.miny as Y from ${sourceObj} t where OBJECTID = ${featureId}
</select>

注意statementType必须,且值必须是大写的STATEMENT,参数传入为多个,用map。

dao文件


public void selectLocByPK(String sourceObj, Long featureId) {
params.put("sourceObj", "sde."+sourceObj);
params.put("featureId", featureId);
Map map = this.getSqlSessionTemplate().selectOne("selectLocationByPrimaryKey", params);
Double x = (Double)map.get("X");
Double y = (Double)map.get("Y");
System.out.println(x+","+y);
}

注意查询的是sde用户下的表名是参数传递的sourceObj,因为用其他用户连接的数据库 所以查询其他用户下的表的时候必须用用户名加表名。当然前提你这个用户有查询其他用户表的权限。params类型是HashMap。xml文件中取值时候必须要跟此地方绑定的key值一直,不然取到为null.此处key为xml文件的时候查询列的别名。

只是一条数据,多条数据可以用selectList 方法 返回List ,xml基本不用变。

来源:https://blog.csdn.net/xiaomao267/article/details/79957499

标签:Mybatis,表名,Map参数
0
投稿

猜你喜欢

  • Android框架组件Lifecycle的使用详解

    2022-08-01 08:48:59
  • 谈谈Java中整数类型(short int long)的存储方式

    2023-01-01 08:24:33
  • Java实现时间日期格式转换示例

    2023-06-06 04:45:11
  • 关于Java反编译字节码文件

    2021-10-07 01:41:32
  • C#波形图控件制作示例程序

    2022-02-24 21:50:40
  • java线程之用Thread类创建线程的方法

    2023-02-09 18:35:07
  • Java8方法引用及构造方法引用原理实例解析

    2022-07-24 08:21:22
  • c#解压文件的实例方法

    2022-04-25 09:49:40
  • 详解Java ES多节点任务的高效分发与收集实现

    2021-08-03 13:59:02
  • spring data jpa如何使用自定义repository实现类

    2023-05-31 07:41:17
  • android TextView设置中文字体加粗实现方法

    2023-08-06 02:32:03
  • 基于Java的guava开源库工具类

    2022-04-07 05:37:53
  • 基于C#的音乐播放器主Form实现代码

    2022-07-13 01:21:36
  • 深入了解Java虚拟机栈以及内存模型

    2022-02-17 13:37:50
  • 教你3分钟了解Android 简易时间轴的实现方法

    2023-04-02 20:56:19
  • java编程实现基于UDP协议传输数据的方法

    2022-11-14 04:22:22
  • C# 对象映射的高性能方案

    2021-09-22 08:03:19
  • Java针对ArrayList自定义排序的2种实现方法

    2022-01-30 03:47:34
  • java对象拷贝详解及实例

    2023-01-20 08:27:00
  • java中sdk与jdk的区别详细解析

    2023-11-25 03:37:14
  • asp之家 软件编程 m.aspxhome.com