查询语句sql:"select b.city_unit_name as disposeunitname,a.city_event_src_name as eventsrcname from to_stat_info t,to_trans_event_src a,to_trans_unit b where t.event_src_name=a.event_src_name and t.dispose_unit_name = b.unit_name"查询MySQL中显示信息正常mysql
经过程序将查询的数据信息转换成Java类时,类中的属性所有都是nullsql
经过MySQL中查出来的信息,应该会将字段信息映射到Java类的属性中,可是好像并非这么回事,只有深刻到源码中查询一下问题所在,以下图数据库
代码中是经过DAORowMapper类将mysql中查询的字段信息映射到Java类的属性中,继续深刻了解这个类bash
继续向下看这个方法,下图中标出了关键的地方,为何没有执行类中的setter方法app
继续向下查看,就是经过反射将查询出的字段信息set到映射类的属性中框架
目前将字段信息映射到Java类中属性的关键代码地址找到了,debugger查看name值为"city_unit_name"并非as以后的别名"disposeunitname"学习
继续深刻发现这边有一个判断逻辑,经过useOldAliasBehavior走哪一个业务逻辑,默认为false,经过getNameNoAliases方法获取字段名this
查看该方法得知获取的字段名是originalNameurl
debug得知ResultSetMetaData类的内部属性信息spa
从上面截图中发信name是咱们须要获取的字段别名,查看下图 咱们应该走上面的判断逻辑经过this.getField(column).getName() 获取字段别名,所以须要将useOldAliasBehavior设置为true
经过查询MySQL的相关资料得知获取字段的别名有两种方法,
jdbc.url=jdbc:mysql://localhost:3306/egovastat?useOldAliasMetadataBehavior=true
复制代码
修改完毕以后,查询的数据信息可以映射到Java类的属性中,到这里该问题成功解决
![]()
经过此次问题探索和问题解决,感触较深。咱们对于一些框架的源码应该放下敬畏之心报以日常的心态查看源码,经过查看源码来解决问题。这种方法看似困难,实际上是最简单、最高效。同时,之后也要多多查看优秀的源码,学习别人的设计思想和代码习惯。