浅析JdbcTemplate中的BeanPropertyRowMapper

  • Post author:
  • Post category:其他


在思考JdbcTemplate在进行query时是怎么讲数据表映射到实体类上的时候,发现了这篇文章:


https://blog.csdn.net/qq_22339269/article/details/82978717


以下是正文:

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

先来看一下,在创建BeanPropertyRowMapper对象时,会调用其中的initialize方法,我们看一下initialize方法的具体实现。

BeanPropertyRowMapper中的initialize方法

如图,

在这里插入图片描述

首选,说一下mappedFields,mapperFields是一个HashMap,用来匹配Java对象的属性和MySQL表的字段名的。mapperFields中存放所有可能与MySQL表的字段名映射上的那些Java属性名字。

如红色框框的第一行,在initialize方法中,BeanPropertyRowMapper会把传入的泛型Java类的所有属性名称的全小写形式放入mapperFields中,

第二行,把Java类的属性名转化成下划线分割的形式,如myName会被转化成my_name,这是因为,数据库在设计字段名称的时候,一般都会使用下划线分割形式,也就是my_name。

重点(敲黑板)

所以,如果在使用时,Java类名称要想和数据库字段名称匹配上,必须要把数据库字段名称设计成以下两种中的一种,

数据库字段名设计成全小写的形式,如myname;数据库字段名设计成下划线分割的形式,如my_name;

同时,Java属性名称应该尽量遵循Java编码风格,使用camelCase风格,如myName。

补:另外这篇文章里对于源码的解析也很深入,附上链接:


https://www.cnblogs.com/bener/p/10617065.html