0.引言
依稀记得二月的一个星期四的晚上,课设小组的五人第一次见了面。“少年曾许凌云志,誓做天下第一流。”彼时的我们,尚且没有经受折磨,对未来充满了激情与乐观。曾经的我们觉得两个月很长,长到足以自学前端技术,代替老师提供的颇有年代感的前端界面。但实际上,时不我待,十二周转瞬即逝,济南没有春天。
1.入门及Git
1)idea的安装与配置
springboot项目建议使用idea Ultimate版本,极其方便。学生邮箱可以白嫖(虽然部分学校的邮箱验证被ban了,包括沙袋),网上也有破解版。
2)项目的启动
启动失败时应检查9090端口是否堵塞。
3)Git的使用
玄学问题
Git入门还是需要时间与精力的,小项目可以考虑不用(泪
常见命令 add,commit,remote,push,pull
千万不要乱用!!
git push -f
血的教训(叹气
而且git在合并分支(merge)的时候可能会出现奇怪的问题。
2.python部分(PersonalPicture的开发)
由于历史遗留原因,我的电脑在安装pycharm(内置python 3.9)之后又通过MicrosoftStore安装了python 3.10,导致了一系列问题。
1)wordcloud的安装
由于pycharm自动安装没有找到worldcloud这个库,我是从网上下载后手动安装。下载时选择了错误的版本,309版本对应python 3.9,310版本对应python 3.10版本。然后安装时在cmd中使用pip,安装好之后须在pycharm中手动导入。
from wordcloud import WordCloud
2)wordcloud的使用
wordcloud默认是用于英文的,如用于中文首先要配置字体(.ttf),中文分词可以使用jieba分词。使用mask设置蒙版时需要注意背景图片需要是黑白分明的,如果白色不纯会导致无法正确识别图片,同时图片的形状也不能过于复杂。
mask = np.array(Image.open("xxx.png"))
wc=WordCloud(mask=mask,font_path='msyh.ttc',background_color="white").generate(text=text)
3)pyinstaller打包(大坑!
耗时:约6h(泪目
在使用wordcloud做好词云生成器之后,我决定将其打包为exe程序,方便其在没有配置python的环境下运行。刚开始,我使用其默认打包方式进行打包,导致其出现闪退,无法正常使用。后来经过上网搜索,我先后采用了指定路径打包、虚拟环境打包等多种方式,折磨了好久,都没有解决这个问题。之后我发现了下图中的报错信息。
又经过一番搜索,我在csdn上发现了一篇极其有帮助的文章。
(https://blog.csdn.net/Beyond_F4/article/details/88706837)
按照文中所说一番操作,然后激动的心颤抖的手在terminal中敲下一行
pyinstaller -F -p 指定路径 xxxx.py
然后调出cmd,成功按我的预期输出了png图片。
在那一刻,我付出的所有用来debug的时间与经历,都得到了回报。
3.springboot框架的使用
1)springboot中调用exe程序
这个其实我在网上找到好几种方法,但是经过实验这一种一次成功且代码简洁。
String cmdStr1= "main.exe" + " " + fileName + " " + outFileName;
Runtime.getRuntime().exec("cmd.exe /c start "+cmdStr1);
- JPA中注解的使用
单向多对一@ManyToOne
@ManyToOne(fetch = FetchType.Lazy)
@JoinColumn(name="xxx")
举个例子:有两张表,员工表(employee)和部门表(department)。这个时候,员工对于部门来说,属于ManyToOne的一个关系,即多个员工对应一个部门。当我们创建表结构时,应在多的一方去维护表关系,也就是说,应将@ManyToOne注解加在员工表中,并且设置为懒加载。
fetch = FetchType.Lazy 懒加载,作用是用到该属性的时候,才会将该属性加载到内存。加载employee对象时,并不会去立即加载dept属性。如果不设置,缺省为eager,急加载。
3)对于dataRequest的理解与使用
dataRequest是课设框架中老师封装好的一个类,它传递了每次操作的学生id等信息,善加使用,就可以实现链接跳转指定页面等功能。这里给出家庭管理的例子。
//家庭管理初始化方法
@PostMapping("/familyInit")
@PreAuthorize("hasRole('ADMIN')")
public DataResponse familyInit(@Valid @RequestBody DataRequest dataRequest) {
int id=dataRequest.getInteger("studentId");
Student student=studentRepository.getById(id);
String name=student.getStudentName();
List dataList = getFamilyMapList(name);
return CommonMethod.getReturnData(dataList); //按照测试框架规范会送Map的list
}
4)其他
信息的CRUD,GPA的计算,文件的输入输出,本身都比较简单,也没有遇到什么大的问题,没有必要再赘述。
4.结语
1)感想
1 自主学习
“纸上得来终觉浅,绝知此事要躬行。”项目实践与我们上学期学习的Java知识有云泥之别,对自我学习能力提出了极大的挑战。“师傅领进门,修行看个人。”编程的学习就是这样,能力的高低要靠自己学习编程的热爱与毅力。信息时代,信息获取的方式多种多样,
2 细心细致
编程中不存在模棱两可,能run就是能run,有bug就是有bug,做不得假。往往错误之处就在于一些微小的细节,它们也许并不显眼,却对程序的正确运行起到了不可或缺的重要作用。
3 平和耐心
“一杯茶一包烟,一个bug,de一天。”这句话听起来有些夸张,但是在实际的开发过程中,一个bug一天也不一定能解决。在debug的过程中,保持平和的心态,耐心地去解决,是debug的关键。当一个困扰已久的bug被解决,心底喷涌而出的那种喜悦,犹如清晨出于长空的第一缕朝阳,难以用言语形容。
2)致谢
感谢学校和老师为我们提供了与往年迥异的面目一新的Java课设题目,极大地锻炼了我们的能力。
感谢我的课设小组的朋友们,没有摆烂,一起共同坚持到了最后。我们做的也许不是最好的,但我相信我们已经做的了我们能做的最好的。
最后感谢我自己一路坚持了下来,学到了不少有趣有用的技术。也希望我继续前行,成为自己心中理想的模样。
版权归原作者 zpy2223 所有, 如有侵权,请联系我们删除。