#java #spring-boot #mybatis
#java #весенняя загрузка #mybatis
Вопрос:
Я пытаюсь извлечь данные с помощью mybatis с помощью spring boot. Я создал интерфейс mapper, а также XML-файл с resultMap и запросом, но я получаю сообщение об ошибке:
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:
@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>
Я вставил интерфейс mapper в
src/main/java/com/e1s/bambino/band/statistics/synchronization/BandDailySynchronizationStatisticsMapper.java
Соответствующий xml находится в:
src/main/resources/com/e1s/bambino/band/statistics/synchronization/PatientBandDailySynchronizationStatisticsMapper.xml
Я внедрил mapper в свой сервис через конструктор.
@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
Заранее спасибо за все ответы.
Комментарии:
1. Файл XML должен находиться в
src/main/resources/com/e1s/bambino/band/statistics/synchronization/mapper
каталоге. В противном случае инструмент сборки (т.Е. maven или gradle) не копирует XML-файл в целевой каталог при сборке проекта.2. Спасибо, похоже, я все еще что-то упускаю. Однако журналы в трассировке stact теперь без журналов org.springframework
3. Вы должны отредактировать вопрос и обновить трассировку стека (и заголовок, если необходимо).
4.
namespace
Указанный в XML содержит ‘mapper’ в имени пакета. Попробуйте удалить его.5. Спасибо, xml теперь в действии, однако у меня возникли некоторые проблемы с его анализом. Я изменил тему и описание вопроса, и завтра попытаюсь решить эту проблему с помощью обработчика типов