【开发踩坑日记】陆续更新ing

技术栈 : SpringBoot + TKMybatis + Oracle + Apollo + Zookeeper

服务间使用Dubbo进行通信

  1. Oracle数据库不能识别NULL类型。前端传入空串(“”),后端接收字符类型为decimal类型,接收后得到的是null值(decimal不能为空串),存入oracle数据库 需要另写sql语句,不能使用tkmybatis/mybatis封装好的语句如
    .updateByPrimaryKey()(直接报错)或.updateByPrimaryKeySelective()(如果为null值,就不更新。不能为省事而选用这个操作,有bug。如果一开始有数据后用户不填,则不正确。)
  • 最好直接自己另写Sql语句,告诉oracle数据库该字段对应的数据类型
  1. 判断BigDecimal类型的变量是否为0
    今天居然出了个/byZero的bug
    判断BigDecimal类型的变量是否为0,如果为0不进行后面的逻辑
    结果0.00居然判断结果是不为0!!!
    我的判断语句是!s1.equals(BigDecimal.ZERO),好像是这个逻辑会判断位数,即0.00小数点后有两位,两者位数不等,直接不相等了。
    后来,换成了(s1.compareTo(BigDecimal.ZERO)!=0),就可以了
    BigDecimal类型的变量不能用equals去比较,需要用compareTo()比较

这里有个注意点,使用Double方式初始化(即不加双引号)可以使用equals()比较;而使用String方式初始化,只能使用compareTo()方式比较

         /**
     * String实例化和Double实例化BigDecimal的equal比较的区别
     */
    @Test
    public void equalDif(){

        BigDecimal decimal1 = new BigDecimal("0.00");
        BigDecimal decimal2 = new BigDecimal(0.00);

        System.out.println("String初始化和BigDecimal.ZERO使用equals比较:"+decimal1.equals(BigDecimal.ZERO));

        System.out.println("String初始化和BigDecimal.ZERO使用compareTo比较为0表示相等:"+decimal1.compareTo(BigDecimal.ZERO));
        System.out.println("==================================");
        System.out.println("Double初始化和BigDecimal.ZERO使用equals比较:"+decimal2.equals(BigDecimal.ZERO));

        System.out.println("Double初始化和BigDecimal.ZERO使用compareTo比较为0表示相等:"+decimal2.compareTo(BigDecimal.ZERO));

    }

结果

  1. 解决ORA-00904: invalid identifier“”标识符无效
    oracle数据库报错,字段不存在,我以为是字段名写错,但是呢,这个是mybatis自动生成的mapper配置文件,按理说不应该;后来我又把sql语句放到navicat中执行,也报这个错;我又去掉这个字段insert,报最后一个字段不存在;
    最后,总算发现了问题,原来oracle数据库字段区分大小写,一定要大写字段名

equals()比较报错,空指针异常
两值比较,其中一个为null,一个不为null;A.equals(B),如果A为null,会报错;所以一般的开发中使用:“常量”.equals(B),以避免报错;在项目中可以使用如下方式

studentA.getName()!=null?studentA.getName().equals(studentB.getName()):studentB.getName();

前后端联调需要注意的点
一、传参

  1. 查看详情与保存接口
    查看详情返回的参数保存的入参参数需要一致
  2. 搜索框的多条件查询按钮与查询返回的list结果参数要一致

注意返回"null"
出现原因:

String deposit = "";
if(xxx == "001"){
deposit = String.valueOf(xxx01.getDespoit());
}else{
deposit = String.valueOf(xxx02.getDespoit());
}

此时,如果xxx01.getDespoit()为null,得到的值就是"null";
改成以下方式解决问题

String deposit = "";
if(xxx == "001"){
deposit = xxx01.getDespoit() == null?null:String.valueOf(xxx01.getDespoit());
}else{
deposit = xxx02.getDespoit() == null?null: String.valueOf(xxx02.getDespoit());
}

返回日期格式化
后端日期默认返回的Date样式为:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值