扩展

Mybatis 学习扩展

多级映射返回JSON数据

在日常的开发中,接口的返回数据大多都是Json,以下也是一个很常见的json格式

[
  {
    "addressee": "北京",
    "addressee_name": "yanghaiji",
    "addressee_phone": "1234565432",
    "senderVOList": [
      {
        "sender_add": null,
        "sender_name": "北京",
        "informationVOS": [
          {
            "ems_status": "0",
            "retreat_status": "0",
            "create_by": "admin",
            "create_date": "2019-11-02"
          }
        ]
      }
    ]
  },
  {
    "addressee": "shanghai",
    "addressee_name": "hiaji",
    "addressee_phone": "1234565432",
    "senderVOList": [
      {
        "sender_add": null,
        "sender_name": "shanghai",
        "informationVOS": [
          {
            "ems_status": "0",
            "retreat_status": "0",
            "create_by": "admin123",
            "create_date": "2019-11-02"
          }
        ]
      }
    ]
  },
  {
    "addressee": "北京",
    "addressee_name": "ji",
    "addressee_phone": "1234565432",
    "senderVOList": [
      {
        "sender_add": null,
        "sender_name": "北京",
        "informationVOS": [
          {
            "ems_status": "0",
            "retreat_status": "0",
            "create_by": "admin",
            "create_date": "2019-11-02"
          }
        ]
      }
    ]
  }
]

看到上边的json,您会想到,直接查询一下,在java代码进行循环拼接?实则不然,Mybatis为我们提供了很好的帮助, 细心的朋友会在mybatis 结果映射中有所感悟,其实我们只需要利用到 <resultMap> <collection> 等结果映射标签即可完成,不需要代码处理

首先我们写这样一段sql

根据您需要的结构编写实体类,这里略过,大家可以参考source-code 关系Mybatis的相关代码

然后开始编写resultMap 这里我只是三层的关系,更多的层次关系继续写就可以

最后测试

mybatismap

foreach里写if

大多数我们都是利用 foreach 来做某个字段的 in 查询,但是有一天一个朋友问我,foreach 里可以写if吗? 我的第一反应是应该可以写,后来想了一下,肯定是可以的,当然我们也不能全部停留在自己的想法上,还是要去实现一下的;

由于我们这里直接写 WHERE 肯定会报错 ,毕竟这是动态 SQL,所以我们采用<trim>来写,如果您还不了解,可以看一下Mybatis 动态SQL 假设可以,最终执行的SQL应该是类似这样:

SQL与已经写完,来开发个接口验证一下:

通过下图我们可以看出,和我预想的sql是一样的,源代码,请参考source-codemybatis相关的代码 mybatisif

Last updated

Was this helpful?