微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 MyBatis 在结果对象中填充数组

如何解决使用 MyBatis 在结果对象中填充数组

在使用 MyBatis 时,推荐使用 sql 结果中列的值填充数组方法是什么?

我有以下代码可以正常工作,但我需要将响应折叠到一个包含所有约会 ID 的对象中。

记录

@Serializable
data class SiteSchedule(
    val id: String,@Serializable(with = LocalDateSerializer::class) val date: LocalDate,val appointmentId: String
)

映射器

@Mapper
interface SiteScheduleMapper {

  @Select(
      """
      select schedule.id,schedule.date,appointment.id
      from schedule,appointment
      where schedule.date = #{date}
      and appointment.schedule_id = schedule.id
      and appointment.status = 'S'
      """)
  fun findSchedule(
      @Param("date") date: LocalDate
  ): Array<SiteSchedule>
}

sql 查询结果

id 日期 appointmentId
1 2021-07-01 100
1 2021-07-01 200
1 2021-07-01 300
1 2021-07-01 400

当前 API 响应

[
  {
    "id": "1","dateTime": "2021-07-01","appointmentId": "100"
  },{
    "id": "1","appointmentId": "200"
  },"appointmentId": "300"
  },"date": "2021-07-01","appointmentId": "400"
  }
]

所需的 API 响应

[
  {
    "id": "1","appointmentIds": ["100","200","300","400"]
  }
]

解决方法

我通过创建在结果映射中定义 collection 属性的 XML 映射器解决了我的问题:

SiteScheduleMapper.xml

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.domain.mappers.SiteScheduleMapper">
    <resultMap id="siteScheduleResultMap" type="com.domain.SiteSchedule">
        <id column="sch_id" property="scheduleId" />
        <result column="appt_dt" property="date" />
        <collection property="appointmentIds" ofType="String">
            <result column="appt_id" />
        </collection>
    </resultMap>
</mapper>

记录

@Serializable
data class SiteSchedule
constructor(
    val id: String? = "",@Serializable(with = LocalDateSerializer::class) val date: LocalDate? = null,val appointmentIds: MutableList<String>? = mutableListOf()
)

映射器界面

@Mapper
interface SiteScheduleMapper {

  @Select(
      """
      select schedule.id,schedule.date,appointment.id
      from schedule,appointment
      where schedule.date = #{date}
      and appointment.schedule_id = schedule.id
      and appointment.status = 'S'
      """)
  @ResultMap("siteScheduleResultMap")
  fun findSchedule(
      @Param("date") date: LocalDate
  ): Array<SiteSchedule>
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?