开发的日常踩坑记录

开发踩坑记录,不定时更新

—2021.4.14—
使用easypoi poi报错

cn.afterturn.easypoi.exception.excel.ExcelExportException: Excel导出错误

Caused by: java.lang.NoSuchMethodError: org.apache.poi.ss.usermodel.CellStyle.setAlignment(S)V

java.lang.reflect.InvocationTargetException: null

问题错误原因为poi依赖缺少或者是easypoi版本太低导致,项目中使用的为3.0.1版本,又忽略了poi版本,导致报错。
解决方案:
可以修改easypoi版本为最新版本,

<dependency>
         <groupId>cn.afterturn</groupId>
         <artifactId>easypoi-spring-boot-starter</artifactId>
         <version>4.2.0</version>
 </dependency>

然后把maven中org下poi的jar包删除一个3.15的 留下3.17 ,jar包版本冲突。

—2021.5.08—
报错信息:

check the manual that corresponds to your MySQL server version for the right syntax,
MySQL server version for the right syntax to use near

可能遇到的问题:
tips1:可能是关键字冲突了;

tips2:可能是SQL语句写错了;

我实际开发中遇到的问题是tips1,数据库表字段与SQL关键字冲突导致的错误。
解决方式:
把报错的sql语句放在navicat上执行一下,navicat会把sql语句中是否是SQL的关键字标记出来。
然后修改与SQL关键字冲突的字段,这样就解决了。

—2021.5.12—
问题:
下拉筛选框条件查询 前后端值不匹配问题。
解决思路:
1.把参数放到实体类,然后将实体类当参数去查询。
2.获取到的数据,用key来equals字段,如果匹配,就把这个key和value传到对应的字段。
3.既然他不确定个数,肯定传回来的是数组或者集合,遍历这个集合,然后用key equals每个字段,如果匹配,就吧values set进对应的字段。
4.这样这个对象里面字段有的有值有的为null,然后xml里面用if标签,进行判断,不为空就说明前端传了内容回来。在这里插入图片描述
在这里插入图片描述

假如我这个student是你的那个数据库实体类,这样传。
你这两个不是一样么,都是advertiserCode,这不相当于我Student里面的name字段名么,然后ttoe相当于我的张三。

前端给你的数据应该和我的map大差不差,你就遍历这个给你的数据集合,建一个对应的实体类对象,然后key和实体类字段比较,这里得辛苦点每个都得比,然后必然会有匹配的,然后set进去,这样就可以把前端给你的所有内容都放到实体类对象中了,然后把这个对象当参数,送到sql那边,动态拼接。

—2021.5.12—
查询数据时,数据库表里没有数据。就给前端返回集合时为空[ ]
在这里插入图片描述

不能是null,这样会不显示数据。

代码:
查询完数据库之后,DTO接完之后。
数据库中没有数据时,再进行判断一下。判断这个集合为空的话直接返回空集合就ok了。

if(CollectionUtils.isEmpty(baseSearchResultDTO.getResultList())){
                baseSearchResultDTO.setResultList(new ArrayList<AccountReportWrapper>());
                return new DelivertoolResult().resultMessage(baseSearchResultDTO);
            }

如果不是空的话,就直接返回数据即可。

return new DelivertoolResult().resultMessage(baseSearchResultDTO);

—2021.5.13—
在SQL语句中,进行计算。
这是查询全部

SELECT *FROM t_app_toutiao_report_creative

进行乘除计算:
在这里插入图片描述

SELECT 
la.account,
la.producer_ad_id,
la.deep_convert,
(la.account/la.deep_convert)*100 AS click_landing_page
FROM t_app_toutiao_report_creative AS la

—2021.5.18—

在数据库设计的时候,要注意float类型的数据。看看是否显示的是小数。如果是小数,在数据库表设计的时候,要添加小数的设计。

—2021.5.19—
stream 计算一个List对象中某个字段总和
int total = list.stream().mapToInt(User::getAge).sum();

—2021.5.20—
Stream的filter对List里面对象属性值过滤出空指针异常解决

在项目中使用stream的filter对list里的对象属性值判断时,如果对象属性值有null会
报空指针异常。(如上文中的Stu对象的age属性出现null值)。
解决方法:对此属性先做非空判断,注意:非空判断放前面


public class nullExcDemo {
    public static void main(String[] args) {
        List<Stu> list = new ArrayList<>();
        list.add(new Stu(19, "sire"));
        list.add(new Stu(23, "abc"));
        list.add(new Stu(78, "ab"));
        list.add(new Stu(null, "g"));
        /**
         * 在项目中使用stream的filter对list里的对象属性值判断时,如果对象属性值有null会
         * 报空指针异常。(如上文中的Stu对象的age属性出现null值)。
         * 解决方法:对此属性先做非空判断,注意:非空判断放前面
         */
        // 会报null指针异常
        // List<Stu> filtered = list.stream().filter(s -> s.getAge()==19).collect(Collectors.<Stu>toList());
        // 加非空判断在后面也会报null指针异常
        // List<Stu> filtered = list.stream().filter(s ->  s.getAge()==19 && s.getAge() != null).collect(Collectors.<Stu>toList());
        // 解决空指针异常
        List<Stu> filtered = list.stream().filter(s ->  s.getAge() != null && s.getAge()==19).collect(Collectors.<Stu>toList());
        System.out.println(filtered);
    }
}

```java
@Data
class Stu{
    private Integer age;
    private String name;
 
    public Stu(Integer age, String name) {
        this.age = age;
        this.name = name;
    }
}

—2021.5.21—
在这里插入图片描述
前端入参为一个参数(类型为String),可以通过一个参数进行筛选查询。
后端 接收到这个参数String account
1.先进行判断 如果为空,则查询全部。
2.如果不为空则进行条件查询。
2.1.1
sql语句可以写为

"WHERE " ,
"la.account_alias LIKE CONCAT('%',#{account},'%') ",
" OR la.promote_account_id LIKE CONCAT('%',#{account},'%') " ,

这样使用模糊查询,可以进行一个参数,多条件查询。
**前提:**保证 进行多条件查询时 类型要保持一致,这里都是String类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值