性感应届生在线内卷!!菜鸟正式工作一个半月踩的20个坑

586 阅读3分钟

1.配置clickhouse或其他任何数据库数据源报错

解决办法:service层调用到clickhouse的方法上方加上@DynamicDataSource(dataSource = "XXXXXX")

2.报错`‘org.springframework.dao.InvalidDataAccessApiUsageException:

Error updating database.  Cause: java.sql.SQLFeatureNotSupportedException SQL: insert into xxxxxxxxx Cause: java.sql.SQLFeatureNotSupportedException ; null; nested exception is java.sql.SQLFeatureNotSupportedException’`

原因:clickhouse自增主键 statement预处理直接抛错

解决办法:在mapper中设置

3.传参一定要注意,传多个数组的话,就直接List嵌套传递

4.从一个应用访问另一个应用时,应该去对应位置最上边查看@ConfigurationProperties(prefix = "api.fnfinancejobservice"),来确定在properties文件配置的前缀,进而找到对应应用名

5.当测试时某个数据不同的话,就把sql拷贝出来

通过自己已知的数据来进行拼接在数据库客户端中查询,然后分解查看代码中没查出来的原因是什么,从而查出问题位置

6.当在Mapper.xml文件中新增了某几个查询字段,但是查询的时候没有返回值的原因就是需要加进行映射

7.一般情况下,依赖关系是继承的,

例如web继承其他几个模块的pom依赖,此时就不要在web中添加相同的依赖,不然就会造成依赖冲突,从而无法运行

8.不同应用提供页面时,本地调试需要启动nginx

9.mysql建表模板:

CREATE TABLE mmc_order_bill_csdrf01001 ( id bigint(20) NOT NULL AUTO_INCREMENT COMMENT '数据库自增id', insert_dt timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '入账时间', update_dt timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间', business_dt timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '业务日期(结算时间/退订时间', store_id varchar(100) NOT NULL DEFAULT '0' COMMENT '门店编码 示例:HM001', biz_order_id bigint(20) NOT NULL DEFAULT 0 COMMENT '订单号', sub_order_id bigint(20) NOT NULL DEFAULT 0 COMMENT '子订单ID', main_global_id bigint(20) NOT NULL DEFAULT 0 COMMENT '主订单ID', PRIMARY KEY (id), KEY idx_tb_biz_order_id USING BTREE (biz_order_id), KEY item_code (item_code) ) ENGINE = InnoDB AUTO_INCREMENT = 10000 CHARSET = utf8 COMMENT 'xx表' 注意:字段用“`”包裹,default字段和备注需要用“'”包裹

10.:insert into on duplicate key update这个语法,若是对应操作的表有text这类字段,相关语法可能会导致数据库crash重启

11.数据库中的时间是时间戳的时候,传入查询的时候,必须也得传时间戳查询

12.查询表后大部分字段都显示为null而没有显示值的话,那么有两种可能:

①看这些字段的映射是否正确,②看这个查询用的是resultMap还是resultType,如果是resultType的话,也有可能导致查出数据字段显示为null,原因是因为使用resultMap的时候 resultMap="BaseResultMap",的BaseResultMap中通过 这样的语句,进行了驼峰的转换,所以显示就没有问题

13,如果运行出现报错

ERROR StatusLogger Unable to invoke factory method in class class org.apache.logging.log4j.core.appender.RollingRandomAccessFileAppender for element RollingRandomAccessFile. java.lang.IllegalStateException: Infinite loop in property interpolation of TRACEHOME/{TRACE_HOME}/{APP_NAME}/event.log: APP_NAME->sys:APP_NAME

原因:启动配置的VM options缺少参数-DAPP_NAME=应用名(默认可以写default)

14.Long类型作比较不可以直接用“=”号,需要用equels或者用longValue()

例如: totalAmt.longValue() != refundCountAmt.getTotalAmount().longValue()

15.在用bigdecimal做除法运算时,必须考虑到除不尽的时候,

错误的: BigDecimal AmtDivideGuestAmt = new BigDecimal(refundAmount).divide(new BigDecimal(guestAmount));

正确的:
BigDecimal AmtDivideGuestAmt = new BigDecimal(refundAmount).divide(new BigDecimal(guestAmount),2,BigDecimal.ROUND_HALF_UP);

如果后续还要做乘法运算的话,这个保留小数就需要在乘法过后再加,这样精度会更高 有一个.setScale(0, BigDecimal.ROUND_HALF_UP)的方法

16.mysql唯一键索引冲突异常有三个:

①:DuplicateKeyException ②:MySQLIntegrityConstraintViolationException ③:DataIntegrityViolationException

17.查询的时候,查询的where条件必须要是索引,如果不是索引,就需要去新增索引

18.多方面考虑,查询之后如果后续用到的字段有可能为空,那就需要做非空判断

19.调用接口的时候,调用接口的入参和出参尽量都在调接口的方法里边处理,不要放在外边

20.mybatis必传条件不要加if判断