resultMap映射null问题
1.resultMap映射null问题
2.mybatis一级缓存resultMap和resultType
你使用自定义映射集映射结果后,返回的结果类型就成了自定义映射集的type,而与mapper接口使用什么泛型接收无关。ResultMap会将所有的自定义映射返回,接收实体类里不包含的字段也会映射出来,且为null
resultMap存在的问题:当需要的结果只需要几个字段时,因为ResultMap映射的字段太多有时候容易造成数据返回很多无意义的字段
如下图:我定义的集合泛型是Data
但是查看testList后发现结果类型变为了DTO;这是因为在resultMap中定义:
甚至使用List
我们甚至可以往集合里面添加字符串元素,而添加WindTurbinesDataDTO会报错,那么我们这个泛型约束在添加元素时是起到作用了的,那可是在mapper数据映射的时候List<String> selectWindTurbinesList(WindTurbinesDataDO windTurbinesDataDO);
使用的泛型接收为什么没有起到约束作用呢?
那么这个问题怎么解决呢?是每一个返回类型都写一个resultMap吗?那岂不是很麻烦,还是使用resultType方便
建议:
- 当返回对象是简单对象时,使用ResultType;
- 当返回对象是嵌套对象时,使用ResultMap;当映射实体类和数据库不是完整的驼峰和下划线对应,建议使用resultMap
思考
为什么会这样,mapper接口定义的接收参数约束不了返回结果,平时使用的时候多注意细节,虽说在DAO层映射不会报错,但是在业务层处理的时候会产生错误,接收泛型最好与返回值类型相同。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~