记录遇到的问题

数据库和JavaBean的类型不一致导致精度丢失

@Data
public class Nav {
    private String rate;
}

@Repository
public interface NavMapper {
    @Select("select rate RATE from nav")
    Nav find();
}
 @RequestMapping("/hot")
    public Nav getHot(@RequestParam @Valid String id) {
        //return userService.queryNav().getRate();
        return userService.queryNav();
    }

记录遇到的问题

而数据库里的值为

记录遇到的问题

该字段在数据库的类型为number,且值为浮点数,而JavaBean里对应的字段为String,所以在赋值的时候精度丢失,在不改变JavaBean的字段类型的前提下,我们可以在sql中用to_char将查询的值转为字符串类型。

select to_char(rate,'fm9999990.0000000') from nav

修改常量后的class文件

Java将常量保存在常量池中(jdk1.7在堆的永久代中,jdk1.8后改为方法区的元空间)。在项目中,一般会有常量表,其他类会引用该表中的产量,如果对常量表进行了修改和重新编译,引用这些常量的类的class不重新编译是不会发生改变的,依然引用的是修改之前的常量。原因:通过反编译文件发现,常量在class文件中直接被替换成值了,而不是java文件里的引用。