解决 Mybatis 查询 decimal 类型数据小数点后有 0 丢失问题
终于等到你0、问题1、分析2、解决方法0、问题利用 SSM 框架查询数据库数据时,当数据库数据类型为 decimal(18,2),此时若数据库数据为 12.34,后台获取结果也为 12.34,这时看上去数据获取没有任何问题,但是当数据库数据为 22.00,后台获取结果则变为 22,小数点后两位.00 丢失,即精度缺失.1、分析这是由于 Mybatis 在进行数据映射的时候,若数据库中字段的类型是
0、问题
利用 SSM 框架查询数据库数据时,当数据库数据类型为 decimal(18,2),此时若数据库数据为 12.34,后台获取结果也为 12.34,这时看上去数据获取没有任何问题,但是当数据库数据为 22.00,后台获取结果则变为 22,小数点后两位 00 丢失,即精度缺失.
1、分析
这是由于 Mybatis 在进行数据映射的时候,若数据库中字段的类型是 decimal、float、double,Java 类对应字段的类型为 BigDecimal、Float、Double 时,映射得到的数据不会保留值为 0 的小数位,此时可将 Java 对应字段转换为 String 类型,即改变实体类中变量类型。若查询结果返回类型不是该实体类,而是一个整合的 map 集合,此时不用去修改实体类中对应的变量类型,毕竟修改实体类,项目内修改涉及面可能比较广,此时可在 Mybatis 的 XML 文件内,将 decimal 或其他数字类型在 SQL 语句内强制转换为字符串类型,再进行数据映射。
2、解决方法
例如 book 实体类中 amount 字段在数据库为 decimal(18,2)类型,正常在 Mybatis 的 XML 文件内的 sql 查询为:
<select id="selectByPrimaryKey" parameterType="java.lang.String" resultType="com.entity.Book">
SELECT id,bookName,amount from book where id=#{id}
</select>
此时,可将其修改为:
<select id="selectByPrimaryKey" parameterType="java.lang.String" resultType="java.util.Map">
SELECT id,bookName,CAST(amount AS CHAR) amount from book where id=#{id}
</select>
这样当数据库中 amount 数据为 22.00 时,后台获取到的数据也为 22.00。
转自:https://www.kanzhun.com/jiaocheng/412994.html
记录如有不对烦请指出,先行感谢

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)