大规模代码不易维护,分层是为了解耦,使得项目更加容易维护。
Spring
主要使用IoC(基于面向对象的管理对象)和AOP(面向切面编程,面向对象的改进)来管理一切bean。
IoC:自动创建Spring容器,自动扫描某些包下的某些Bean,装配到容器里。注解标识的类是一个底层的配置文件,扫描配置类所在的包以及子包下的Bean.
装配Bean时,一个接口口有多个实现类,可用@Primary来指定使用哪个实现类的对象;
IoC中创建吗对象一般是单例模式,希望每次调用getBean方法就创建对象,需要加上@Scope(“prototype”)注解。
Spring MVC
浏览器访问服务器,首先访问的表现层,期待表现层返回一些数据。表现层调用业务层来处理数据,业务层处理业务的过程中调用数据层。最后表现层得到业务层返回的数据后经过加工,返回给浏览器。
核心组件是前端控制器,如下图:
请求由前端控制器处理,根据注解(方法上的路径)找到Controller。Controller封装页面想要的数据放入model里,返回给前端控制器,调用视图模板并用model里的值替换view template里的值,生成一个动态网页返回给DispatcherServlet,然后DispatcherServlet把html响应给服务器。
Thymeleaf语法:标准表达式判断空值等,循环模板的布局。
get:浏览器向服务器获取数据。
post:浏览器向服务器提交数据。
Mybatis
通过提供Dao层,并将sql写在 .xml文件里,将业务逻辑和数据访问逻辑分离,使系统设计更清晰,易维护。
开发社区首页及帖子分页功能
社区首页,一页上显示10条帖子的标题等信息
DAO层
根据帖子详情的sql文件写实体类和对应的mapper接口,并在对应的.xml文件中写sql语句
MVC层
thymeleaf自动获取页面上(Page对象)的帖子开始索引和帖子数量限制limit(默认为10),知道这些帖子的UserId,并调用Service层的根据UserId查找帖子详情的方法,该方法中又调用Dao层的根据UserId查找数据库中帖子详情的方法,从而使用对应的.xml文件中的sql语句从数据库中查找数据。
- 显示帖子标题等信息:社区首页index.html上,帖子列表部分,有model装载的discussPosts列表,列表的每个元素是一个哈希表,暂时只包括键值"user"和"post",用二者动态更新主页上的帖子列表部分。
- 分页
分页的相关方法
见Page实体类