前言:
我们前后端交互的第一个ssm项目做成了,本次的项目与我而言不仅仅是磨砺更是一次成长锻炼,由于是第一次合作,总归有很多的问题,仓库的使用不熟练,让我们在合并分支的时候总会出现一些意想不到的bug,幸好我的好搭档会,出问题了就回退到之前的版本,让后再一个个重新手动合并上去,我平常写代码的时间也不多,分配时我是组长,但实际上对项目的整体掌控基本上都是交有他去处理,整个项目的沟通交流是前端的一个人运作,感觉自己好废,写的东西也没有比其他的几个组好多少,基础仍是我们的弱项,每次考核时很多的问题都答不出来,但也由此由此有了改进的方向,明确的目标,很感谢他们问题的提出,下面是我的一些我的一些感悟。
项目感悟:
对于本次的项目,我的一些底层逻辑弄的不是很好,有的在service层里处理的东西我写到了Control层里,也好在也不全是在那里处理的也有在service层处理逻辑再在Control层里进行调用,SQL语句用的还行,只能说能用但比较耗费资源就比如我的一个联表查询
select
a.id,
a.autor,
a.title,
a.descb,
a.nclass,
a.imgurl,
a.novel_update_statue,
a.near_time,
a.read_permissions,
t1.words,
t1.t_title,
t1.content_id
from novelautor a left outer join
(select
sum(t.words) as words,
j.title as t_title,
t.novel_id,
j.content_id
from (select
title,
novel_id,
content_id
from noveltitle
where id
in(select
max(id)
from noveltitle
group by novel_id)) as j
left join noveltitle as t
on t.novel_id=j.novel_id
where t.title_state=1
group by t.novel_id) as t1
on t1.novel_id=a.id
where 1=1
and a.approval_status=1
虽然能查出来结果,但子查询超过三个就不好了,逻辑判断就显得复杂,处理bug时就显得不好处理,而且我写的这个sql语句只是连接了两张表,主要是第二个表中的数据我需要同时查询出来他的最新内容和他组中的字数的总数,也就是用sum函数,这个在上次的博客里有详细解说,在此也不过多赘述,这个sql连表不是最多的但他用我的精力最最多。
关于实现在图片上加入水印
每个网站都会有自己的logo,我们的也不例外,logo是网站的标志他不仅仅是在页面上,还能在他的内容上,就比如CSDN上每次创作文章,加入的不仅有网站的标志还有作者本身的认证,插入图像的右下角都会有作者的昵称和CSDN的认证,我也将我们的小说网站的小说封面如此设计,在后台处理这个图片,加入作者的昵称和我们网站的logo,用的是Graphics2D这个类进行操作,又学习了一个新的io流:ImgIO处理图片,用了它之后觉得就不用判断传入文件格式,如果传错文件的话会报错,img类无法处理,只需要判断传输的是否是gif动图就ok了
public static void markWord(BufferedImage bufImg, Image img, String text, Font font, Color color, int x, int y) {
//取到画笔
Graphics2D g = bufImg.createGraphics();
//画底片
g.drawImage(img, 0, 0, bufImg.getWidth(), bufImg.getHeight(), null);
Integer long_text=g.getFontMetrics(g.getFont()).charsWidth(text.toCharArray(), 0, text.length());
g.setColor(color);
g.setFont(font);
//位置
g.drawString(text, x, y);
g.dispose();
}
这就是我将文字写入图片的一个类,开始也想将小说的名称写进去,但由于位置不能定死,还得换行居中,处理的话比较麻烦,所以就只有写入作者信息与网站logo的功能
public static void markPic(BufferedImage bufImg, Image img, Image markImg, int width, int height, int x, int y) {
//取到画笔
Graphics2D g = bufImg.createGraphics();
//画底片
g.drawImage(img, 0, 0, bufImg.getWidth(), bufImg.getHeight(), null);
//画logo水印位置
g.drawImage(markImg, x, y, width, height, null);
g.dispose();
}
接下来就说一下mybatis的动态sql,本次交付,我只使用了它的if标签,其他的几个foreach,collection等都没有用到,如果使用的话会节省性能的使用,所以对与其他几个动态sql的表签还要学习。
总结:
这次的项目结束了,但学习永无止境,也让我不断认识到基础才是最重要的,每一个模块以及工具类都是基于基础实现的功能,所以打牢基础才是最主要的,希望每天都有所得。
今天是母亲节,也让她看我的学习成果,也向所有的母亲致以敬意