SSM → Spring + SpringMVC + MyBatis前端
DAO层:DAO层主要是作数据持久层的工做,负责与数据库进行联络的一些任务都封装在此。DAO层的设计首先是设计DAO的接口,而后在Spring的配置文件中定义此接口的实现类,而后就可在模块中调用此接口来进行数据业务的处理,而不用关心此接口的具体实现类是哪一个类,显得结构很是清晰,DAO层的数据源配置,以及有关数据库链接的参数都在Spring的配置文件中进行配置。java
Service层:Service层主要负责业务模块的逻辑应用设计。 首先设计接口,再设计其实现的类接着再在Spring的配置文件中配置其实现的关联。这样咱们就能够在应用中调用Service接口来进行业务处理。 Service层的业务实现,具体要调用到已定义的DAO层的接口,封装Service层的业务逻辑有利于通用的业务逻辑的独立性和重复利用性,程序显得很是简洁。web
Controller层:Controller层负责具体的业务模块流程的控制, 在此层里面要调用Service层的接口来控制业务流程,控制的配置也一样是在Spring的配置文件里面进行,针对具体的业务流程,会有不一样的控制器,咱们具体的设计过程当中能够将流程进行抽象概括,设计出能够重复利用的子单元流程模块,这样不只使程序结构变得清晰,也大大减小了代码量。spring
DAO层,Service层这两个层次均可以单独开发,互相的耦合度很低,彻底能够独立进行,这样的一种模式在开发大项目的过程当中尤为有优点。Controller,View层由于耦合度比较高,于是要结合在一块儿开发,可是也能够看做一个总体独立于前两个层进行开发。这样,在层与层以前咱们只须要知道接口的定义,调用接口便可完成所须要的逻辑单元应用,一切显得很是清晰简单。sql
Service逻辑层设计:Service层是创建在DAO层之上的,创建了DAO层后才能够创建Service层,而Service层又是在Controller层之下的,于是Service层应该既调用DAO层的接口,又要提供接口给Controller层的类来进行调用,它恰好处于一个中间层的位置。每一个模型都有一个Service接口,每一个接口分别封装各自的业务处理方法。数据库
配置别名:用于批量扫描Pojo包spring-mvc
不须要配置mappers标签,但必定要保证mapper.java
文件与mapper.xml
文件同名mybatis
主要配置内容 :数据源,SqlSessionFactory,mapper扫描器 架构
这里使用sqlSessionFactoryBeanName属性是由于若是配置的是sqlSessionFactory属性,将不会先加载数据库配置文件及数据源配置mvc
通常不动原始生成的po类,而是将原始类进行集成vo类
目标:让spring管理service接口。
通常在ssm.service包下定义接口 eg:ItemsService
由于在applicationContext-dao.xml中已经使用了mapper扫描器,这里能够直接经过注解的方式将itemsMapperCustom自动注入。
applicationContext-service.xml在此文件中配置service。
建立springmvc.xml文件,配置处理器映射器 、 适配器、视图解析器
在web.xml中加入以下内容 contextConfigLocation配置springmvc加载的配置文件(配置处理器映射器、适配器等等) 若是不配置contextConfigLocation,默认加载的是/WEB-INF/servlet名称-serlvet.xml(springmvc-servlet.xml) 在url-pattern中 填入.action,表示访问以.action结尾 由DispatcherServlet进行解析 填入/,全部访问的地址都由DispatcherServlet进行解析,对于静态文件的解析须要配置不让DispatcherServlet进行解析,使用此种方式能够实现RESTful风格的url
在web.xml
中,添加spring容器监听器,加载spring容器
一、数据库链接,使用时建立,不使用就关闭,对数据库进行频繁链接开启和关闭,形成数据库资源的浪费
解决:使用数据库链接池管理数据库链接
二、将sql 语句硬编码到Java代码中,若是sql语句修改,须要对java代码从新编译,不利于系统维护
解决:将sql语句设置在xml配置文件中,即便sql变化,也无需从新编译
三、向preparedStatement中设置参数,对占位符位置和设置参数值,硬编码到Java文件中,不利于系统维护
解决:将sql语句及占位符,参数所有配置在xml文件中
四、从resutSet中遍历结果集数据时,存在硬编码,将获取表的字段进行硬编码,不利于系统维护。解决:将查询的结果集,自动映射成java对象
<select id="queryById" parameterType="long" resultType="Paper" >
SELECT paper_id,name,number,detail FROM paper WHERE paper_id=#{paperId}
</select>
如图,parameterType表示接收变量的类型,resultType表示返回的结果的数据类型,这个select表示接收long型数据,返回paper型结果
#{}
告诉 MyBatis 建立一个预处理语句(PreparedStatement)参数,在 JDBC 中,这样的一个参数在 SQL 中会由一个“?”来标识,并被传递到一个新的预处理语句中,就像这样:
// JDBC 代码,非 MyBatis 代码...
String selectPerson = "SELECT * FROM PERSON WHERE ID=?";
PreparedStatement ps = conn.prepareStatement(selectPerson);
ps.setInt(1,id);
Maven 的翻译为 “专家”、“行家” ,是一个跨平台的项目管理工具。主要用于:基于 Java 平台的项目(Maven 自己也是 Java 编写的)的构建、依赖包管理和项目信息管理。
Maven能提供一种项目的依赖配置,配置好的项目,Maven 能自动的从 Maven 的中央仓库中帮咱们下载并管理项目依赖的 jar 包,而且还能自动的管理这些 jar 包依赖的其余 jar 包。 maven 风格的项目,首先把全部的 jar 包都放在"仓库“ 里,而后哪一个项目须要用到这个 jar 包,只须要给出 jar 包的名称和版本号就好了。 这样 jar 包就实现了共享。
在pom.xml
文件中声明依赖的 jar 包,在web.xml
中声明编码过滤器并配置 DispatcherServlet。在spring-mybatis.xml
中完成 spring 和 mybatis 的配置。在spring-mvc.xml
中完成 Spring MVC 的相关配置。在jdbc.properties
中配置 c3p0 数据库链接池。在logback.xml
中完成日志输出的相关配置。
三层架构由用户界面层/表示层(User Interface),业务逻辑层(Business Logic Layer)和数据访问层(Data Acess Layer)构成。
其中每一层的做用为:
用户界面层:负责与用户进行交互。
业务逻辑层:主要是针对具体的问题的操做,也能够理解成对数据层的操做,对数据业务逻辑处理。
数据访问层
SSM主要由Spring,SpringMVC 和 Mybatis三个构成。它们在三层架构中所处的位置是不一样的,即它们在三层架构中的功能各不相同,各司其职。
SpringMVC:做为View层的实现者,完成用户的请求接收功能。SpringMVC的Controller做为整个应用的控制器,完成用户请求的转发及对用户的响应
MyBatis:做为 Dao层的实现者,完成对数据库的增、删、改、查功能
Spring:以整个应用大管家的身份出现。整个应用中全部的Bean的生命周期行为,均由Spring来管理。即整个应用中全部对象的建立、初始化、销毁,及对象间关联关系的维护,均由Spring进行管理