栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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 t.shape.minx as X,t.shape.miny as Y from ${sourceObj} t where OBJECTID = ${featureId}
 

注意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参数传递+批量操作详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持考高分网。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/130118.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号