Mybatis结果集映射问题


之前的数据库图简单都是纯小写格式,这一次做项目为了显得正规一些,模拟实际的情况,采用了驼峰命名的规则,这时候就遇到了结果匹配的问题。

之前只要

<select id="select" parameterType="map" resultType="xxxx">

就可以自动匹配,这一次我也以为可以,但是实际测试的时候发现能查到数据,可是数据无法传输出来,我以为是sql语句出现了问题,数据库不认识xx_xx这种写法的原因,但是通过mybatis打印出来的sql日志又发现没有问题,同时打印结果集的size也是大于0的,说明能正常查到数据,那么问题就只能出现在封装的过程当中,我就想到了应该是字符集映射出来问题,就改写resultMap,第一次使用该方法,对应完之后运行直接报错。

查看控制台输出

Error resolving JdbcType. Cause:java.lang.IllegalArgumentException: No enum

这是因为Mybatis不认识int类型的jdbctype数据,不仅要大写,而且得是Integer

附一张mybatis官网书写的支持的jdbctype类型数据

ps:其实也还有一种复杂的写法,此前我也在其他短小的项目中使用过

select doc.id,
        doc.title,
        doc.text,
        doc.departid,
        doc.authorid,
        depart.name as departName,
        emp.name as authorName,
        doc.statenum,
        doc.advice,
        empl.name as approveName,
        empl.id as approveId

这种写法复用率很低,当你有多个查询同一个对象的语句时还是使用结果集映射更为方便。