我无法使用XML文件使用MyBatis和Spring Boot将查询结果映射到Bean。
配置:spring boot,mybatis。
1)我有一个映射器:
package ru.kq.cn.mapper;
@Mapper
public interface GateMapper {
@Select("call [dbo].[cai_Select] 1, ")
@ResultMap("GateMapper.WResultMap")
WQueryResult call();
}
2)在同一包中,我有ResultSet的xml:
<mapper namespace="ru.kq.cn.mapper.GateMapper">
<resultMap id="WResultMap" type="ru.kq.cn.dto.WQueryResult">
<result property="proverTpId" column="proverTpId"/>
<collection property="itemIds" column="itemId">
</collection>
</resultMap>
</mapper>
3)DTO:
package ru.kq.cn.dto;
..
@Data
public class WQueryResult implements Serializable {
Long proverTpId;
List <String> itemIds;
}
3)application.properties:
mybatis.type-aliases-package=ru.kq.cn.dto
mybatis.mapper-locations='classpath:ru/kq/cn/mapper/*.xml'
4)应用程序:
@MapperScan("ru.kq.cn.mapper")
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
请帮助!
您没有提到,我认为数据库是MS SQL Server。
一些基本知识。
statementType="CALLABLE"
。{call proc(?,?,...)}
。resultSets
命名每个结果集。因此,映射器方法可能看起来像这样:
@Select("{call [dbo].[cai_Select](1)}")
@ResultMap("WResultMap")
@Options(
statementType = StatementType.CALLABLE,
resultSets = "firstRS,secondRS">
WQueryResult call();
并且在结果图中,指定resultSet
的<collection />
属性。我假设第二个结果集用于itemIds
。
<resultMap id="WResultMap" type="ru.kq.cn.dto.WQueryResult">
<result property="proverTpId" column="proverTpId"/>
<collection property="itemIds" ofType="java.lang.String"
javaType="java.util.ArrayList" resultSet="secondRS">
<id column="itemId">
</collection>
</resultMap>
映射到List<String>
有点棘手。我们有一个FAQ entry。
这里是可执行文件demo project。为了演示父子关系的映射,它比您的复杂得多。