SSM整合
完成后的项目结构如下:
首先加入以下配置文件:
- db.properites
- generatorConfig.xml
- mybatis.xml
- spring-mvc.xml
- spring-boot.xml
db.properites
用来配置数据源信息,方便其他配置文件引用
内容如下:
jdbc.url=jdbc:mysql://localhost:3306/ssmstoredb?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.username=ssmdb
jdbc.password=123
connection_pools.min_pool_size=5
connection_pools.acquire_increment=5
connection_pools.max_pool_size=100
connection_pools.initial_pool_size=5
connection_pools.max_idle_time=600
connection_pools.checkout_timeout=60000
需要注意的是,如果使用mybatis8.0的话,驱动需要需要填:
jdbc.driver=com.mysql.cj.jdbc.Driver
如果使用mybatis5.0的话,驱动需要填
jdbc.driver=com.mysql.jdbc.Driver
MyBaitGenerator.xml
参考自动生成Mybatis文档
接下来介绍Spring相关的配置文件
需要介绍的有SpringMVC配置文件、Spring配置文件以及Web配置文件
- Spring配置文件配置的是父容器,用来处理后台依赖(除了控制层)
- SpringMvc配置文件配置的是子容器,用来扫描控制层
Spring配置文件
解决数据源、依赖注入、事务处理的问题
-
启动注解扫描(除了控制器)
控制器在springmvc配置文件中进行扫描
-
读取db.properties文件(数据源信息)
-
使用Spring继承的c390配置数据源
-
配置Session工厂(数据源和(Mapper))
-
配置事务管理器,启动注解事务
-
配置mapper扫描器
<!-- 配置启动注解扫描 -->
<context:component-scan base-package="ssm">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
<!-- 在容器启动时,加载properties配置 -->
<context:property-placeholder location="classpath:db.properties" ignore-resource-not-found="true" ignore-unresolvable="true"/>
<!-- 数据源,使用c390进行数据库连接,不需要再写到mybatis.xml里了
使用SPEL表达式 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${jdbc.driver}" />
<property name="jdbcUrl" value="${jdbc.url}" />
<property name="user" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
<property name="initialPoolSize" value="${connection_pools.initial_pool_size}" />
<property name="minPoolSize" value="${connection_pools.min_pool_size}" />
<property name="maxPoolSize" value="${connection_pools.max_pool_size}" />
<property name="maxIdleTime" value="${connection_pools.max_idle_time}" />
<property name="acquireIncrement" value="${connection_pools.acquire_increment}" />
<property name="checkoutTimeout" value="${connection_pools.checkout_timeout}" />
</bean>
<!-- 从Session工厂(Spring集成)中获取sqlSession,读取数据源 -->
<!-- 配置MyBatis的sqlSession -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!-- 在没有集成Spring时,mybatis读取数据配置信息是通过myBatis.xml文件
类别名、加载mapper.xml配置文件
只需要完成持久化,因此不需要这个配置文件了,其他的都用spring完成了
但是当我们需要配置别名或者配置拦截器插件时,需要在mybatis.xml配置
-->
<property name="configLocation" value="classpath:mybatis.xml"></property>
<property name="dataSource" ref="dataSource" />
</bean>
<!-- 事务管理器 -->
<!-- 在Spring中提供了声明式事务管理
1. 基于注解方式
2. 基于AOP事件通知方式
加入事务注解后,业务出离后,会自动将SQLSession连接关闭
-->
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<!-- 启动注解事务 -->
<tx:annotation-driven transaction-manager="transactionManager" />
<!-- 自动找到mapper并且进行注册 -->
<!-- 映射Mapper目录 -->
<!-- Mapper接口所在包名,Spring会自动查找其下的Mapper,因此不需要给Mapper加上注解 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="ssm.mapper" />
</bean>
数据源文件不写到jdbc文件里
c3k0数据源,与spring集成好了
SpringMVC配置文件
- 启动注解扫描,只扫描控制器的部分
- 配置文件上传组件,包括文件大小上限
- 配置视图解析器,包括前缀后缀
- 配置转换器,转换json数据
- 配置静态资源
<!-- 扫描控制器 -->
<context:component-scan base-package="ssm" use-default-filters="false">
<context:include-filter type="annotation"
expression="org.springframework.stereotype.Controller" />
</context:component-scan>
<!-- 文件上传组件 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="utf-8"></property>
<!-- 设置文件上传的大小的上限
这段配置是文件上传大小限制的总阈值
因为文件上传的位置可能有多个、管理者上传图片、音频
如果想分开限制,则需要程序代码中通过判断文件的大小限制-->
<property name="maxUploadSize" value="1500000000000"></property>
</bean>
<!-- 视图解析器,配置SpringMVC中视图页面的 -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 视图前缀
返回视图一定会到这个路径下找视图
必须通过控制器进行渲染视图,只要是返回视图,只需要写视图名称,不需要写后缀了-->
<property name="prefix" value="/WEB-INF/view/"></property>
<!-- 视图后缀 -->
<property name="suffix" value=".jsp"></property>
</bean>
<!-- mvc注解 -->
<mvc:annotation-driven>
<!-- 转换器
将返回的json数据进行编码
并且再SpringMVC中自动引入集成json工具组件包
@ResponseBody 自动将对象转成json
-->
<mvc:message-converters>
<bean class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/html;charset=UTF-8</value>
</list>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
<!-- 配置静态资源路径映射位置,本项目的静态资源放在了在resources里
允许访问该这个文件下的所有资源,注意这里是两个*-->
<mvc:resources location="/resources/" mapping="/resources/**"></mvc:resources>
</beans>
Web配置文件
web.xml文件是用来初始化配置信息:比如Welcome页面、servlet、servlet-mapping、filter、listener、启动加载级别等。
- 配置监听器
- 启动Spring容器
- 启动过滤器,配置过滤器处理路径
- 启动servlet,配置servlet处理路径
<display-name>ssmSpringWeb</display-name>
<!-- 启动Bean工厂,继承ServletContextListener -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 服务启动时做初始化操作
classpath默认为src根路径,-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-root.xml</param-value>
</context-param>
<!-- 启动时机:在Listener后启动过滤器 -->
<!-- 过滤器,设置字符编码的过滤器 -->
<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>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<!-- 任何一个请求都要经过字符编码过滤器 -->
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--
1. 加载子容器,即mvc
2. MVC请求映射
-->
<servlet>
<servlet-name>springmvc</servlet-name>
<!-- SpringMVC的核心Servlet,任何请求都要经过这个前端控制器 -->
<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>
<!-- 配置在容器启动时进行初始化,否则默认Servlet在第一次请求访问时初始化 -->
<!-- 将MVC组件加入到容器里 -->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<!--
任何请求都交给SpringMVC处理接收
还要配置静态Web资源库
-->
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
详细说明参考"web.xml配置文件"文档
总的来说
- Spring配置文件是负责组件的管理
- SpringMvc配置文件是负责Web相关的东西
- web.xml配置文件是负责加载前两个配置文件