SSM总结
这段时间学完了spring,springMVC,以及实现了ssm整合,也做了一些业务,今天来做个总结
一、SSM总的框架
- 构成
首先来讲讲ssm框架的整体吧,ssm框架主要由Spring、SpringMVC、mybatis三层构成,学起来也不是那么难。 - 学习路线
学习顺序是由mybatis→Spring→SpringMVC来走的;先将mybatis和spring这两部分各自的特性与知识学完后,在学习将这两层整合,接着到MVC里进行ssm整合得到一个完整的底层框架 - 作用
mybatis主要用来实现底层与数据库交互,实现增删改;spring主要用来简化对象处理问题,以及非侵入式的切入增强;springMVC则是在Spring的基础上结合mybatis实现三层MVC三层架构 - 便利性
在学习过程中可以很明显的感受到框架带来的便利,尤其是在mybatis实现的增删改、spring中对对象的装配、aop的增强、以及springMVC中controller层访问页面这几个点上感受最深,我相信有学过javaweb后再来学框架的你们会体会到这点
二、S+S
1、mybatis层
这一层主要重点在于配置文件以及高级查询,尤其是高级查询中的一对一、一对多、多对多,这一部分我在前面的博客中讲过了就不再重复了
这里再提几个要注意的点
①要开启日志! 日志对于bug的排查有着巨大的作用
②写mapper文件最好分层写,尤其是对于嵌套查询,分层有助于管理
③写完mapper及时注册到主配置文件中
④注解开发似乎再mybatis这部分不是很常用,仅作熟悉为未来sprint boot准备
2、spring层
这部分一些主要重点
- IOC
IOC中要学会如何将对象托管给Spring以及学会各种基本类型的注入,基本都是配置的工作 - AOP
aop这部分切入步骤基本都是固定的,用注解实现比配置实现要方便得多,但是在注解实现中要多次写execution语句。
若使用注解来实现,那么我们直接编写一个用来切入的类,通过注解,确定切点以及前置后置代码,此处切点处要用到一个execution函数,execution函数的常用语法即* 某个类全限定名称.*(..)
,前面的*
表示返回值,后面的*
表示该类的所有方法,*(..)
表示所有任意参数的方法 - 整合mybatis
对于整合这一步呢,主要就是在配置文件。
配置文件主要配置以下这几项:
①数据源DataSource
这一步可替代mybatis配置文件中的数据源,用来配置链接数据库的四个参数
②sqlSessionFactory
这里实际就是用Spring的IOC来替代mybatis中创建sqlSessionFactory的步骤
③SqlSessionTemplate
这个相当于我们在mybatis中使用的sqlSession,后面我们可以通过实现类继承SqlSessionDaoSupport类来省略此步 - 事务
事务还算是挺重要的,
配置步骤①、添加DataSourceTransactionManager配置,引用我们前面配置的数据源datasource②、配置tx:advice使用第一步添加的事务管理器,配置参数为所需方法添加事务
spring层的核心就是ioc和aop,学会了这两点对spring也了解的七七八八了。
三、SpringMVC层
此处我将省略springMVC单独层的实现,直接进入SSM整合,在这一层我们就要将前面所学的全部整合了,这里我会将详细一点,如何完成一个SpringMVC的基本框架,这里我们采用的是将配置文件分层整合的
1、mybatis层
1、数据库建库ssm_assemble建表books
如图
2、maven项目创建并添加依赖
<dependencies>
<!--Junit-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<!--数据库驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
</dependency>
<!-- 数据库连接池 -->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.2</version>
</dependency>
<!--Servlet - JSP -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!--Mybatis-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.2</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.2</version>
</dependency>
<!--Spring-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.1.9.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.1.9.RELEASE</version>
</dependency>
</dependencies>
3、Maven资源过滤设置
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>/.properties</include>
<include>**/.xml</include>
</includes>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>/.properties</include>
<include>**/.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
4、创建基本结构
com.wangCool.Pojo(写bean)
com.wangCool.Dao
com.wangCool.Service(调用dao层)
com.wangCool.Controller(实现mvc)
mybatis-config.xml(证明我们有用到mybatis)
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
</configuration>
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring- beans.xsd">
</beans>
创建该xml是要create一个application context,idea右上角提示,然后之后所有配置文件不用再create,直接点击已存在的这个配置归属进去就好了,如图之后的configure都点击已有的那个
5、在idea中连接数据库
- 如图添加MySQL
- 添加配置信息①注意时区②testConnect有✔提示就表示成功了
6、mybatis-config中添加typeAliases设置别名,mappers设置mapper路径
<typeAliases>
<package name="com.wangCool.pojo"/>
</typeAliases>
7、编写book的pojo类
private Integer bookId;
private String bookName;
private Integer bookCounts;
private String bookMessage;
8、写bookMapper接口,编写基本的增删改查抽象方法
此处编写了,添加图书,删除图书,更新图书,查询图书,查询所有图书方法
9、编写bookMapper接口对应的bookMapper.xml文件,写对应接口的增删改查
①、注意,在mybatis-config我们已经设置了别名写ParameterType或resultType的时候就不用写全限定名称了,直接写pojo的名称就ok
②、在mybatis-config中注册mapper
10、①编写service层,新建bookService接口,方法和bookDao即我们写的bookMapper基本一样②用bookServiceImpl实现该类
bookServiceImpl中值得注意的是,要有一个bookService属性,然后还有其setter方法,方便之后注入
2、spring层
1、resources下新建spring-dao.xml配置文件(用来整合dao层)【数据源等的基础配置】
通常配置三个重要参数:①数据库连接信息配置②连接池配置③sqlSessionFactory
此处我们使用c3p0连接池,添加c3p0连接池的基本属性
<!-- c3p0连接池的私有属性 -->
<property name="maxPoolSize" value="30"/>
<property name="minPoolSize" value="10"/>
<!-- 关闭连接后不自动commit -->
<property name="autoCommitOnClose" value="false"/>
<!-- 获取连接超时时间 -->
<property name="checkoutTimeout" value="10000"/>
<!-- 当获取连接失败重试次数 -->
<property name="acquireRetryAttempts" value="2"/>
</bean>
2、resources下新建spring-service.xml配置文件(用来整合service层)【事务】
2、配置
①添加service扫描包配置
<context:component-scan base-package="com.wangCool.service"/>
②注册bookServiceImpl的类,注入bookMapper
<bean id="bookServiceImpl" class="com.wangCool.service.bookServiceImpl">
<property name="bookMapper" ref="bookMapper"/>
</bean>
③添加事务配置,暂不添加那个事务的aop
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/>
</bean>
④在applicationContext.xml中添加import标签来引用service配置
如图,将Dao和service都引入
3、springMVC层
-
配置web.xml
①配置DispatcherServlet
这里我们引用了applicationContext.xml总配置文件
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
②乱码过滤
<filter>
<filter-name>encodingFilter</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>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
- 在resources创建spring-mvc.xml
头文件约束
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- 添加注解驱动 -->
<mvc:annotation-driven/>
<!--静态资源过滤-->
<mvc:default-servlet-handler/>
<!--扫描包controller-->
<context:component-scan base-package="com.wangCool.controller"/>
<!--视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">
<property name="suffix" value=".jsp"/>
<property name="prefix" value="WEB-INF/jsp/"/>
</bean>
在WEB-INF中添加jsp文件夹
- 在总配置文件applicationContext.xml中引入spring-mvc.xml文件
到此处,一个最基本的ssm框架就搭好了!
四、总结
总的来说ssm不算特别难学,在前面的javaweb底层学过后再来学ssm应该是越来越容易的,毕竟随着发展,这些东西肯定会越来越容易,开发肯定是越来越简单的,但是也不意味着我们可以只学后面的简单的框架,知道原理更利于我们的发展!