使用BeanPropertyRowMapper将数据库查询结果转换为Java类对象。

一、应用

我们在使用BeanPropertyRowMapper时,是给query()方法传递一个BeanPropertyRowMapper对象,让JdbcTemplate帮我们把查询结果集ResultSet的每一行结果都使用BeanPropertyRowMapper.mapRow()方法,转化成我们想要的Java类对象。从BeanPropertyRowMapper名称上也能够看出来,它是用来映射Java对象的属性和MySQL表的字段名称的。但是,在映射的过程中,如果不注意Java对象的属性名的规范,很可能就得不到我们想要的结果。
在这里插入图片描述

二、内部实现浅析

在这里插入图片描述
如上图红框中所示:

mapperFields是一个HashMap,用来匹配Java对象的属性和MySQL表的字段名的。mapperFields中存放的是所有可能与MySQL表的字段名映射上的那些Java属性名字。
his.mappedFields.put(this.lowCaseName(pd.getName()),pd);
在initialize方法中,BeanPropertyRowMapper会把传入的泛型Java类的所有属性名称的全小写形式放入mapperFields中,
String underscoredName = this.underscoreName(pd.getName());
将Java类的属性名转化成下划线分割的形式,如userName会被转化成user_name,这是因为:
数据库设计字段名称,一般会使用下划线分割形式,如:user_name
而Java类设置属性,一般使用驼峰命名形式,如:userName。
使用BeanPropertyRowMapper自动绑定,需要确保数据库表列名称与Java实体类属性名称相同。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐