开发过程中遇到的问题解决办法

1、JPA查询更新数据:先查,后save()。然后对查出来的对象进行修改。

jpa中findOne(Retrieves an entity by its id)和getOne(Returns a reference to the entity with the given identifier),

2、restful的接口,对于查询和更新单填数据,把id放在url上

3、Mybatis 中resultType和resultMap的区别。resultType 直接定义的mybatis的返回值的类型。resultMap 是可以自定义返回的类型,字段映射可以自定义。

4、Mybatis时间格式化后需要起别名,否则字段对应不上,返回null。

在mysql中,DATE_FORMAT(date, format) 函数根据format字符串格式化date值

5、数据出错时,先去对应的数据库查看数据是否一致,同时可以开启控制台打印sql,到数据库中查询。

  在mybatisconfig中添加

6、单元测试应该在接口测通的基础上,再测试一些异常值边界值的情况。以防联调时出错。

编写单元测试代码遵守BCDE原则:

边界值测试

普通正常系测试

异常错误系测试

7、代码抽取---当两个对象参数相同时,对这恋歌对象做的事也相同,可以考虑只传参数进去,而不必进行对象传递,这样子进行代码抽取。

8、关于正则表达式:[0-9]{8}  匹配0-9八位数字

  [0-9]*.?[0-9]{1,6}?  匹配金额小数点后6为小数


9、做单元测试的时候,使用Mockito时,如果返回值在代码逻辑里面有用到,那么需要自己模拟这样的一个值来返回,并放在Mockito的返回结果里面。

    把@MockBean加在需要mock的类上。

10、在idea中新建包的时候最好不要使用.来分开层级目录,一层一层的建。

11、使用 @FeignClient 注解实现与 Spring Cloud 服务注册发现注册服务的整合。它实现了客户端负载均衡和服务降级及监控相关的功能。

12、jpa多表查询返回结果如何映射?(映射结果写全路径,结果会自动映射)

eg: @Query(value = "SELECT new com.johnfnash.learn.domain.ViewInfo(u, a) FROM UserInfo u, Address a WHERE u.addressId = a.addressId")

13、jpa中自定义查询语句的时候,from后面可以是具体的表名。也可以是表对应的实体名。要注意如果是表名需要加上nativeQuery = true

@Transient表示该字段是数据库没有的字段

14、mysql 中 STR_TO_DATE('16/11/2020', '%d/%m/%Y')会自动把字符串转成2020-11-16,类型为日期类型。(不需要考虑转换后的日期格式)

15、java类是单继承的。classB Extends classA

java接口可以多继承。Interface3 Extends Interface0, Interface1, interface……

16、@Bean是一个方法级别上的注解,主要用在@Configuration注解的类里,也可以用在@Component注解的类里。添加的bean的id为方法名。(最早的spring的bean注入的xml文件需要定义)。

spring5.0 之@Primary注解的应用

在spring容器中,如果同一个类型有多个实例,但我们需要注入一个的时候,我们必须采取措施,不然spring容器会报错:....required a single bean, but 2 were found:.........

有时候我们能保证同一个类型在spring容器中只有一个实例,有时候我们保证不了,此时不讨论by name注入。这个时候@Primary注解就非常重要了。

17、Spring的BeanUtils.copyProperties()  org.apache.commons.beanutils.BeanUtils  用法:BeanUtils提供对Java反射和自省API的包装。其主要目的是利用反射机制对JavaBean的属性进行处理。

18、关于子类无法访问父类protected属性和方法的问题。

19、https://blog.csdn.net/Norte_L/article/details/80250057

20、联调,远端debug,

21、一个对象

22、类型转换(看后面) Father father = new Son();  Son son = (Son)father;(对)

Father father = new  Father();Son son = (Son) father;(错)

23、java8 ::用来访问对象方法

24、Spring框架 boolean类型命名is开头会引起序列化错误

25、getResourceAsStream有以下几种:

1. Class.getResourceAsStream(String path) : path 不以’/'开头时默认是从此类所在的包下取资源,以’/'开头则是从

ClassPath根下获取。其只是通过path构造一个绝对路径,最终还是由ClassLoader获取资源。

2. Class.getClassLoader.getResourceAsStream(String path) :默认则是从ClassPath根下获取,path不能以’/'开头,最终是由ClassLoader获取资源。

3. ServletContext. getResourceAsStream(String path):默认从WebAPP根目录下取资源,Tomcat下path是否以’/'开头无所谓。

26、记录一个Pagehelper的深坑

在使用Pagehelper写程序时遇到一个问题,在数据很多的表里使用这个分页一开始是没有问题的每页的数据都能显示,但是在数据比较少的表中使用Pagehelper进行分页时就出问题了 不管页码超出多少一直都会返回数据,无论怎么修改都不行 头都大了,最后在一个大神的帖子中找到了问题,具体说明如下:

导致该问题的原因是pageHelper里面自带的一个功能,叫做reasonable分页参数合理化

在下用的SpringBoot下面贴出yml配置

pagehelper:

  helperDialect: mysql

  reasonable: true

  supportMethodsArguments: true

  params: count=countSql

就是上文中的“reasonable”属性导致的

当reasonable:true时在pageNum<1会查询第一页,如果pageNum>pages会查询最后一页

也就是说当pageNum>你的最大页数时会返回最后一页的数据而不是返回null

禁用合理化时,如果pageNum<1或pageNum>pages会返回空数据

所以如果不希望这种情况则需要设置reasonable:false

27、清空表数据的时候报1701错误(外键约束)

Mysql中如果表和表之间建立的外键约束,则无法删除表及修改表结构。

解决方法是:

1、首先取消外键约束:SET FOREIGN_KEY_CHECKS=0;

2、修改表数据或表结构

3、然后再设置外键约束: SET FOREIGN_KEY_CHECKS=1;


(记录日常遇到的开发问题)

你可能感兴趣的:(开发过程中遇到的问题解决办法)