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

 更新时间:2020年12月02日 11:37:24   作者:零三一  
这篇文章主要介绍了Mybatis 动态表名+Map参数传递+批量操作详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

需求:

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

1,查询操作:

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

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

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

2,批量插入操作:

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

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

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

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

补充知识: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基本不用变。

以上这篇Mybatis 动态表名+Map参数传递+批量操作详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Spring MVC+mybatis实现注册登录功能

    Spring MVC+mybatis实现注册登录功能

    这篇文章主要为大家详细介绍了Spring MVC+mybatis实现注册登录功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • springboot获取resources下static目录的位置

    springboot获取resources下static目录的位置

    这篇文章主要为大家详细介绍了springboot获取resources下static目录的位置的三种常用方法,文中的示例代码讲解详细,感兴趣的小伙伴可以参考一下
    2024-12-12
  • 通过Java添加Word文本框过程详解

    通过Java添加Word文本框过程详解

    这篇文章主要介绍了通过Java添加Word文本框过程详解,在Word中,文本框是指一种可移动、可调节大小的文字或图形容器。我们可以向文本框中添加文字、图片、表格等对象,下面,将通过Java编程来实现添加以上对象到Word文本框,需要的朋友可以参考下
    2019-07-07
  • Java杂谈之如何消除代码中一大串参数列表

    Java杂谈之如何消除代码中一大串参数列表

    参数列表和字面意思差不多,主要是表示该参数数量不是固定的,可能会有一个参数,可能多个,不管多少个参数,都放到一个数组处理,这种参数叫可变参数。可变长参数要放在最后一个参数位置处理,但是一个函数里面不能有俩种类型的可变参数
    2021-10-10
  • SpringBoot Bean花式注解方法示例下篇

    SpringBoot Bean花式注解方法示例下篇

    这篇文章主要介绍了SpringBoot Bean花式注解方法,很多时候我们需要根据不同的条件在容器中加载不同的Bean,或者根据不同的条件来选择是否在容器中加载某个Bean
    2023-02-02
  • Java中StringBuilder与StringBuffer使用及源码解读

    Java中StringBuilder与StringBuffer使用及源码解读

    我们前面学习的String就属于不可变字符串,因为理论上一个String字符串一旦定义好,其内容就不可再被改变,但实际上,还有另一种可变字符串,包括StringBuilder和StringBuffer两个类,那可变字符串有什么特点,又怎么使用呢,接下来就请大家跟我一起来学习吧
    2023-05-05
  • RocketMQ4.5.2 修改mqnamesrv 和 mqbroker的日志路径操作

    RocketMQ4.5.2 修改mqnamesrv 和 mqbroker的日志路径操作

    这篇文章主要介绍了RocketMQ 4.5.2 修改mqnamesrv 和 mqbroker的日志路径操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-07-07
  • spring boot Mybatis 拦截器实现拼接sql和修改的代码详解

    spring boot Mybatis 拦截器实现拼接sql和修改的代码详解

    这篇文章主要介绍了spring boot Mybatis 拦截器实现拼接sql和修改,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • java集合PriorityQueue优先级队列方法实例

    java集合PriorityQueue优先级队列方法实例

    这篇文章主要为大家介绍了java集合PriorityQueue优先级队列方法实例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-12-12
  • Java 实现订单未支付超时自动取消功能(京东商城为例)

    Java 实现订单未支付超时自动取消功能(京东商城为例)

    本文以京东网上商城为例,给大家介绍商品在下单后没有支付的情况下,超时自动取消功能,超过24小时,就会自动取消订单,下面使用 Java 定时器实现超时取消订单功能,感兴趣的朋友一起看看吧
    2022-01-01

最新评论