17 MyBatis——ResultMap的使用、字段名冲突问题
字段名与属性名不一致导致无法封装数据的问题
在数据库的字段命名中,我们使用下划线分隔。
而在java的属性命名中,我们使用小驼峰命名规则,这会使得某些这些字段的返回值无法与javaBean的属性值对应,使得数据封装为null值。
为了解决这个问题,我们可以使用两种方法。
方法一:查询语句中给字段起别名
我们知道,使用查询语句时可以给字段起别名,例如从t表查询字段A_NAME,起别名示范:
SELECT A_NAME as AName FROM t;//as可省略
我们可以以起别名的方式,将下划线的字段名与javaBean中对应的属性名的名称统一起来。
这样的方式存在一个弊端,不可以使用select *的方式查询所有,必须写完每一个字段。
方法二:使用resultMap
在mapper中(即xxxMapper.xml),我们添加resultMap标签对一个表的字段进行别名配置:
其中:id独自使用id标签而不是result的标签,是为了在mapper实现缓存时(
注意:要写好查询语句,不能出现同样的列名
//如果要配置的属性是集合类型,需要使用标签如下:
如果要配置的属性是集合类型,需要使用标签如下(此标签下,即使属性名与字段名相同也不能省略不写):
然后在单表查询语句中使用 resultMap属性引用上面的resultMap的id即可: