浅谈框架之SSM的配置

来源:互联网 发布:windows xp 自动登录 编辑:程序博客网 时间:2024/05/29 09:16

1.SSM框架简介

SSM框架是java开发中比较流行的框架之一,他是由Spring+SpringMVC+Mybatis整合而成。

1.1、Spring

    Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。 简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。

1.2、SpringMVC

    Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring MVC 分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。

1.3、MyBatis

   MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。MyBatis是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAO)MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML或注解用于配置和原始映射,将接口和 Java 的POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

2.SSM框架基础配置

2.1 IDEA通过maven构建web项目

先通过new project -> 选择 maven->勾选从模板创建->webapp
这里写图片描述

2.2 引入SSM相关的依赖

spring相关的依赖有spring-context,spring-core,spring-beans,spring-web,spring-jdbc-spring-aop,spring-aspects等;
springMVC相关依赖spring-webmvc
mybatis的相关依赖mybatis,mybatis-spring
如果不用maven构建的话,这些jar包都要从网上下载下来加入lib并构建到项目路径中,用maven的话我们就可以去maven的中央仓库里搜索并添加到pom.xml文件中.

<dependencies>        <!--引入springmvc相关依赖-->        <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-webmvc</artifactId>            <version>4.3.7.RELEASE</version>        </dependency>        <!--引入spring 相关依赖-->        <!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-context</artifactId>            <version>4.3.7.RELEASE</version>        </dependency>        <!-- https://mvnrepository.com/artifact/org.springframework/spring-core -->        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-core</artifactId>            <version>4.3.7.RELEASE</version>        </dependency>        <!-- https://mvnrepository.com/artifact/org.springframework/spring-beans -->        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-beans</artifactId>            <version>4.3.7.RELEASE</version>        </dependency>        <!-- https://mvnrepository.com/artifact/org.springframework/spring-web -->        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-web</artifactId>            <version>4.3.7.RELEASE</version>        </dependency>        <!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-jdbc</artifactId>            <version>4.3.7.RELEASE</version>        </dependency>        <!-- https://mvnrepository.com/artifact/org.springframework/spring-aspects -->        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-aspects</artifactId>            <version>4.3.7.RELEASE</version>        </dependency>        <!-- https://mvnrepository.com/artifact/org.springframework/spring-aop -->        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-aop</artifactId>            <version>4.3.7.RELEASE</version>        </dependency>        <!--引入mybatis的相关依赖-->        <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->        <dependency>            <groupId>org.mybatis</groupId>            <artifactId>mybatis</artifactId>            <version>3.4.2</version>        </dependency>        <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->        <dependency>            <groupId>org.mybatis</groupId>            <artifactId>mybatis-spring</artifactId>            <version>1.3.1</version>        </dependency>        <!--引入数据库连接池 和 驱动-->        <!-- https://mvnrepository.com/artifact/com.mchange/c3p0 -->        <dependency>            <groupId>com.mchange</groupId>            <artifactId>c3p0</artifactId>            <version>0.9.5.2</version>        </dependency>        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->        <dependency>            <groupId>mysql</groupId>            <artifactId>mysql-connector-java</artifactId>            <version>5.1.38</version>        </dependency>        <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->        <dependency>            <groupId>javax.servlet</groupId>            <artifactId>javax.servlet-api</artifactId>            <version>3.1.0</version>            <scope>provided</scope>  <!--因为服务器里有开发的时候不引入会报错,所以加上provided 来告诉 这个包是已经提供的。-->        </dependency>        <dependency>            <groupId>junit</groupId>            <artifactId>junit</artifactId>            <version>3.8.1</version>            <scope>test</scope>        </dependency>    </dependencies>

2.3 配置web.xml

通过以前的学习,我们知道web项目都是提供动态服务的java应用程序其实质还是servlet。而这些java应用程序本身是没有main方法,要启动这些java就得依靠另外一个java应用程序servlet容器(tomcat)来启动。那serlvet容器又怎么知道该启动那些serlvet,该初始化那些资源呢?我们可以通过一个配置文件来告诉servlet容器,这个文件就是web.xml。所以我们需要将spring ,springMVC,mybatis的一些配置在web.xml中配置。
spring与mybatis的配置通常都整合在applicationContext.xml中
而要使用mvc 的第一个拦截器就是 dispatcherServlet

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"        xmlns="http://java.sun.com/xml/ns/javaee"        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"        id="WebApp_ID" version="2.5">    <!--===================================配置spring  start==================-->    <context-param>        <param-name>contextConfigLocation</param-name>        <param-value>classpath:applicationContext.xml</param-value>    </context-param>    <!--==================================配置spring  end==================-->    <!-- =====================================配置mvc 相关前端拦截器  start================= -->    <!-- mvc 前端控制器的第一种方式 可以指定 mvc的配置文件      1.名字可以不一定要用dispatcherServlet      2.spring-mvc.xml文件可以防止其他的位置。    -->    <servlet>        <servlet-name>springDispatcherServlet</servlet-name>        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>        <init-param>            <param-name>contextConfigLocation</param-name>            <param-value>classpath:spring-mvc.xml</param-value>        </init-param>        <load-on-startup>1</load-on-startup>    </servlet>    <servlet-mapping>        <servlet-name>springDispatcherServlet</servlet-name>        <url-pattern>/</url-pattern>    </servlet-mapping>    <!--mvc 的第二种配置     1.名字可以不一定要用dispatcherServlet     2.mvc的配置文件 必须放在与 web.xml同级的目录下并且名字 一定是 servlet-name-servlet.xml    -->    <!--<servlet>      <servlet-name>springDispatcherServlet</servlet-name>      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>    </servlet>    <servlet-mapping>      <servlet-name>springDispatcherServlet</servlet-name>      <url-pattern>/</url-pattern>    </servlet-mapping>-->    <!-- ============================配置mvc 相关前端拦截器  end================= -->    <!--=========================常用过滤器配置 start==============================-->    <!-- 字符 -->     <filter>         <filter-name>characterEncodingFilter</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>         <init-param>             <param-name>forceRequestEncoding</param-name>             <param-value>true</param-value>         </init-param>         <init-param>             <param-name>forceResponseEncoding</param-name>             <param-value>true</param-value>         </init-param>     </filter>     <filter-mapping>         <filter-name>characterEncodingFilter</filter-name>         <url-pattern>/*</url-pattern>     </filter-mapping>    <!-- 使用Rest风格的URI,将页面普通的post请求转为指定的delete或者put请求 -->    <filter>        <filter-name>HiddenHttpMethodFilter</filter-name>        <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>    </filter>    <filter-mapping>        <filter-name>HiddenHttpMethodFilter</filter-name>        <url-pattern>/*</url-pattern>    </filter-mapping>    <filter>        <filter-name>HttpPutFormContentFilter</filter-name>        <filter-class>org.springframework.web.filter.HttpPutFormContentFilter</filter-class>    </filter>    <filter-mapping>        <filter-name>HttpPutFormContentFilter</filter-name>        <url-pattern>/*</url-pattern>    </filter-mapping>    <!--=========================常用过滤器配置 end==============================--></web-app>

2.4 Spring与Mybatis的整合

spring在该项目中的作用,就是利用spring的ioc与aop两大核心机制来完成容器,事务控制等相关的作用。
数据库的访问技术可以分为两部分1,获得数据源dataSource 2,操纵数据库(crud).spring 也提供了 这两个 DriverManagerDataSource, 和jdbcTemplate 进行数据库访问,当然你不想用spring自带的你可以 使用第三方 dataSource,和其他的orm框架,其中Mybatis就是第三方的orm,利用sqlSessionTemplate操纵数据库

<?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:aop="http://www.springframework.org/schema/aop"       xmlns:tx="http://www.springframework.org/schema/tx"       xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">    <!--spring 配置主要 配置数据源,mybatis的整合,事务控制,逻辑相关,bean的注入-->    <!-- 扫描除了 controller外的-->    <context:component-scan base-package="com.worldly.ssm">        <context:exclude-filter type="annotation"                                expression="org.springframework.stereotype.Controller" />    </context:component-scan>    <!-- 加载数据库配置-->    <context:property-placeholder location="classpath:dbConfig.properties"/>    <!--配置数据源 采用c3p0-->    <bean id="pooledDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">        <property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>        <property name="driverClass" value="${jdbc.driverClass}"></property>        <property name="user" value="${jdbc.user}"></property>        <property name="password" value="${jdbc.password}"></property>    </bean>    <!--整合mybatis-->    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">        <!-- 指定mybatis全局配置文件的位置 -->        <property name="configLocation" value="classpath:mybatis-config.xml"></property>        <property name="dataSource" ref="pooledDataSource"></property>        <!-- 指定mybatis,mapper文件的位置 -->        <property name="mapperLocations" value="classpath:mapper/*Mapper.xml"></property>    </bean>    <!-- 配置扫描器,将mybatis接口的实现加入到ioc容器中 -->    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">        <!--扫描所有dao接口的实现,加入到ioc容器中 -->        <property name="basePackage" value="com.worldly.ssm.dao"></property>    </bean>    <!-- 配置一个可以执行批量的sqlSession -->    <bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">        <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"></constructor-arg>        <constructor-arg name="executorType" value="BATCH"></constructor-arg>    </bean>    <!--=============================================  -->    <!-- ===============事务控制的配置 ================-->    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">        <!--控制住数据源  -->        <property name="dataSource" ref="pooledDataSource"></property>    </bean>    <!--开启基于注解的事务,使用xml配置形式的事务(必要主要的都是使用配置式)  -->    <aop:config>        <!-- 切入点表达式 -->        <aop:pointcut expression="execution(* com.worldly.ssm.service..*(..))" id="txPoint"/>        <!-- 配置事务增强 -->        <aop:advisor advice-ref="txAdvice" pointcut-ref="txPoint"/>    </aop:config>    <!--配置事务增强,事务如何切入  -->    <tx:advice id="txAdvice" transaction-manager="transactionManager">        <tx:attributes>            <!-- 所有方法都是事务方法 -->            <tx:method name="*"/>            <!--以get开始的所有方法  -->            <tx:method name="get*" read-only="true"/>        </tx:attributes>    </tx:advice></beans>

2.5 SpringMVC的配置

上面已经完成了2大框架的整合,SpringMVC的配置文件单独放,然后在web.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/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">    <!--配置mvc 扫描的包-->    <context:component-scan base-package="com.worldly.ssm.controller" use-default-filters="false">        <!--只扫描控制器。  -->        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>    </context:component-scan>    <!--配置视图解析器-->    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">        <property name="prefix" value="/WEB-INF/views/"></property>        <property name="suffix" value=".jsp"></property>    </bean>    <!--两个标准配置  -->    <!-- 将springmvc不能处理的请求交给tomcat -->    <mvc:default-servlet-handler/>    <!-- 能支持springmvc更高级的一些功能,JSR303校验,快捷的ajax...映射动态请求 -->    <mvc:annotation-driven/></beans>