共计 13314 个字符,预计需要花费 34 分钟才能阅读完成。
分析
spring:
spring.xml:事务管理,包扫描
web.xml: 加载 spring 容器
StudentService.java @Service@Tansation
springmvc:
web.xml: 前端控制器
spring-mvc.xml: 视图解析器,拦截器,过滤器,全局的异常处理,静态资源处理
StudentController.xml:@Controller,@ReuqestMapping,@ResponseBody
mybatis:
spring-mybatis.xml: 连接池,SqlSessionFactory
StudenMapper.xml
StudentMapper.java 接口
其他配置文件:
db.properties
log4j.properties
echcache.xml
项目结构
通过 pom.xml 加载 SSM 整合包
<?xml version="1.0" encoding="UTF-8"?> | |
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | |
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | |
<modelVersion>4.0.0</modelVersion> | |
<groupId>SSM</groupId> | |
<artifactId>SSM</artifactId> | |
<version>1.0-SNAPSHOT</version> | |
<packaging>war</packaging> | |
<properties> | |
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> | |
<maven.compiler.source>1.7</maven.compiler.source> | |
<maven.compiler.target>1.7</maven.compiler.target> | |
<!-- spring 版本号 --> | |
<spring.version>5.0.6.RELEASE</spring.version> | |
<!-- mybatis 版本号 --> | |
<mybatis.version>3.4.2</mybatis.version> | |
<!-- log4j 日志文件管理包版本 --> | |
<slf4j.version>1.7.7</slf4j.version> | |
<!--<log4j.version>2.5</log4j.version>--> | |
<log4j.version>1.2.17</log4j.version> | |
</properties> | |
<dependencies> | |
<dependency> | |
<groupId>junit</groupId> | |
<artifactId>junit</artifactId> | |
<version>4.11</version> | |
<scope>test</scope> | |
</dependency> | |
<!-- spring 核心包 --> | |
<dependency> | |
<groupId>org.springframework</groupId> | |
<artifactId>spring-core</artifactId> | |
<version>${spring.version}</version> | |
</dependency> | |
<dependency> | |
<groupId>org.springframework</groupId> | |
<artifactId>spring-web</artifactId> | |
<version>${spring.version}</version> | |
</dependency> | |
<dependency> | |
<groupId>org.springframework</groupId> | |
<artifactId>spring-oxm</artifactId> | |
<version>${spring.version}</version> | |
</dependency> | |
<dependency> | |
<groupId>org.springframework</groupId> | |
<artifactId>spring-tx</artifactId> | |
<version>${spring.version}</version> | |
</dependency> | |
<dependency> | |
<groupId>org.springframework</groupId> | |
<artifactId>spring-jdbc</artifactId> | |
<version>${spring.version}</version> | |
</dependency> | |
<dependency> | |
<groupId>org.springframework</groupId> | |
<artifactId>spring-webmvc</artifactId> | |
<version>${spring.version}</version> | |
</dependency> | |
<dependency> | |
<groupId>org.springframework</groupId> | |
<artifactId>spring-aop</artifactId> | |
<version>${spring.version}</version> | |
</dependency> | |
<dependency> | |
<groupId>org.springframework</groupId> | |
<artifactId>spring-context-support</artifactId> | |
<version>${spring.version}</version> | |
</dependency> | |
<dependency> | |
<groupId>org.springframework</groupId> | |
<artifactId>spring-test</artifactId> | |
<version>${spring.version}</version> | |
</dependency> | |
<!-- mybatis 核心包 --> | |
<dependency> | |
<groupId>org.mybatis</groupId> | |
<artifactId>mybatis</artifactId> | |
<version>${mybatis.version}</version> | |
</dependency> | |
<!-- mybatis/spring 包 --> | |
<dependency> | |
<groupId>org.mybatis</groupId> | |
<artifactId>mybatis-spring</artifactId> | |
<version>2.0.0</version> | |
</dependency> | |
<!-- 导入 java ee jar 包 --> | |
<dependency> | |
<groupId>javax</groupId> | |
<artifactId>javaee-api</artifactId> | |
<version>7.0</version> | |
</dependency> | |
<!-- 导入 Mysql 数据库链接 jar 包 --> | |
<dependency> | |
<groupId>mysql</groupId> | |
<artifactId>mysql-connector-java</artifactId> | |
<version>5.0.8</version> | |
</dependency> | |
<!-- 导入 dbcp 的 jar 包,用来在 applicationContext.xml 中配置数据库 --> | |
<dependency> | |
<groupId>commons-dbcp</groupId> | |
<artifactId>commons-dbcp</artifactId> | |
<version>1.2.2</version> | |
</dependency> | |
<!-- JSTL 标签类 --> | |
<dependency> | |
<groupId>jstl</groupId> | |
<artifactId>jstl</artifactId> | |
<version>1.2</version> | |
</dependency> | |
<!-- 日志文件管理包 --> | |
<!-- log start --> | |
<!--<dependency>--> | |
<!--<groupId>org.apache.logging.log4j</groupId>--> | |
<!--<artifactId>log4j-core</artifactId>--> | |
<!--<version>2.5</version>--> | |
<!--</dependency>--> | |
<!--<dependency>--> | |
<!--<groupId>org.apache.logging.log4j</groupId>--> | |
<!--<artifactId>log4j-api</artifactId>--> | |
<!--<version>2.5</version>--> | |
<!--</dependency>--> | |
<!-- 格式化对象,方便输出日志 --> | |
<dependency> | |
<groupId>com.alibaba</groupId> | |
<artifactId>fastjson</artifactId> | |
<version>1.1.41</version> | |
</dependency> | |
<dependency> | |
<groupId>org.slf4j</groupId> | |
<artifactId>slf4j-api</artifactId> | |
<version>${slf4j.version}</version> | |
</dependency> | |
<dependency> | |
<groupId>org.slf4j</groupId> | |
<artifactId>slf4j-log4j12</artifactId> | |
<version>${slf4j.version}</version> | |
</dependency> | |
<!-- log end --> | |
<!-- 映入 JSON --> | |
<dependency> | |
<groupId>org.codehaus.jackson</groupId> | |
<artifactId>jackson-mapper-asl</artifactId> | |
<version>1.9.13</version> | |
</dependency> | |
<!-- 上传组件包 --> | |
<dependency> | |
<groupId>commons-fileupload</groupId> | |
<artifactId>commons-fileupload</artifactId> | |
<version>1.3.1</version> | |
</dependency> | |
<dependency> | |
<groupId>commons-io</groupId> | |
<artifactId>commons-io</artifactId> | |
<version>2.4</version> | |
</dependency> | |
<dependency> | |
<groupId>commons-codec</groupId> | |
<artifactId>commons-codec</artifactId> | |
<version>1.9</version> | |
</dependency> | |
<!--druid 连接池 --> | |
<!--https://mvnrepository.com/artifact/com.alibaba/druid--> | |
<dependency> | |
<groupId>com.alibaba</groupId> | |
<artifactId>druid</artifactId> | |
<version>1.1.10</version> | |
</dependency> | |
<!-- https://mvnrepository.com/artifact/log4j/log4j --> | |
<dependency> | |
<groupId>log4j</groupId> | |
<artifactId>log4j</artifactId> | |
<version>1.2.17</version> | |
</dependency> | |
</dependencies> | |
<build> | |
<finalName>SSM</finalName> | |
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) --> | |
<plugins> | |
<plugin> | |
<artifactId>maven-clean-plugin</artifactId> | |
<version>3.1.0</version> | |
</plugin> | |
<!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging --> | |
<plugin> | |
<artifactId>maven-resources-plugin</artifactId> | |
<version>3.0.2</version> | |
</plugin> | |
<plugin> | |
<artifactId>maven-compiler-plugin</artifactId> | |
<version>3.8.0</version> | |
</plugin> | |
<plugin> | |
<artifactId>maven-surefire-plugin</artifactId> | |
<version>2.22.1</version> | |
</plugin> | |
<plugin> | |
<artifactId>maven-war-plugin</artifactId> | |
<version>3.2.2</version> | |
</plugin> | |
<plugin> | |
<artifactId>maven-install-plugin</artifactId> | |
<version>2.5.2</version> | |
</plugin> | |
<plugin> | |
<artifactId>maven-deploy-plugin</artifactId> | |
<version>2.8.2</version> | |
</plugin> | |
</plugins> | |
</pluginManagement> | |
</build> | |
</project> |
jdbc.properties 配置信息
driver=com.mysql.jdbc.Driver | |
url=jdbc:mysql://localhost:3306/xmsc | |
username=root | |
password=qqtang |
log4j.properties 配置信息
# For JBoss: Avoid to setup Log4J outside $JBOSS_HOME/server/default/deploy/log4j.xml! | |
# For all other servers: Comment out the Log4J listener in web.xml to activate Log4J. | |
log4j.rootLogger=info, stdout, logfile | |
log4j.appender.stdout=org.apache.log4j.ConsoleAppender | |
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout | |
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n | |
log4j.appender.logfile=org.apache.log4j.RollingFileAppender | |
log4j.appender.logfile.File=c:\\log\\lol.txt | |
log4j.appender.logfile.MaxFileSize=1MB | |
# Keep three backup files. | |
log4j.appender.logfile.MaxBackupIndex=3 | |
# Pattern to output: date priority [category] - message | |
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout | |
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n |
spring-mvc.xml– spring 整合 springmvc
<?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 | |
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd | |
http://www.springframework.org/schema/context | |
http://www.springframework.org/schema/context/spring-context-3.1.xsd | |
http://www.springframework.org/schema/mvc | |
http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"> | |
<!-- 自动扫描该包,使 SpringMVC 认为包下用了 @controller 注解的类是控制器 --> | |
<context:component-scan base-package="com.it.*"/> | |
<!-- 注解扫描 --> | |
<mvc:annotation-driven/> | |
<mvc:default-servlet-handler/> | |
<!-- 视图资源控制器(前缀后缀)--> | |
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> | |
<property name="prefix" value="/WEB-INF/views/"/> | |
<property name="suffix" value=".jsp"/> | |
</bean> | |
<!-- 配置文件上传,如果没有使用文件上传可以不用配置 --> | |
<bean class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> | |
<!-- 默认编码 --> | |
<property name="defaultEncoding" value="utf-8" /> | |
<!-- 文件大小最大值 --> | |
<property name="maxUploadSize" value="10485760000" /> | |
<!-- 内存中的最大值 --> | |
<property name="maxInMemorySize" value="40960" /> | |
</bean> | |
</beans> |
spring-mybatis.xml–spring 整合 myabtis
<?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" | |
xsi:schemaLocation="http://www.springframework.org/schema/beans | |
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd | |
http://www.springframework.org/schema/context | |
http://www.springframework.org/schema/context/spring-context-3.1.xsd"> | |
<context:component-scan base-package="com.it"/> | |
<!-- 添加 bean 配置连接数据库的配置信息, 通过 jdbc.proerties 文件 来引用所配置的信息 --> | |
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> | |
<property name="location" value="classpath:jdbc.properties"/> | |
</bean> | |
<!--druid 连接池 --> | |
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"> | |
<!-- 基本属性 url、user、password --> | |
<property name="driverClassName" value="${driver}"/> | |
<property name="url" value="${url}" /> | |
<property name="username" value="${username}" /> | |
<property name="password" value="${password}" /> | |
<!-- 配置初始化大小、最小、最大 --> | |
<property name="initialSize" value="1" /> | |
<property name="minIdle" value="1" /> | |
<property name="maxActive" value="20" /> | |
<!-- 配置获取连接等待超时的时间 --> | |
<property name="maxWait" value="60000" /> | |
<!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 --> | |
<property name="timeBetweenEvictionRunsMillis" value="60000" /> | |
<!-- 配置一个连接在池中最小生存的时间,单位是毫秒 --> | |
<property name="minEvictableIdleTimeMillis" value="300000" /> | |
<property name="validationQuery" value="SELECT 'x'" /> | |
<property name="testWhileIdle" value="true" /> | |
<property name="testOnBorrow" value="false" /> | |
<property name="testOnReturn" value="false" /> | |
<!-- 打开 PSCache,并且指定每个连接上 PSCache 的大小 --> | |
<property name="poolPreparedStatements" value="true" /> | |
<property name="maxPoolPreparedStatementPerConnectionSize" value="20" /> | |
<!-- 配置监控统计拦截的 filters,去掉后监控界面 sql 无法统计 --> | |
<property name="filters" value="stat" /> | |
</bean> | |
<!-- spring 和 MyBatis 完美整合,不需要 mybatis 的配置映射文件 --> | |
<bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> | |
<property name="dataSource" ref="dataSource" /> | |
<!-- 自动扫描 mapping.xml 文件 --> | |
<property name="mapperLocations" value="classpath:mapper/*.xml"/> | |
</bean> | |
<!-- 或者 通过扫描的模式,扫描目录在 com.lanyuan.mapper 目录下的 mapper--> | |
<!--<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">--> | |
<!--<property name="basePackage" value="com.it.mapper"/>--> | |
<!--</bean>--> | |
<!-- DAO 接口所在包名,Spring 会自动查找其下的类 --> | |
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> | |
<property name="basePackage" value="com.it.dao" /> | |
</bean> | |
<!-- 事务管理 --> | |
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> | |
<property name="dataSource" ref="dataSource"/> | |
</bean> | |
</beans> |
web.xml— 前端控制器,spring 容器的加载
<?xml version="1.0" encoding="UTF-8"?> | |
<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_3_0.xsd" | |
version="3.0"> | |
<!-- Spring 和 mybatis 的配置文件 --> | |
<context-param> | |
<param-name>contextConfigLocation</param-name> | |
<param-value>classpath:spring-mybatis.xml</param-value> | |
</context-param> | |
<!-- 编码过滤器 --> | |
<filter> | |
<filter-name>encodingFilter</filter-name> | |
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> | |
<async-supported>true</async-supported> | |
<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> | |
<!--spring 监听器 --> | |
<listener> | |
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> | |
</listener> | |
<!-- Spring MVC servlet --> | |
<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:spring-mvc.xml</param-value> | |
</init-param> | |
<load-on-startup>1</load-on-startup> | |
<async-supported>true</async-supported> | |
</servlet> | |
<servlet-mapping> | |
<servlet-name>SpringMVC</servlet-name> | |
<!-- 此处可以可以配置成 *.do,对应 struts 的后缀习惯 --> | |
<url-pattern>/</url-pattern> | |
</servlet-mapping> | |
<welcome-file-list> | |
<welcome-file>index.jsp</welcome-file> | |
<welcome-file>index.html</welcome-file> | |
</welcome-file-list> | |
</web-app> |
User.java—pojo
UserDAO.java– 接口 – 使用 mapper 代理开发
public interface UserMapper {List<User> findAllUser(); | |
} |
UserService.java– 业务层,进行事务控制
@Service | |
public class UserService { | |
@Autowired | |
@Qualifier("userMapper") | |
private UserMapper userMapper; | |
@Transactional | |
public List<User> findAllUser(){return userMapper.findAllUser(); | |
} | |
} |
映射文件配置 UserMapper.xml—statement
<?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.it.dao.UserMapper"> | |
<select id="findAllUser" resultType="com.it.bean.User"> | |
select * from userinfo | |
</select> | |
<select id="findUser" resultType="com.it.bean.User" parameterType="string"> | |
select * from userinfo where user_id=#{id} | |
</select> | |
</mapper> |
UserController.java–sprinmvc 控制层类
@Controller | |
public class UserController {@Resource(name = "userService") | |
private UserService userService; | |
@RequestMapping("/findAllUser") | |
public String findAllUser(Model model){List<User> users=userService.findAllUser(); | |
model.addAttribute("users",users); | |
return "index"; | |
} |
访问方式
http://localhost:8080/SSM_war_exploded/findUser?user_id=1001
正文完