如何解决使用 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>
}
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 举报,一经查实,本站将立刻删除。