本篇博客是对【SSM开发书评网】的总结&归纳;SSM是真正贴合实际工作的第一个项目;是比较重要的;
说明:
(1) 目前觉得,就目前本专栏介绍了的内容来说,真正困难的是【数据库表设计】和【系统功能模块和结构设计】;
目录
一:项目准备;
1.在开发一个系统前,必须要有十分严格和明确的需求说明书;即,开发前,一定要搞清楚需求。
2.开发前,要明确,采用什么技术栈。
这个项目主要使用SSM + Mybatis-Plus + layui + BootStrap + FreeMarker;
3.创建与配置工程的步骤如下:
(1)创建工程:【创建一个就Maven的工程】→【把该工程设置为webapp工程】→【在IDEA中配置Tomcat】;
(2)配置Spring和Spring MVC:【引入spring-webmvc,FreeMarker,Jackson依赖】→【配置DispatcherServlet】→【启用Spring MVC注解开发模式】→【配置请求与响应字符集】→【配置FreeMarker】→【配置JSON序列化组件Jackson】;
(3)Spring与Mybatis整合:【引入spring-jdbc,mybatis,mybatis-spring,mysql-connector-java,druid依赖】→【配置数据源与druid连接池】→【配置SQLSessionFactoryBean对象】→【配置Mapper扫描器】→【创建mybatis-config.xml配置文件】;
(4)整合其他组件:【整合JUnit单元测试】→【整合logback日志】→【配置声明式事务】;
(5)SSM整合Mybatis-Plus:【引入Mybatis-Plus依赖】→【修改SQLSessionFactory的实现类】→【在mybatis-config.xml中,增加Mybatis-Plus的分页插件信息】;
(6)然后,因为项目前端部分需要使用BootStrap和LayUI等;所以,需要在项目中需要引入基础资源有:jQuery,BootStrap,LayUI,raty,Art-Template等;
上面的内容虽然麻烦,但很简单,跟着SOP做就行了;
4.在数据库中创建一个逻辑空间;并根据项目业务需求,建表;
这一步需要相当的功力,目前自己似乎并不能很好的完成这个工作;
二:个人总结;
1.遇到的小组件有:JS模板引擎Art-Template;星型评分插件raty;Kaptcha验证码组件; wangEditor富文本编辑器;java中一款不错的HTML解析器:jsoup;
2.IDEA的几个快捷键:
创建【接口实现类】的快捷方式:【Alt + Enter】;
跳转到接口实现类的方法上:【Ctrl + Alt + 左键点击方法】;
创建测试类的快捷键:【Ctrl + Alt + T】
3.Mybatis-Plus很给力,但是对于一些复杂的操作,Mybatis-Plus是不行的;此时,我们还需要使用Mybatis的方式去解决;
4.究竟后端方法是【渲染数据跳转页面】还是【返回JSON数据】以及【返回JSON数据的格式】,这是由前端的要求决定的;而前端的编写又是由业务逻辑的需求决定的;
作为主栈是后端的开发者来说,只要和前端对好接口,就可以把主要精力放在后端的开发上;
5.Mybatis-Plus的分页查询,很给力;其中的QueryWrapper查询构造器比较重要;
6.在前端中,灵活使用“隐藏域”进行存值等操作,可以帮助开发;(这条还好,自己主栈不是前端;目前做到了解即可)
7.我们在条件判断,或者前后端传值的时候(Controller接收前端的参数):增加非空的判断(如果前端传递值为空,就赋给默认值),能够提高程序的健壮性;
8.自定义异常,作为一种【自己定义的警报器】还是很给力的;
9.在Service部分,对于可能出现异常的地方,我们要主动捕获异常;
10.即使Service部分没有抛出异常,为了全面考虑,我们在Controller调用的时候,也可以去捕获异常;(因为此时Service的方法没抛异常,不代表以后需要增加新逻辑的时,不会抛出异常)
11.每次开发完Service或者Dao后,及时的测试很有必要;
12.我们在使用静态资源时,最好使用绝对路径,而不要使用相对路径;(自然不排除,个别场景需要使用相对路径)
13.一个新知识,或者说是一个骚操作:Mybatis-Plus的【@TableField(exist = false)所谓关联查询时,给对象附加对象的策略:这可以让如Evaluation对象去承载evaluation表中没有对应字段的属性;
14.在登录和注册功能处,使用了Kaptcha验证码组件;
15.介绍了【注册】这种业务逻辑的开发套路;
16.介绍了【登录】这种业务逻辑的开发套路;
17.一种开发倾向:当我们的业务需要多表查询的时候,我们一般不在Dao层面使用多表查询的SQL语句来解决这个问题,而是在Service业务层面来化解,从而使得我们我们每次操作数据库的语句都是针对单表的;(PS:但是这点,我感觉不靠谱;)
18.Controller,Service,Dao在调用时,可以灵活一点,别那么死板,即希望具有一定的灵活性;(即AController可以去调用BService中定义的方法);
但是,究竟(一个要写在Controller中的)方法要写在哪个Controller中,这个能力需要慢慢加强;
19.在Service层中控,即使是更新、删除、修改的方法,最好也要返回对应的更新、
删除、修改的对象;
20.重复点赞问题,自己想了一个笨笨的策略;但是,在实际项目中,如何解决这个业务,还不知道;
21.讲到了Spring-Task定时任务的简单使用,其中也包括了Cron表达式和@Scheduled任务调度注解;
22.介绍了wangEditor富文本编辑器;主要内容是,wangEditor富文本编辑器的图片上传;
23.也展示了【layui表格 + Mybatis-Plus】,实现分页查询:使用体验不错;
24. 本篇博客讲到了更新操作的正确做法:【先查询原始数据】→【然后,在原始数据基础上,进行对应属性的调整】→【然后,再拿这个调整后的原始对象,去更新】;这点十分重要;
想到其他的,随时补充……