mybatis查询结果List<Map<String,Object>>应对动态改变字段类型导致转换结果乱码的问题

问题场景:

查询语句是select * from 某视图...(备注,此处我们为什么不select具体字段,因为我们是为了动态查询字段,方便实施根据不同客户需求增加、修改字段类型和值、删除字段等场景)。

视图中有属性field1,类型是varchar

结果

field1="字符串类型"

变更field1为number类型

结果

field1="◆~··◆"

乱码。

------------------

解决方案: 在select 标签上加上 statementType="STATEMENT",且在select 语句中不能出现#{...}占位符,如需实现动态SQL效果,可以使用${...}变量,它在运行期会转换为具体的变量值。 原理: 默认statementType是PREPARED,由于PREPARED是默认编译一次,所以你的类型也就固定了,STATEMENT则是每次都编译,另外STATEMENT不支持动态SQL,所以不能出现#{...}占位符。 缺点: 性能降低 后记: 其实这个问题主要是JDBC对SQL预编译知识的理解,其实跟MYBATIS关系不大。所以一般人遇到这个问题,可能首先想到的是如何从MYBATIS来解决,所以相对来说这个问题虽然不难,但较不常见,因为这个需求场景也确实比较变态。

猜你喜欢

转载自jdkleo.iteye.com/blog/2292271
今日推荐