本文主要是在Mybatis技术上,对于查询的结果有返回为null的问题做解答,如下情况
图片中存在两个查询字段(randName、companyName)返回的结果为空
1. 原因
数据表如下
可见有两个字段 brand_name 和 company_name 是采用下划线分割命名,而对应的实体类中采用了驼峰命名方式,导致不能自动封装数据
在BrandMapper.xml配置中执行的sql语句如下
执行这个sql语句会导致brandName、companyName 字段返回null
2. 解决
(1)起别名
对于不一样的列名,取与实体类属性名称对应的别名
这个方法有个缺点是 对于每次查询都有起别名,很繁琐,进阶的解决方案是利用sql片段,把要查询的内容抽取出来封装成一个sql片段,然后用<include>标签引用,如下做法
这两种方法都可以使查询的结果返回有值
但是使用sql片段也有个缺点,就是不灵活,所以有以下更好的解决方法
(2)resultMap 映射
对需要起别名的列名,采用 <result> 标签起别名
例如
<result column="brand_name" property="brandName"/>
<result column="company_name" property="companyName"/>
完整写法为
- column 为数据表字段列名,property为实体类名,对这两名不同的完成一一映射即可
- id 为唯一标识,type 映射类型,支持别名
- 在<select>标签中,使用resultMap 属性替换resultType属性