MyBatis的属性装配

使用MyBatis的时候,发现一个神奇bug:DTO里多个属性和数据库的字段一一对应,使用mybatis的resultType自动装配,会发生部分字段能有值,部分字段为空的状况。举例就是 DTO有 A \ B \ C \D 等字段,数据库也有对应字段 A \ B \C \D。 用select取值后,发出A ,B有值,C\D为空。固然数据库中A\B\C\D都有值的。数据库

反复检查字段拼写确认没有错误,set/get方法正确后,就把问题怀疑到了DTO里特殊的字段。DTO由于项目关系,并无真的属性A,set/get里操做的父类的jsonObject .而是对于每一个字段,都有多一个String的属性,如A=“A”。怀疑是由于DTO特殊构造,和mybatis不兼容。因而debug的mabatis字段赋值逻辑。json


查看mybatis 的源码, debug 调试,DefaultResultSetHandler类的 handleResultSets()方法mybatis

其中ResultSetWrapper rsw = getFirstResultSet(stmt);为jdbc返回的内容。app

变量 rsw.resultSet._res._res.rowData.rows.get(0).internalRowDatadebug

这里,能够用IDEA的 view as->String 看到内容(版本不同,可能须要先create)调试

mybatis把get

public static String TABLENAME = "tableName";
public static String KEY = "key";
public static String VALUE = "value";

放到 Reflector的源码

caseInsensitivePropertyMap

里,it

导出取得时候,随机取。table

相关文章
相关标签/搜索