SSM框架构建知识点回顾
一、ssm框架的理解
ssm框架是由Spring+SpringMVC+Mybatis整合而来,用于构造相对简单的JavaWeb项目。下面对三项技术分别讲解。
Spring
Spring是一个轻量级的控制反转(IOC)和面向切面(AOP)的容器框架,用于装载Bean(类),有了这个我们就可以不用New来创建对象。
SpringMVC
SrringMVC分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让他们更加容易定制,相当于controllor
Mybatis
Mybatis是一个支持普通SQL查询、存储过程和高级映射的优秀持久层框架、管理SQL,用来和数据库打交道。
二、SSM框架整合
1、整合思路
由于SpringMVC是属于Spring框架中的一个模块,所以他们之间不存在整合的问题,只需要导入相应的jar包即可。
SSM框架整合的问题主要集中在Spring和Mybatis之间的整合以及SpringMVC和Mybatis之间整合的问题
2、导入相应jar包
导入SpringMVC核心JAR包
导入Mybatis核心JAR包
导入·Spring核心JAR包
导入·Spring和Mybatis整合JAR包
导入数据库连接池和mysql驱动整合JAR包
==
<!-- https://mvnrepository.com/artifact/org.springframework/spring-web -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.3.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.6.RELEASE</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/log4j/log4j -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.mchange/c3p0 -->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.2</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.3.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.3.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>4.3.6.RELEASE</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
<!-- SpringAOP相关jar -->
<!-- https://mvnrepository.com/artifact/org.springframework/spring-aop -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>4.3.6.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-aspects -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>4.3.6.RELEASE</version>
</dependency>
<!-- Spring事务支持相关jar -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>4.3.6.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.0.8.RELEASE</version>
</dependency>
<!-- MyBatis和Spring整合JAR -->
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.2</version>
</dependency>
<!-- jstl标签库相关jar -->
<!-- https://mvnrepository.com/artifact/org.apache.taglibs/taglibs-standard-impl -->
<dependency>
<groupId>org.apache.taglibs</groupId>
<artifactId>taglibs-standard-impl</artifactId>
<version>1.2.5</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.taglibs/taglibs-standard-spec -->
<dependency>
<groupId>org.apache.taglibs</groupId>
<artifactId>taglibs-standard-spec</artifactId>
<version>1.2.5</version>
</dependency>
<dependency>
<groupId>com.alipay</groupId>
<artifactId>trade</artifactId>
<version>20161215</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>8080</port>
</configuration>
</plugin>
</plugins>
</build>==
引用文本
3、编写配置文件
Spring配置文件
Mybatis配置文件
SpringMVC配置文件
web.xml配置文件
Spring配置文件 ApplicationContext.xml
==
<context:property-placeholder location=“classpath:dbInfo.properties”/>
<property name="driverClass" value="${driverClass}"/>
<property name="jdbcUrl" value="${jdbcUrl}"/>
<property name="user" value="${user}"/>
<property name="password" value="${password}"/>
</bean>
<!-- 为数据源添加事务管理器 -->
<bean id="dataSourceTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
<!-- 加载事务注解支持 -->
<tx:annotation-driven transaction-manager="dataSourceTransactionManager"/>
<!-- 配置Mybatis工厂:SqlSessionFactory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<!-- 指定Mybatis核心配置文件位置 -->
<property name="configLocation" value="classpath:mybatis-config.xml"></property>
</bean>
<!-- 配置mapper扫描器 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.qst.dao"></property>
</bean>
<!-- 扫描Service -->
<context:component-scan base-package="com.qst.service"></context:component-scan> ==
Mybatis配置文件 mybatia-config
==
<typeAliases>
<typeAlias type="com.qst.pojo.UserInfo" alias="userInfo"/>
<!-- <package name=""/> -->
</typeAliases>
<!-- <environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<dataSource type="POOLED">
<property name="driver" value="${driver}" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
</dataSource>
</environment>
</environments> -->
<mappers>
<!-- 使用类路径引入 -->
<mapper resource="com/qst/dao/UserDao.xml" />
<!-- 使用包名引入 -->
<!-- <package name="com.qst.mapper"/> -->
</mappers> ==
SpringMVC配置文件 SpringMVC-config
==
<context:component-scan base-package=“com.qst.controller”></context:component-scan>
<!-- 加载注解驱动 :配置处理器映射器和适配器 -->
<mvc:annotation-driven></mvc:annotation-driven>
<!-- 让静态资源放行 -->
<mvc:default-servlet-handler/>
<!-- 配置视图解析器 -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix">
<value>/WEB-INF/jsp/</value>
</property>
<property name="suffix">
<value>.jsp</value>
</property>
</bean> ==
配置web.xml文件
==
contextConfigLocation
classpath:applicationContext.xml
org.springframework.web.context.ContextLoaderListener
<!-- 编码过滤器,解决中文乱码问题 -->
<filter>
<filter-name>encoding</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 前端控制器 -->
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc-config.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>==
三、SSM框架系统层次结构
dao层(持久层):
主要是做数据持久层的工作,负责和数据库进行联络的一些任务在此封装,dao层的设计首先是dao的接口,配置数据源,以及有关数据库连接的参数在spring的配置文件中进行配置。
service层(业务层):
主要负责业务模块的逻辑应用设计;先设计接了,在设计其实现的类,业务逻辑实现具体要调用已定义的dao层的接口。
view层(表现层):
主要和控制层紧密结合,主要负责前台jsp页面的表示。
pojo层:
也有人称其为model、domain、bean等,pojo层是对应的数据库表的实体类。
controller层(表现层):
处理页面请求,并与service层交互
各层之间的联系
1、DAO层,Service层这两个层次都可以单独开发,互相的耦合度很低,完全可以独立进行,这样的一种模式在开发大项目的过程中尤其有优势
2、Controller,View层因为耦合度比较高,因而要结合在一起开发,但是也可以看作一个整体独立于前两个层进行开发。这样,在层与层之前我们只需要知道接口的定义,调用接口即可完成所需要的逻辑单元应用,一切显得非常清晰简单。
3、Service层是建立在DAO层之上的,建立了DAO层后才可以建立Service层,而Service层又是在Controller层之下的,因而Service层应该既调用DAO层的接口,又要提供接口给Controller层的类来进行调用,它刚好处于一个中间层的位置。每个模型都有一个Service接口,每个接口分别封装各自的业务处理方法。
对象调用的过程
前端JSP ——> Controller ——> Service ——> Dao ——> 数据库