一.开门见山:SSM ,这里用Spring 整合 SpringMVC 和 Mybatis.
配置文件包括:
1.pom.xml maven项目进行依赖管理
2.web.xml 配置在tomcat服务器上
3.spring_mvc.xml SpringMVC配置
4.spring_app.xml SpringIoC配置
5.mybatis_conf.xml Mybatis配置
二.详解:
1.pom.xml 导入要用到的依赖,可以到mavenrepository.com搜索下载,要导入的jar包如下:
1)Spring相关jar包:spring context ,,spring core
2)SpringMVC相关jar包: spring web ,spring mvc
3)Mybatis相关jar包: mybatis 和 mybatis spring
4)数据库相关jar包: mysql connector , druid druid是阿里的数据库连接池,目前性能较好的连接池
5)其他非必要jar包…
以上jar包可以直接在阿里的镜像maven仓库直接搜索下载,直接搜索我列出的就行
参考下面pom.xml 依赖项
<dependencies>
<!-- spring相关jar包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.9.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.9.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>4.3.9.RELEASE</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>4.3.9.RELEASE</version>
</dependency>
<!-- 测试包 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!-- servlet api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<!-- jsp API -->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.1</version>
<scope>provided</scope>
</dependency>
<!-- mybatis 提供的与Spring整合的jar包 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.1</version>
</dependency>
<!-- mybatis 核心jar包 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.4</version>
</dependency>
<!--阿里数据源 -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.2</version>
</dependency>
<!-- jstl的包-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- 数据库连接 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.39</version>
</dependency>
</dependencies>
2)web.xml配置 这里主要配置三个东西: 核心控制器(也叫前端控制器) 过滤器,监听器
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="4.0" 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">
<!-- 配置核心控制器 初始化参数指定springmvc配置文件的位置和名称
这里可以是类路径下的也可以是其他相对路径.如果和web.xml在同一路径下可以不用指明,但是xml文件名要和以xxx-servlet.xml命名,xxx:表示servlet-name 例如:这里是springMAV 配置文件应该 命名dispatcherServlet-servlet.xml -->
<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>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- 加载上下文的监听器,启动IoC容器的监听器 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 全局参数指定Spring配置文件的位置 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring_app*.xml</param-value>
</context-param>
<!-- 配置过滤器 -->
<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>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
3)spring_mvc.xml
<beans>
<!-- 配置扫描控制器所在的包 -->
<context:component-scan base-package="com.zyl.controller" />
<context:annotation-config />
<!-- 注解的方式驱动spring mvc,,配置处理器映射器和控制器适配器 -->
<mvc:annotation-driven />
<!-- 配置静态资源任交个应用服务器原生处理 -->
<mvc:default-servlet-handler/>
<!-- 配置视图解析器 -->
<!-- jsp原生视图解析器 -->
<bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property>
<property name="order" value="10"></property>
</bean>
<bean class="org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver" />
</beans>
**视图解析器:现在一般用的Thymeleaf的视图解析器,配法再说吧,视图解析器是可以配置多个的,设置order属性设置优先级
静态资源,一般有专用的静态资源服务器处理,tomact处理较慢,有兴趣可以去了解**
4)spring_app.xml ,这里要整合mybatis的配置()
mybatis的sessionFactory是SQLSessionFactory和hibernate有区别,
事物的话如果要和hibernate一起用只用配置hibernate下的声明式事物就行,在需要用到事物的地方打上@Transactional的注解就行,一般事物写在服务层类上
<beans>
<!-- 配置Spring注解扫描的包 -->
<context:component-scan base-package="com.zyl" />
<context:annotation-config />
<!-- 配置数据源 dataSource -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="url" value="jdbc:mysql://localhost:3306/OLSystem?useUnicode=true&characterEncoding=utf8"/>
<property name="username" value="root" />
<property name="password" value="root" />
</bean>
<!-- 配置SqlSessionFactory 指定mybatis配置文件的位置 注入dataSource-->
<bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="configLocation" value="classpath:mybatis_conf.xml" />
<property name="dataSource" ref="dataSource" />
</bean>
<!-- 配置mappers所在的包 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.zyl.mappers"/>
</bean>
<!-- 配置事物 ,声明式事物 -->
<bean id="dsTransactionManger" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
</beans>
5)mybatis_conf.xml
mybatis的配置相对要简单很多了,把数据库连接配置和事物配置写到了spring配置文件中,这个文件只需声明类的实体别名和实体类接口的映射文件的位置就行,
映射文件和接口可以通过声明包配置的方法配置:
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.zyl.mappers" />
</bean>
如果映射器 Mapper 接口在不同的包(package)中,你可以为 basePackage 属性指定一个以逗号分隔的包名列表。这里映射器接口和映射文件名要一样
还可以通过一一映射的方式声明 如下
<configuration>
<typeAliases>
<!-- 实体类别名 -->
<typeAlias type="com.zyl.domain.CourseType" alias="CourseTpye" />
<typeAlias type="com.zyl.domain.SonType" alias="SonType" />
<typeAlias type="com.zyl.domain.Course" alias="Course" />
<typeAlias type="com.zyl.domain.Teacher" alias="Teacher" />
<typeAlias type="com.zyl.domain.Section" alias="Section" />
<typeAlias type="com.zyl.domain.SonSection" alias="SonSection" />
<typeAlias type="com.zyl.dto.CourseDTO" alias="CourseDTO" />
</typeAliases>
<mappers>
<!-- 映射文件路径 -->
<mapper resource="com/zyl/mappers/CourseTypeMapper.xml"/>
<mapper resource="com/zyl/mappers/SonTypeMapper.xml"/>
<mapper resource="com/zyl/mappers/CourseMapper.xml"/>
<mapper resource="com/zyl/mappers/TeacherMapper.xml"/>
</mappers>
</configuration>
三.以上文件中spring_app.xml, spring_mvc,mybatis_conf.xml我比较喜欢放在类路径下的resources目录下,放在WEB-INF下保护起来更好.
对于注解的应用,
服务层类一般打上@Service @Transactional ,方法上@RequestMapping//或者@GetMapping之类的
控制层类@Controller
一般来说我习惯服务层和DAO层用xml配置,View层用注解