JDBCTemplate的⼀个坑jdbctemplate查询一条数据
最近给数据平台的模型查询部分加了⼀个查询缓存。通过Spring AOP实现,思路是将查询结果通过gson序列化后存储在HBase中。
List<Map<String,Object>> query(String sql)
对Service的逻辑完全⽆修改。
在功能准备上线的时候发现某个漏⽃查询第⼀次查询结果正常,后⾯的查询(⾛的是缓存)会报⼀个空指针异常。
于是在出问题的代码上设断点调试。发现语句中的⼤写字段名在查询结果中被转成了⼩写。还是很奇怪,那第⼀次查询
的时候为什么不会跑出空指针异常呢?
仔细对⽐两次运⾏结果,发现Spring的JdbcTemplate返回的是LinkedCaseInsensitiveMap,⽽Gson反序列化产⽣的Map是⼀个LinkedTreeMap。
前者的key是⼤⼩写不敏感的⽽后者是⼤⼩写敏感的,于是出现两次运⾏结果的不同。
总结:
总结:在⾯向接⼝编程时数据的实际类型⽐较容易被忽视,在调试代码的过程中既要关注数据的内容,也要关注数据的实际类型。另外数据库的字段和字段别名通常是⼤⼩写不敏感的,在程序设计时字段不应该包含⼤⼩写信息。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论