1 前言
最近在做一个项目,2个人一起做,是一个电子商务平台,分前台和后台,使用的技术是Spring Boot+MyBatis+thymeleaf+Vue。前后台是同一个写进同一个项目,一开始觉得还可以,毕竟是练习的小项目,但是最后发现前后台分开两个项目的好处有多好,特别是一人做一个端的情况,因为项目前后端整合的时候,因为一些配置问题,有一些功能出现了bug……所以建议如果分前后台的系统还是分开两个项目做吧。
2 遇到的坑
- 对于团队做项目而言,使用代码共享来对代码进行管理,特别注意提交代码的完整性,如果漏了个类或是没有把某个文件漏上传了就会在别人更新后出现错误,这时候就会被说了。还有提交代码的备注也很重要。
- 队友的选人很重要,如果队友不给力,就算你的部分做得多好,他的部分做不好,整体来说就是不完美了,或者自己愿意帮他做……
- 有时候写代码为了方便,不备注,到最后整合来做小修改的时候,对着自己的代码看了半天。
- 项目使用eclipse工具来开发,有一个功能是上传图片,就这个小功能让我找了好一会bug。原本是使用Springmvc封装的方法transferto()来对图片进行保存,设定图片上传到项目的静态文件夹上,结果因为使用的是相对路径的问题,该方法自动保存到默认的加了前缀的路径下,又因为这样的目录在电脑中不存在,所以一直报错。具体原因看https://blog.youkuaiyun.com/daniel7443/article/details/51620308。按照网上的配置没有成功,最后放弃了这个方法使用了如下方法。还有一个坑是,好不容易图片正确上传了,结果在页面中没有正确显示图片(找不到),这是因为eclipse没有热部署,所以要去刷新项目或对应的文件夹,图片才能顺利地显示出来,找bug找到头发都没了……
import org.apache.commons.io.FileUtils;
// 如果文件名不空就是成功上传
if (StringUtils.isNotBlank(uploadImage.getOriginalFilename())) {
FileUtils.copyInputStreamToFile(uploadImage.getInputStream(),
new File("src/main/resources/static/client/images/ad/",saveName));
}
package org.zhku.eshop.util;
public class StringUtils {
// 私有的构造方法,保护此类不能在外部实例化
private StringUtils() {
}
/**
* 如果字符串等于null或去空格后等于"",则返回true,否则返回false
*
* @param s
* @return
*/
public static boolean isBlank(String s) {
boolean b = false;
if (null == s || s.trim().equals("")) {
b = true;
}
return b;
}
/**
* 如果字符串不等于null或去空格后不等于"",则返回true,否则返回false
*
* @param s
* @return
*/
public static boolean isNotBlank(String s) {
return !isBlank(s);
}
}
- 项目中需要显示时间,需要的格式是yyyy-MM-dd HH:mm:ss,但是实体类中定义的时间类型是Date,导致输出的时间没有了时分秒,这让我很头疼,只能在前端找方法来做时间格式的转换,结果后面学到一个注释特别好用(如下),把该注释写到对应实体类的属性上,页面获取的时间格式就能随意转换了,这么写有个缺点是当该属性为null时,会自动把当前的时间插入数据库。
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
3 收获
对于没有多少项目经验的我来说,每一次的做项目的过程中都是在成长,无论是人际交往上的还是能力上的成长。
- 做完这个项目让我接触到“拦截器”,想想以前还是在每一个控制层中做很多判断,很多的if语句看起来就烦。现在写多两个类就能解决这些问题,看起来简洁很多。
- 做项目使用了PageHelper分页插件,让sql语句变得更简洁,以前是用的是limit关键词控制查找数据,这样要传输很多数据,例如一共有几条数据,第几页,一页显示几条数据等。
- 锻炼了对代码编写的能力,不可否认,我写代码是越写越起劲,越写越兴奋(提前是没有出现很多bug),因为项目写多了,找bug能力也会提高,有一些功能做过的话一看就知道难不难,怎么实现,正如“庖丁解牛”。
- 最后项目验收时,老师提供了很多宝贵的意见,例如:订单类的记录需要软删除而不是和硬删除、数据库中用户密码最好不用明码来保存,可以使用MD5码对密码+一些用户信息来进行加密等。
- 项目的测试很重要,多点测试发现存在的逻辑bug。