mybatia的mypper.xml文件,参数类型为map,map里有一个键值对的值为数组,如何解析,例子可供参考

最近做了一些从hebernate到mybatis的迁移,hebernate中各种的关联查询原本想在mybatis中实现,可发觉没必要,只是多写几条sql的问题。关键是遇到map传递数组问题,折磨了不少时间,问题是这样的,sql中有一个查询,大概是where depId in (‘1818‘,‘1058‘,‘999‘),括号里面是数组,数组要从参数map取出,如何在xml文件中实现这条sql呢。

首先,map的类型要为map<String,Object>类型,这样值里面才能放入数组,我是这样写的:

Map<String,Object> map = new HashMap<String,Object>();
map.put("tag", "1818");
String childDeps="1000,1058,999"; 
String[] array = childDeps.split(",");
map.put("childdeps", array);

然后xml里面是这样的:

<select id="pagePoliciesByParamsMapWithDep" parameterClass="java.util.Map" resultClass="policyListItemBean">
select t.ID id,
t.NAME name,
t.DEVICE_TYPE deviceType,
t.TAG tag,
t.UPDATE_TIME updateTime,
t.IS_DEFAULT isDefault,
t.TYPE type,
pd.DEPID depId,
COUNT(d.ID) countOfDevicesInstalled
from (select * from (select * from t_c_policy t
where 1=1
<isNotNull prepend="AND" property="tag">
t.TAG =#tag#
</isNotNull>
<isNotEmpty prepend="AND" property="name">
t.NAME = #name#
</isNotEmpty>
)t
where NOT EXISTS(select * from policy_department pd where t.ID=pd.POLICYID)
or t.ID in (select POLICYID from policy_department b
where 1=1
<isNotNull prepend="AND" property="childdeps">
b.DEPID in
<iterate property="childdeps" open="(" close=")" conjunction=",">
#childdeps[]#
</iterate>
</isNotNull>
)
ORDER BY t.NAME)t LEFT JOIN policy_department pd ON t.ID=pd.POLICYID
LEFT JOIN t_c_binded_policy b ON t.ID=b.POLICY_ID
LEFT JOIN (SELECT * from t_c_device d where d.archieved=‘0‘
and (d.status=‘2‘ or d.status=‘4‘)) d ON b.ID=d.ID GROUP BY t.ID ORDER BY t.NAME
</select>

这是一整条sql,关键部分是这里:

where 1=1
<isNotNull prepend="AND" property="childdeps"> 
b.DEPID in
<iterate property="childdeps" open="(" close=")" conjunction=",">
#childdeps[]#
</iterate>
</isNotNull>

有个细节要注意:键一定要全部小写,大写的话sql好像不认,我试过,如把childdeps写成childDeps,这个sql是不能执行的,即便能执行,这个数组也是读取不到的,这个错误我找了好久才找到这个地方。

存为备忘吧

时间: 2024-10-10 15:37:31

mybatia的mypper.xml文件,参数类型为map,map里有一个键值对的值为数组,如何解析,例子可供参考的相关文章

Abp中SwaggerUI的接口文档添加上传文件参数类型

在使用Swashbuckle上传文件的时候,在接口文档中希望看到上传控件,但是C#中,没有FromBodyAttribute这个特性,所以需要在运行时,修改参数的swagger属性. 首先看下,最终效果: 下面介绍实现. 实现原理,通过swagger提供的filter,找到action中带有SwaggerFileUpload特性的参数,然后给swagger operaion.parameters添加一个自定义的参数,即文件类型参数即可. (1)定义SwaggerFileUploadAttribu

判断XML文件是否存在,不存在就创建一个XMl文件,存在就在里面添加

if (File.Exists(xmlPath + "\\" + xmlName)) //判断文件是否寸在                 {     //存在的情况下                     XmlDocument xmldoc = new XmlDocument();                     xmldoc.Load(xmlPath + "\\" + xmlName);                     //存在文件     

Servlet中Web.xml文件的配置

1 定义头和根元素 部署描述符文件就像所有XML文件一样,必须以一个XML头开始.这个头声明可以使用的XML版本并给出文件的字符编码.DOCYTPE声明必须立即出现在此头之后.这个声明告诉服务器适用的servlet规范的版本(如2.2或2.3)并指定管理此文件其余部分内容的语法的DTD(Document Type Definition,文档类型定义).所有部署描述符文件的顶层(根)元素为web-app.请注意,XML元素不像HTML,他们是大小写敏感的.因此,web-App和WEB-APP都是不

Android - SpannableString或SpannableStringBuilder以及string.xml文件中的整型和string型代替

背景介绍 在开发应用过程中经常会遇到显示一些不同的字体风格的信息犹如默认的LockScreen上面的时间和充电信息.对于类似的情况,可能第一反应就是用不同的多个TextView来实现,对于每个TextView设置不同的字体风格以满足需求. 这里推荐的做法是使用android.text.*;和 android.text.style.*;下面的组件来实现RichText:也即在同一个TextView中设置不同的字体风格.对于某些应用,比如文本编辑,记事本,彩信,短信等地方,还必须使用这些组件才能达到

python读取,写入和更新xml文件

VOC数据集的标注文件都是xml格式,最近需要频繁处理xml文件的读取和更新,整理下python处理xml文件的方法. XML 指可扩展标记语言(eXtensible Markup Language), 被设计用来传输和存储数据.python中有三个模块解析xml文件:DOM, ElementTree,SAX 1. DOM(Document Object Model) DOM是个跨平台的标准模型,W3C定义了DOM模型里的概念.DOM将XML数据在内存中解析成一个树,通过对树的操作来操作XML.

xml文件存储

模拟备份短信功能,首先要知道存短信得分为四个部分,短信体,时间,传送方式:接收/发送,还有就是电话号码. 然后我们定义一个javabean对他进行封装.然后通过stringbuffer拼接好,传入到本地sd卡中,就完成了: 短信封装类 package com.example.xmlsave; public class Mess { private String body; private String date; private String address; private String ty

测试之路3——对比XML文件2

距离上一篇对比xml文件隔了很久,并不代表一直做了那么久. 其实上一次对比xml文件一直出错,其实我忽略了一个很简单的问题:我从根目录下得到的所有孩子,是这个根下的,而xml文件的组织形式如下,孩子也有可能是其他的根: <streams> <stream id = "979" presetid = "-1"> <h264> <profile>High</profile> <par_y>-1<

java操作XML文件

XML文件可以用来作为一种小型数据库存在,但更多时候在项目中都是用来当成配置文件用的,也就避免不了对XML文件的增上改查操作. 在java中,解析XML文件的方式大致分为两种:DOM解析,SAX解析 先来说DOM解析方式:xml解析器一次性把整个xml文档加载进内存,然后在内存中构建一颗Document的对象树,通过Document对象,得到树上的节点对象,通过节点对象访问(操作)到xml文档的内容. 用的较为多的是Dom4j工具(非官方)解析,简单介绍下Dom4j的使用,具体API文档请下载

Android之旅十四 android中的xml文件解析

在我们做有关android项目的时候,肯定会涉及到对xml文件的解析操作.以下给大家介绍一下xml文件的解析.包括DOM.SAX.Pull以及曾经我们用到的DOM4J和JDOM: 要解析的XML文件:person.xml <? xml version="1.0" encoding="UTF-8"? > <persons> <person id="001"> <name>zhangsan</na