创建 Maven 项目

搭建项目目录结构

配置文件内容
pom.xml:声明依赖的 jar 包
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
 100
 101
 102
 103
 104
 105
 106
 107
 108
 109
 110
 111
 112
 113
 114
 115
 116
 117
 118
 119
 120
 121
 
 | <?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>com.zhx2020.ssm</groupId>
 <artifactId>ssm</artifactId>
 <version>1.0-SNAPSHOT</version>
 <packaging>war</packaging>
 
 <name>ssm Maven Webapp</name>
 <url>http://maven.apache.org</url>
 
 <properties>
 
 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
 
 <spring.version>4.3.5.RELEASE</spring.version>
 
 <mybatis.version>3.4.1</mybatis.version>
 </properties>
 
 <dependencies>
 
 <dependency>
 <groupId>javax</groupId>
 <artifactId>javaee-api</artifactId>
 <version>7.0</version>
 </dependency>
 
 <dependency>
 <groupId>junit</groupId>
 <artifactId>junit</artifactId>
 <version>4.12</version>
 </dependency>
 
 <dependency>
 <groupId>ch.qos.logback</groupId>
 <artifactId>logback-classic</artifactId>
 <version>1.2.2</version>
 </dependency>
 
 <dependency>
 <groupId>com.fasterxml.jackson.core</groupId>
 <artifactId>jackson-databind</artifactId>
 <version>2.8.7</version>
 </dependency>
 
 <dependency>
 <groupId>mysql</groupId>
 <artifactId>mysql-connector-java</artifactId>
 <version>5.1.41</version>
 <scope>runtime</scope>
 </dependency>
 
 <dependency>
 <groupId>com.mchange</groupId>
 <artifactId>c3p0</artifactId>
 <version>0.9.5.2</version>
 </dependency>
 
 <dependency>
 <groupId>org.mybatis</groupId>
 <artifactId>mybatis</artifactId>
 <version>${mybatis.version}</version>
 </dependency>
 
 <dependency>
 <groupId>org.mybatis</groupId>
 <artifactId>mybatis-spring</artifactId>
 <version>1.3.1</version>
 </dependency>
 
 <dependency>
 <groupId>org.springframework</groupId>
 <artifactId>spring-core</artifactId>
 <version>${spring.version}</version>
 </dependency>
 <dependency>
 <groupId>org.springframework</groupId>
 <artifactId>spring-beans</artifactId>
 <version>${spring.version}</version>
 </dependency>
 <dependency>
 <groupId>org.springframework</groupId>
 <artifactId>spring-context</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-tx</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-webmvc</artifactId>
 <version>${spring.version}</version>
 </dependency>
 <dependency>
 <groupId>org.springframework</groupId>
 <artifactId>spring-test</artifactId>
 <version>${spring.version}</version>
 </dependency>
 </dependencies>
 
 <build>
 <finalName>ssm</finalName>
 </build>
 </project>
 
 | 
web.xml:声明编码过滤器并配置 DispatcherServlet
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 
 | <?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_3_1.xsd"
 version="3.1">
 
 
 <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>
 </filter>
 <filter-mapping>
 <filter-name>encodingFilter</filter-name>
 <url-pattern>/*</url-pattern>
 </filter-mapping>
 
 
 <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-*.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>
 
 <url-pattern>/</url-pattern>
 </servlet-mapping>
 </web-app>
 
 | 
spring-mybatis.xml:完成 spring 和 mybatis 的配置
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 
 | <?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"
 xsi:schemaLocation="http://www.springframework.org/schema/beans
 http://www.springframework.org/schema/beans/spring-beans.xsd
 http://www.springframework.org/schema/context
 http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">
 
 
 <context:component-scan base-package="com.zhx2020.ssm.service.impl"/>
 
 
 <context:property-placeholder location="classpath:jdbc.properties"/>
 
 
 <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="maxPoolSize" value="${c3p0.maxPoolSize}"/>
 <property name="minPoolSize" value="${c3p0.minPoolSize}"/>
 <property name="autoCommitOnClose" value="${c3p0.autoCommitOnClose}"/>
 <property name="checkoutTimeout" value="${c3p0.checkoutTimeout}"/>
 <property name="acquireRetryAttempts" value="${c3p0.acquireRetryAttempts}"/>
 </bean>
 
 
 <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
 
 <property name="dataSource" ref="dataSource"/>
 
 <property name="typeAliasesPackage" value="com.zhx2020.ssm.entity"/>
 
 <property name="mapperLocations" value="classpath:mapper/*.xml"/>
 </bean>
 
 
 <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
 
 <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
 
 <property name="basePackage" value="com.zhx2020.ssm.dao"/>
 </bean>
 
 
 <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
 
 <property name="dataSource" ref="dataSource"/>
 </bean>
 
 
 <tx:annotation-driven transaction-manager="transactionManager"/>
 
 </beans>
 
 | 
spring-mvc.xml:完成 SpringMVC 的相关配置
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 
 | <?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.xsd
 http://www.springframework.org/schema/context
 http://www.springframework.org/schema/context/spring-context.xsd
 http://www.springframework.org/schema/mvc
 http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
 
 
 <context:component-scan base-package="com.zhx2020.ssm.controller"/>
 
 
 <mvc:annotation-driven/>
 
 
 <mvc:default-servlet-handler/>
 
 
 <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
 <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
 <property name="prefix" value="/WEB-INF/views/"/>
 <property name="suffix" value=".jsp"/>
 </bean>
 
 </beans>
 
 | 
jdbc.properties:配置 c3p0 数据库连接池
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 
 | jdbc.driver=com.mysql.jdbc.Driver
 jdbc.url=jdbc:mysql://106.15.45.114:3306/ssm?useUnicode=true&characterEncoding=utf8
 
 jdbc.username=root
 
 jdbc.password=123456
 
 c3p0.maxPoolSize=30
 
 c3p0.minPoolSize=10
 
 c3p0.autoCommitOnClose=false
 
 c3p0.checkoutTimeout=10000
 
 c3p0.acquireRetryAttempts=2
 
 | 
logback.xml:完成日志输出的相关配置
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 
 | <?xml version="1.0" encoding="UTF-8"?><configuration debug="true">
 <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
 <encoder>
 <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
 </encoder>
 </appender>
 <root level="debug">
 <appender-ref ref="STDOUT"/>
 </root>
 </configuration>
 
 | 
以上就完成了基本的相关配置:
- 添加进了 SSM 项目所需要的 jar 包
- 配置好了 spring/mybatis/spring MVC 的相关配置信息(自动扫描 com.zhx2020.ssm 包下的带有注解的类)
- 通过 xml 配置的方式配置好了日志和数据库
测试 SSM 框架
准备好用来测试的数据库
| 12
 3
 4
 5
 6
 7
 8
 
 | CREATE TABLE `user` (`id` int(10) NOT NULL AUTO_INCREMENT,
 `name` varchar(50) DEFAULT NULL,
 `pass` varchar(50) DEFAULT NULL,
 PRIMARY KEY (`id`)
 ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8
 
 INSERT INTO `user` VALUES (1, 'test', '123456');
 
 | 
在 com.zhx2020.ssm.entity 包下创建好对应的实体类 User
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 
 | public class User {private int id;
 private String name;
 private String pass;
 
 public User() {
 }
 
 public User(int id, String name, String pass) {
 this.id = id;
 this.name = name;
 this.pass = pass;
 }
 
 public int getId() {
 return id;
 }
 
 public void setId(int id) {
 this.id = id;
 }
 
 public String getName() {
 return name;
 }
 
 public void setName(String name) {
 this.name = name;
 }
 
 public String getPass() {
 return pass;
 }
 
 public void setPass(String pass) {
 this.pass = pass;
 }
 
 @Override
 public String toString() {
 return "User{" +
 "id=" + id +
 ", name='" + name + '\'' +
 ", pass='" + pass + '\'' +
 '}';
 }
 }
 
 | 
在 com.zhx2020.ssm.dao 包下创建好 Dao 接口
| 12
 3
 
 | public interface UserDao {User findUserById(int id);
 }
 
 | 
在 resources/mapper 下编写 UserDao.xml 映射文件
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 
 | <?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.zhx2020.ssm.dao.UserDao">
 
 <select id="findUserById" resultType="com.zhx2020.ssm.entity.User" parameterType="int">
 SELECT * FROM user WHERE id = #{id}
 </select>
 
 </mapper>
 
 | 
在 test/java 下创建一个 UserDaoTest 的测试类
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 
 | @RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration({"classpath:spring-mybatis.xml"})
 public class UserDaoTest {
 
 @Autowired
 private UserDao userDao;
 
 @Test
 public void testFindUserById() {
 int id = 1;
 User user = userDao.findUserById(id);
 System.out.println(user);
 }
 
 }
 
 | 
运行测试代码,能够获取到正确的信息
| 1
 | User{id=1, name='test', pass='123456'}
 | 
在 com.zhx2020.ssm.service 包下编写好对应的 UserService 接口
| 12
 3
 
 | public interface UserService {User findUserById(int id);
 }
 
 | 
对应的实现类 UserServiceImpl
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 
 | @Servicepublic class UserServiceImpl implements UserService {
 
 @Autowired
 private UserDao userDao;
 
 public User findUserById(int id) {
 return userDao.findUserById(id);
 }
 }
 
 | 
在 com.zhx2020.ssm.controller 下创建 UserController 控制类
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 
 | @Controllerpublic class UserController {
 
 @Autowired
 private UserService userService;
 
 @RequestMapping("/test")
 public String test(Model model) {
 User user = userService.findUserById(1);
 model.addAttribute("user", user);
 return "test";
 }
 }
 
 | 
最后在 WEB-INF/views 下创建 test.jsp 用于接收并显示数据
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 
 | <%@ page contentType="text/html;charset=UTF-8" language="java" %><html>
 <head>
 <title>Test</title>
 </head>
 <body>
 <h3>test page!</h3>
 <h4>show user info</h4>
 id=${user.id},name=${user.name},pass=${user.pass}
 </body>
 </html>
 
 | 
配置好 Tomcat 服务器,运行并在浏览器中输入:localhost:8080/test

即完成了 SSM 的整合!
参考