< dependency>
< groupId> org.springframework</ groupId>
< artifactId> spring-context</ artifactId>
< version> 5.3.9</ version>
</ dependency>
< dependency>
< groupId> org.springframework</ groupId>
< artifactId> spring-web</ artifactId>
< version> 5.3.9</ version>
</ dependency>
< dependency>
< groupId> org.springframework</ groupId>
< artifactId> spring-webmvc</ artifactId>
< version> 5.3.9</ version>
</ dependency>
< dependency>
< groupId> org.springframework</ groupId>
< artifactId> spring-tx</ artifactId>
< version> 5.3.9</ version>
</ dependency>
< dependency>
< groupId> org.aspectj</ groupId>
< artifactId> aspectjweaver</ artifactId>
< version> 1.9.7</ version>
< scope> runtime</ scope>
</ dependency>
< dependency>
< groupId> javax.servlet</ groupId>
< artifactId> javax.servlet-api</ artifactId>
< version> 3.1.0</ version>
< scope> provided</ scope>
</ dependency>
< dependency>
< groupId> org.springframework</ groupId>
< artifactId> spring-jdbc</ artifactId>
< version> 5.3.9</ version>
</ dependency>
< dependency>
< groupId> com.fasterxml.jackson.core</ groupId>
< artifactId> jackson-core</ artifactId>
< version> 2.12.3</ version>
</ dependency>
< dependency>
< groupId> com.fasterxml.jackson.core</ groupId>
< artifactId> jackson-databind</ artifactId>
< version> 2.12.4</ version>
</ dependency>
< dependency>
< groupId> mysql</ groupId>
< artifactId> mysql-connector-java</ artifactId>
< version> 5.1.37</ version>
</ dependency>
< dependency>
< groupId> org.mybatis</ groupId>
< artifactId> mybatis</ artifactId>
< version> 3.5.6</ version>
</ dependency>
< dependency>
< groupId> org.mybatis</ groupId>
< artifactId> mybatis-spring</ artifactId>
< version> 2.0.5</ version>
</ dependency>
< dependency>
< groupId> org.projectlombok</ groupId>
< artifactId> lombok</ artifactId>
< version> 1.18.16</ version>
</ dependency>
< dependency>
< groupId> com.alibaba</ groupId>
< artifactId> druid</ artifactId>
< version> 1.2.6</ version>
</ dependency>
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
< beans xmlns = " http://www.springframework.org/schema/beans"
xmlns: context= " http://www.springframework.org/schema/context"
xmlns: mvc= " http://www.springframework.org/schema/mvc"
xmlns: p= " http://www.springframework.org/schema/p"
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-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd" >
< context: component-scan base-package = " com.ssm.crud" >
< context: include-filter type = " annotation" expression = " org.springframework.stereotype.Controller" />
</ context: component-scan>
< mvc: annotation-driven/>
< mvc: default-servlet-handler/>
< bean class = " org.springframework.web.servlet.view.InternalResourceViewResolver" >
< property name = " prefix" value = " /WEB-INF/pages/" > </ property>
< property name = " suffix" value = " .jsp" > </ property>
</ bean>
</ beans>
<?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: tx= " http://www.springframework.org/schema/tx"
xmlns: aop= " http://www.springframework.org/schema/aop"
xsi: schemaLocation= " http://www.springframework.org/schema/beans http://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/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/aop https://www.springframework.org/schema/aop/spring-aop.xsd" >
< context: component-scan base-package = " com.ssm.crud" >
< context: exclude-filter type = " annotation" expression = " org.springframework.stereotype.Controller" />
</ context: component-scan>
< bean id = " dataSource" class = " com.alibaba.druid.pool.DruidDataSource" >
< property name = " password" value = " root" > </ property>
< property name = " username" value = " root" > </ property>
< property name = " driverClassName" value = " com.mysql.jdbc.Driver" > </ property>
< property name = " url" value = " jdbc:mysql://47.93.56.27:3306/ssm" > </ property>
</ bean>
< bean class = " org.mybatis.spring.mapper.MapperScannerConfigurer" >
< property name = " basePackage" value = " com.ssm.crud.mapper" > </ property>
</ bean>
< bean class = " org.mybatis.spring.SqlSessionFactoryBean" >
< property name = " dataSource" ref = " dataSource" > </ property>
< property name = " configLocation" value = " classpath:mybatisConfig.xml" > </ property>
< property name = " mapperLocations" value = " classpath:mapper/*.xml" > </ property>
</ bean>
< bean id = " transactionManager" class = " org.springframework.jdbc.datasource.DataSourceTransactionManager" >
< property name = " dataSource" ref = " dataSource" > </ property>
</ bean>
< tx: advice id = " txAdvice" transaction-manager = " transactionManager" >
< tx: attributes>
< tx: method name = " *" />
< tx: method name = " get*" read-only = " true" />
< tx: method name = " list*" read-only = " true" />
</ tx: attributes>
</ tx: advice>
< tx: annotation-driven transaction-manager = " transactionManager" />
</ beans>
<?xml version="1.0" encoding="UTF-8"?>
<! DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
< mapper namespace = " com.ssm.crud.mapper.UserMapper" >
< insert id = " save" >
insert into user(`name`,age)values (#{name},#{age})
</ insert>
< select id = " list" resultType = " user" >
select * from user
</ select>
</ mapper>
<?xml version="1.0" encoding="UTF-8"?>
< web-app xmlns = " http://xmlns.jcp.org/xml/ns/javaee"
xmlns: xsi= " http://www.w3.org/2001/XMLSchema-instance"
xsi: schemaLocation= " http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version = " 4.0" >
< context-param>
< param-name> contextConfigLocation</ param-name>
< param-value> classpath:applicationContext.xml</ param-value>
</ context-param>
< listener>
< listener-class> org.springframework.web.context.ContextLoaderListener</ listener-class>
</ listener>
< 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:spring-mvc.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>
< filter>
< filter-name> CharacterEncodingFilter</ filter-name>
< filter-class> org.springframework.web.filter.CharacterEncodingFilter</ filter-class>
< 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>
< init-param>
< param-name> encoding</ param-name>
< param-value> UTF-8</ param-value>
</ init-param>
</ filter>
< filter-mapping>
< filter-name> CharacterEncodingFilter</ filter-name>
< url-pattern> /*</ url-pattern>
</ filter-mapping>
</ web-app>
普通Javaweb工程与SSM工程对比。 SSM就是在Javaweb工程上进一步的封装,之前都是在web.xml中配置好,每一个Servlet对应的请求,当服务器接收到请求时,tomcat创建Servlet对象并执行doGet或doPost方法,此时Servlet再调用Service方法,Service层再调用Dao层方法将数据保存到数据库中。 当用了SSM以后,我们就只需要在web.xml配置少量信息就可以运行项目。spring监听器的作用就是当服务器启动时,加载配置文件,通过反射创建对象,并解决好属性依赖,也就是不需要在Servlet中new xxxService(),Service中也不需要在new xxxDao。这就实现了控制反转。然后再就是springmvc的DispatcherServlet,这个servlet拦截所有请求,当服务器接收到请求以后,就交给了这个DispatcherServlet处理, 在这个servlet中,springmvc会根据请求的url等信息,找到所有的controller,再找到每个controller中标注了@RequestMapping的方法,还是通过反射,来执行处理器方法,执行完成以后,由springmvc返回给前端。这里涉及到一个问题,就是Springmvc在创建controller对象时,如果自动注入了service,然后service是在spring的容器中的,springmvc是怎么找到的?因为spring的监听器在创建完IOC容器中后,会将容器拷贝到servletContext中,通过spring提供的WebApplicationContextUtils可以获取spring的容器中的对象,此时springmvc就可以完成依赖注入。spring又是怎么和mybatis整合的?此时我们引入了spring和mybatis的适配包,让spring创建mybatis的SqlSessionFactionBean,还要告诉mybatis的代理接口在哪里,让spring创建MapperScannerConfirue对象,执行接口包,这个对象会从容器中拿到SqlSessionFactory,然后为每一个接口创建代理对象,放入spring容器中,此时就可以在service层自动注入mybatis的接口实现对象了。