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即可: