我在Play Framework 2.3.6

Java项目中使用MyBatis 3.2.8.我已经挣扎了几天,迭代遍历复杂对象参数中的MyBatis映射器的整数列表.这是我的设置:

我在EventFilter.java中有一个名为EventFilter的类:

public class EventFilter {

private String beginDate;

private String endDate;

private List closestCountry;

private List territorialWaterStatus;

private List vesselCountry;

private String closestCountryInClause;

private String territorialWaterStatusInClause;

private String vesselCountryInClause;

public EventFilter() { }

public EventFilter(JsonNode jsonNode){

this.beginDate = jsonNode.get("beginDate").asText();

this.endDate = jsonNode.get("endDate").asText();

this.closestCountry = JsonHelper.arrayNodeToIntegerList((ArrayNode) jsonNode.get("closestCountry"));

this.territorialWaterStatus = JsonHelper.arrayNodeToIntegerList((ArrayNode) jsonNode.get("territorialWaterStatus"));

this.vesselCountry = JsonHelper.arrayNodeToIntegerList((ArrayNode) jsonNode.get("vesselCountry"));

}

public String getBeginDate() {

return beginDate;

}

public void setBeginDate(String beginDate) {

this.beginDate = beginDate;

}

public String getEndDate() {

return endDate;

}

public void setEndDate(String endDate) {

this.endDate = endDate;

}

public List getTerritorialWaterStatus() {

if(this.territorialWaterStatus.size() > 0) {

return territorialWaterStatus;

} else {

return null;

}

}

public void setTerritorialWaterStatus(List territorialWaterStatus) {

this.territorialWaterStatus = territorialWaterStatus;

}

public List getClosestCountry() {

if(this.closestCountry.size() > 0) {

return closestCountry;

} else {

return null;

}

}

public void setClosestCountry(List closestCountry) {

this.closestCountry = closestCountry;

}

public List getVesselCountry() {

if(this.vesselCountry.size() > 0) {

return vesselCountry;

} else {

return null;

}

}

public void setVesselCountry(List vesselCountry) {

this.vesselCountry = vesselCountry;

}

}

这在我的mybatis配置文件中被引用为类型别名:

我有一个mapper,它以EventFilter对象作为参数.然后应检查是否设置了beginDate,endDate,nearestCountry,vesselCountry和territorialWaterStatus.如果是,它将它们用于WHERE子句:

SELECT ev.id, to_char(ev.occurred_on, 'YYYY-MM-DD') AS occurred_on_date,

to_char(ev.occurred_on, 'HH24:MI:SS') AS occurred_on_time,

ST_X(ev.location) AS longitude, ST_Y(ev.location) AS latitude,

COALESCE(co01.name, 'Unspecified') AS closest_country,

COALESCE(co02.name, 'Unspecified') AS territorial_water_status,

COALESCE(co03.name, 'Unspecified') AS vessel_flag_country

FROM event AS ev

LEFT JOIN country AS co01

ON co01.cow_id = ev.location_closest_country_id

LEFT JOIN country AS co02

ON co02.cow_id = ev.location_water_status_country_id

LEFT JOIN country AS co03

ON co03.cow_id = ev.vessel_flag_country_id

ev.occurred_on >= #{eventFilter.beginDate}::timestamp AND ev.occurred_on <= #{eventFilter.endDate}::timestamp

AND ev.location_closest_country_id IN

#{id}

AND ev.location_water_status_country_id IN

#{id}

AND ev.vessel_flag_country_id IN

#{id}

ORDER BY ev.occurred_on ASC;

我将映射器链接到一个接口,如下所示:

public List getEventsWithFilter(@Param("eventFilter") EventFilter eventFilter);

我用MybatisMapper辅助类调用它来生成我的会话,如下所示:

public static List getEvents(EventFilter eventFilter) {

MybatisMapper mapper = new MybatisMapper();

SqlSession session = mapper.getSession();

EventMapper eventMapper = session.getMapper(EventMapper.class);

List events;

List li = eventFilter.getClosestCountry();

try {

events = eventMapper.getEventsWithFilter(eventFilter);

} finally {

session.close();

}

return events;

}

问题:

beginDate和endDate自己完全正常工作.但是我对整数列表有以下问题:

>检查列表是否为null的if语句似乎正在获取

忽略,或当它应该是假时评估为true.

>整数列表似乎作为null传递给IN子句.

>如果我注释掉整数列表IN子句,并且只是为了beginDate和

endDate,它完全正常.但是,如果我留下整数

列表IN子句,查询不会失败,但它返回一个空

设置,好像要说“WHERE列IN()”.

这是执行映射器/查询时由Play和Mybatis打印的控制台日志记录,以及EventFilter打印其内容.它们有点冗长所以我把它们放在pastebin中:

这比我想要的要长一点,但提前感谢任何帮助或建议.

java foreach参数_java – Mybatis foreach迭代复杂对象参数中的整数列表相关推荐

  1. Java 反射将配置文件数据加载到对象属性中

    Java 反射将配置文件数据加载到对象属性中 Java 反射 可以根据类名找到相应的类,也可以将配置文件中的值加载到对应属性中. 需要用到的包:spring-core-3.1.2.Release.ja ...

  2. java form action 参数_java发起form请求(有参数,无参数)

    1.无参请求 /** * 无参数请求 * @param url * @return */ public static String sendNoPara(String url){ try { Post ...

  3. java hashtable 遍历_Java HashTable forEach()用法及代码示例

    Hashtable类的forEach(BiConsumer)方法对哈希表的每个条目执行BiConsumer操作,直到已处理完所有条目或该操作引发异常. BiConsumer操作是按迭代顺序执行的哈希表 ...

  4. java发送文件_java 模拟http发送文件和参数

    一.maven: org.apache.httpcomponents httpmime 4.5.3 二.工具类: import java.io.File; import java.util.Map; ...

  5. java 设置系统参数_Java如何设置系统参数和运行参数

    系统参数 系统级全局变量,该参数在程序中任何位置都可以访问到.优先级最高,覆盖程序中同名配置. 系统参数的标准格式为:-Dargname=argvalue,多个参数之间用空格隔开,如果参数值中间有空格 ...

  6. java httpget 设置参数_java 模拟HTTP doPost请求 设置参数 | 学步园

    请求模拟 package org.zlex.commons.net; import java.io.DataInputStream; import java.io.DataOutputStream; ...

  7. java jersey 参数_Java Jersey:接收表单参数作为字节数组

    我试过如下: @Path("/someMethod") @POST @Produces(MediaType.TEXT_HTML) @Consumes(MediaType.APPLI ...

  8. java后台接收参数_java 后台如何 接收 uploader UploadFileOptions 参数

    Uploader Example // 扩展API加载完毕后调用onPlusReady回调函数 document.addEventListener( "plusready", on ...

  9. java scanner构造函数_Java使用Scanner作为构造函数的参数

    这是一个学校作业的问题,这就是我这样做的原因. 无论如何,我在主方法中使用Stdin制作扫描仪(Scanner stdin = new Scanner(System.in);是行),从程序运行时指定的 ...

最新文章

  1. unity发布webgl 触摸控制和鼠标控制冲突问题解决
  2. android发短信乱码,android 音乐信息乱码处理
  3. 人生苦短,我学python之python+selenium select下拉框
  4. word删除分节符后之前的格式乱了_分页符分节符,你知道多少
  5. 共享单车变“私有”、被毁、被盗:用户们都看不下去了,举报!
  6. PyTorch 深度学习:37分钟快速入门——FCN 做语义分割
  7. codeforce #164 div2
  8. [转载] 这100道练习,带你玩转Numpy
  9. Excel 导入 SqlServer 导入部分文本为空解决方案
  10. 10个妙招 在线视频下载方法大全
  11. 【Excel 教程系列第 1 篇】删除所有空白行,隐藏空白行
  12. 打通法律服务群众“最后一公里”,方正璞华劳动人事法律自助咨询服务平台频获“点赞”
  13. Golang 如何限制木马图片上传服务器
  14. SAP中输出采购订单附件清单操作实例
  15. 【100%通过率】华为OD机试真题 Python 实现【核酸最快检测效率】【2022.11 Q4 新题】
  16. jsp高校活动管理系统Myeclipse开发mysql数据库web结构jsp编程计算机网页项目
  17. html5 自动扣图,html5利用canvas实现颜色容差抠图功能
  18. 天地图 添加遮罩层效果
  19. elk面试题_2019年最新公务员、事业单位面试题库(含答案)elk
  20. 【怀旧】 “AutoCAD 经典”界面

热门文章

  1. Android每日一记
  2. Ubuntu18 安装yum
  3. Java selenium和python_c#和Java和python设置selenium超时时间
  4. 路遥《平凡的世界》孙少平原型人物
  5. php判断是否存在http,php获取http-header来判断文件是否存在
  6. 关于计算机工作的诗歌,提高计算机工作及上网效率的方法
  7. Node组件——Express简介
  8. PyQt5学习--基本窗口控件--加载文件-QFileDialog
  9. try catch异常后会执行后面的代码吗_Java的异常体系
  10. Linux Tun/Tap网口(/dev/net/tun)的读写方法