java - 我的 batis - 没有找到用于属性的类型处理程序 - 与集合进行映射
问题描述
我正在尝试使用带有 spring boot 的 mybatis 获取数据。我创建了映射器接口以及带有 resultMap 和查询的 xml 文件,但出现错误:
java.lang.IllegalStateException:没有找到属性 patientId 的类型处理程序
我的解决方案可能有什么问题?
目标对象:
@NoArgsConstructor
@AllArgsConstructor
@Data
public class PatientBandDailySynchronizationStatisticsDTO {
private UUID patientId;
private String firstName;
private String lastName;
private List<BandDailySynchronizationStatisticsDTO> bandDailySynchronizationStatistics;
}
目标内部对象:
@NoArgsConstructor
@AllArgsConstructor
@Data
public class BandDailySynchronizationStatisticsDTO {
private LocalDate date;
private long gsrCount;
private long ibiCount;
private long temperatureCount;
private LocalDate synchronizationDate;
}
映射器接口:
@Mapper
public interface PatientBandDailySynchronizationStatisticsMapper {
List<PatientBandDailySynchronizationStatisticsDTO> queryAll(@Param("patientIds")List<UUID> patientIds,
@Param("startDate") LocalDate startDate,
@Param("endDate") LocalDate endDate);
}
xml文件:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.e1s.bambino.band.statistics.synchronization.mapper.PatientBandDailySynchronizationStatisticsMapper">
<resultMap type="com.e1s.bambino.band.statistics.synchronization.PatientBandDailySynchronizationStatisticsDTO"
id="patientStatisticsMap">
<result property="patientId" column="id"/>
<result property="firstName" column="first_name"/>
<result property="lastName" column="last_name"/>
<collection property="bandDailySynchronizationStatistics"
ofType="com.e1s.bambino.band.statistics.synchronization.BandDailySynchronizationStatisticsDTO"
javaType="List"
resultMap="statisticsMap">
</collection>
</resultMap>
<resultMap type="com.e1s.bambino.band.statistics.synchronization.BandDailySynchronizationStatisticsDTO"
id="statisticsMap">
<result property="date" column="date"/>
<result property="gsrCount" column="gsr_count"/>
<result property="ibiCount" column="ibi_count"/>
<result property="temperatureCount" column="temperature_count"/>
<result property="synchronizationDate" column="synchronization_date"/>
</resultMap>
<select id="queryAll" resultMap="patientStatisticsMap">
SELECT p.id, p.first_name, p.last_name FROM patient p
LEFT OUTER JOIN band_daily_synchronization_statistics bs
ON bs.patient_id = p.id
WHERE p.id IN #{patientIds}
AND (bs.id IS NULL OR bs.date BETWEEN #{startDate} AND #{endDate})
</select>
</mapper>
我将映射器接口放入
src/main/java/com/e1s/bambino/band/statistics/synchronization/BandDailySynchronizationStatisticsMapper.java
对应的xml在:
src/main/resources/com/e1s/bambino/band/statistics/synchronization/PatientBandDailySynchronizationStatisticsMapper.xml
我通过构造函数将映射器注入到我的服务中。
@Service
@RequiredArgsConstructor
public class BandDailySynchronizationStatisticsService {
private final PatientBandDailySynchronizationStatisticsMapper mapper;
public List<PatientBandDailySynchronizationStatisticsDTO> searchBandDailySynchronizationStatistics(BandDailySynchronizationStatisticsSearchCriteria searchCriteria) {
List<PatientBandDailySynchronizationStatisticsDTO> allForPatients = mapper.queryAll(searchCriteria.getPatientIds(), searchCriteria.getStartDate(),
searchCriteria.getEndDate());
return allForPatients;
}
例外:
Caused by: org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. The XML location is 'com/e1s/bambino/band/statistics/synchronization/PatientBandDailySynchronizationStatisticsMapper.xml'. Cause: java.lang.IllegalStateException: No typehandler found for property patientId
at org.apache.ibatis.builder.xml.XMLMapperBuilder.configurationElement(XMLMapperBuilder.java:123)
at org.apache.ibatis.builder.xml.XMLMapperBuilder.parse(XMLMapperBuilder.java:95)
at org.apache.ibatis.builder.annotation.MapperAnnotationBuilder.loadXmlResource(MapperAnnotationBuilder.java:179)
at org.apache.ibatis.builder.annotation.MapperAnnotationBuilder.parse(MapperAnnotationBuilder.java:118)
at org.apache.ibatis.binding.MapperRegistry.addMapper(MapperRegistry.java:72)
at org.apache.ibatis.session.Configuration.addMapper(Configuration.java:819)
at org.mybatis.spring.mapper.MapperFactoryBean.checkDaoConfig(MapperFactoryBean.java:80)
... 75 more
Caused by: java.lang.IllegalStateException: No typehandler found for property patientId
at org.apache.ibatis.mapping.ResultMapping$Builder.validate(ResultMapping.java:151)
at org.apache.ibatis.mapping.ResultMapping$Builder.build(ResultMapping.java:140)
at org.apache.ibatis.builder.MapperBuilderAssistant.buildResultMapping(MapperBuilderAssistant.java:446)
at org.apache.ibatis.builder.xml.XMLMapperBuilder.buildResultMappingFromContext(XMLMapperBuilder.java:393)
at org.apache.ibatis.builder.xml.XMLMapperBuilder.resultMapElement(XMLMapperBuilder.java:280)
at org.apache.ibatis.builder.xml.XMLMapperBuilder.resultMapElement(XMLMapperBuilder.java:254)
at org.apache.ibatis.builder.xml.XMLMapperBuilder.resultMapElements(XMLMapperBuilder.java:246)
at org.apache.ibatis.builder.xml.XMLMapperBuilder.configurationElement(XMLMapperBuilder.java:119)
... 81 more
提前感谢所有回复。
解决方案
推荐阅读
- selenium-webdriver - “未能找到 Chrome 二进制文件。” 在系统规范 gitlab-ci
- c# - 使用按钮在 Unity 中启动粒子系统
- typescript - 打字稿:传递类函数时如何检查它们是否绑定
- python - 如何在 Angr 程序的开头添加字符串输入?
- r - 将列名转换为行值并求和
- c# - EF Core Eager 加载返回 null
- javascript - 有没有办法修复 gulp 中的 assert.js:385 错误?
- python - 数组大小不匹配
- pytorch - 在 nn.Embedding() 中设置 padding_idx=0 后是否需要任何额外的屏蔽?
- anaconda - 如何解决 ModuleNotFoundError:没有名为“twitter”的模块