项目中遇到的一些问题

1、There is no getter for property named '*' in 'class*’ 

意思是mapper的参数没有getter方法能接收,歧视问题主要是sql里写了动态if,参与动态sql时,mybatis会以OGNL对象树的形式即String.personName取值,导致异常抛出。

我给入参xxxVo添加了@Param("p")注解后,在sql里的属性都取为q.xxx就可以了。

具体参考:https://blog.csdn.net/qq_40925189/article/details/115835987

2、@ModelAttribute注解

https://blog.csdn.net/qq_42684642/article/details/83058211

3、项目中,在获取json数据转换为list以后,本来以为可以直接使用,比如Vo vo = list.get(0),结果在使用中报错“java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to com.XX”,搜索后发现是在转换成list时,list类型是LinkedHashMap而不是我需要的对象,Jackson在转换时按照标准行为将数据以List 返回,而不是作为 List 返回,但是我需要list中类型是我想要的数据类型;

在网上搜索后发现在stackoverflow上,有大神已经做出了回答,问题迎刃而解,可以直接使用ObjectMapper.convertValue()这个函数进行转换,代码如下,POJO是你需要的对象类型,

1

2

3

ObjectMapper mapper = new ObjectMapper();

List pojos = mapper.convertValue(resultList, new TypeReference>() { });  

通过这样转换之后,list类型转换为我需要的数据类型,然后可以进行接下来的工作,方法在Jackson的ObjectMapper包中。

4、sql返回值如果是整型的尽量设置为Integer包装类,这样如果查的是Null,也一样可以进行判断,设置为int就会报错。

5、积分购需求中有一个问题,已经完成的支付系统对于积分购的处理方式是根据订单实付的百分比进行积分折算,但实际上行社是对应每件商品扣减积分的,所以我们的处理方式是对积分商品进行限制,每次仅允许购买一种商品,从而解决这个问题。后续如果支付系统进行改造的话,可以考虑积分商品+普通商品或者多种积分商品同时购买等。

6、注意代码编写应该遵循阿里代码规范

①if else的else应该加大括号

②方法或者接口应该写清楚功能,参数,返回值等

③避免魔法值直接出现在代码中,比如str.equals("haha"),应该String s = "haha",str.equals(s);

④Object的equals方法容易抛空指针,所以我们的入参应该作为equals方法的参数来进行比较。

7、BigDecimal使用

注意如果进行比较时,比如和某个值比,应该b.compareTo(BigDecimal(num))。如果先b.longValue或b.BigIntValue会丢失精度

8、多线程情况下@Autowired失效

在多线程时使用@Autowired总是获取不到bean,原因是:

在网上查询发现是因为 spring bean 出于线程安全考虑,spring容器不允许注入bean至线程类,也就无法获得spring中的bean对象。

解决方法:手动获取
orderService= (OrderService)BeanContext.getBean("orderService");

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值