SSM 框架是指 Spring、Spring MVC 和 MyBatis 这三大框架的组合,常用于开发 Java Web 应用。下面是一个详细的示例,展示如何使用 SSM 框架构建一个简单的应用。
1. 环境准备
确保你已经安装了以下工具:
- JDK(建议使用 Java 8 或更高版本)
- Maven(用于构建项目和管理依赖)
- 一个适合的 IDE(如 IntelliJ IDEA 或 Eclipse)
- 数据库(如 MySQL)
2. 创建 Maven 项目
使用 Maven 创建一个新的 Java Web 项目。可以在 IDE 中选择 Maven 项目类型,也可以通过命令行创建。
pom.xml
:
<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/POM/4.0.0">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>ssm-example</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<dependencies>
<!-- Spring Core -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.3.25</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.25</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.3.25</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.25</version>
</dependency>
<!-- MyBatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.6</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.10</version>
</dependency>
<!-- JDBC Driver -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
</dependency>
<!-- Servlet API -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
<!-- JUnit (for testing) -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
3. 配置 Spring
src/main/resources/applicationContext.xml
:
<beans xmlns="http://www.springframework.org/schema/beans"
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.xsd">
<!-- DataSource configuration -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.cj.jdbc.Driver"/>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/ssm_example?useSSL=false"/>
<property name="user" value="root"/>
<property name="password" value="password"/>
</bean>
<!-- SqlSessionFactory configuration -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="mapperLocations">
<list>
<value>classpath*:mapper/*.xml</value>
</list>
</property>
</bean>
<!-- MapperScannerConfigurer configuration -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.example.mapper"/>
</bean>
<!-- TransactionManager configuration -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<!-- Enable annotation-driven transaction management -->
<tx:annotation-driven transaction-manager="transactionManager"/>
</beans>
4. 配置 Spring MVC
src/main/webapp/WEB-INF/spring-mvc.xml
:
<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.xsd">
<!-- Enable annotation-driven controllers -->
<mvc:annotation-driven/>
<!-- Component scanning -->
<context:component-scan base-package="com.example.controller"/>
<!-- View resolver -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>
5. 创建 MyBatis Mapper
src/main/resources/mapper/UserMapper.xml
:
<mapper namespace="com.example.mapper.UserMapper">
<select id="findById" parameterType="int" resultType="com.example.model.User">
SELECT * FROM users WHERE id = #{id}
</select>
</mapper>
src/main/java/com/example/mapper/UserMapper.java
:
package com.example.mapper;
import com.example.model.User;
import org.apache.ibatis.annotations.Select;
public interface UserMapper {
User findById(int id);
}
6. 创建 Controller 和 Service
src/main/java/com/example/controller/UserController.java
:
package com.example.controller;
import com.example.model.User;
import com.example.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/user")
public ModelAndView getUser(@RequestParam("id") int id) {
User user = userService.findById(id);
return new ModelAndView("user", "user", user);
}
}
src/main/java/com/example/service/UserService.java
:
package com.example.service;
import com.example.model.User;
public interface UserService {
User findById(int id);
}
src/main/java/com/example/service/impl/UserServiceImpl.java
:
package com.example.service.impl;
import com.example.mapper.UserMapper;
import com.example.model.User;
import com.example.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public User findById(int id) {
return userMapper.findById(id);
}
}
7. 配置 Web.xml
src/main/webapp/WEB-INF/web.xml
:
<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">
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
8. 创建 JSP 文件
src/main/webapp/WEB-INF/views/user.jsp
:
<!DOCTYPE html>
<html>
<head>
<title>User</title>
</head>
<body>
<h1>User Information</h1>
<p>ID: ${user.id}</p>
<p>Name: ${user.name}</p>
</body>
</html>
9. 数据库表
假设你的数据库中有一个表 users
,其结构如下:
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL
);
10. 运行项目
- 确保你的数据库服务已启动,并且表结构已经创建。
- 将项目部署到 Tomcat 服务器或其他支持的 Servlet 容器中。
- 启动服务器,并访问
http://localhost:8080/ssm-example/user?id=1
(假设 ID 为 1 的用户存在)。
这个示例展示了如何使用 Spring、Spring MVC 和 MyBatis 结合在一起构建一个简单的 Web 应用。根据实际需求,你可以进一步扩展和修改配置。