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字段赋值逻辑。


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

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

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

这里,可以用IDEA的 view as->String 看到内容(版本不一样,可能需要先create)

mybatis把

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

放到 Reflector的

caseInsensitivePropertyMap

里,

导出取得时候,随机取。

转载于:https://my.oschina.net/u/2382040/blog/2051613

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值