项目结构
pom.xml 配置
<?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.davarich</ groupId>
< artifactId> webssm</ artifactId>
< version> 1.0.0</ version>
< packaging> war</ packaging>
< properties>
< project.build.sourceEncoding> UTF-8</ project.build.sourceEncoding>
< maven.compiler.source> 17</ maven.compiler.source>
< maven.compiler.target> 17</ maven.compiler.target>
< spring.version> 6.0.0</ spring.version>
</ properties>
< dependencies>
< dependency>
< groupId> org.springframework</ groupId>
< artifactId> spring-webmvc</ artifactId>
< version> ${spring.version}</ version>
</ dependency>
< dependency>
< groupId> org.springframework</ groupId>
< artifactId> spring-jdbc</ artifactId>
< version> ${spring.version}</ version>
</ dependency>
< dependency>
< groupId> org.mybatis</ groupId>
< artifactId> mybatis</ artifactId>
< version> 3.5.10</ version>
</ dependency>
< dependency>
< groupId> org.mybatis</ groupId>
< artifactId> mybatis-spring</ artifactId>
< version> 3.0.1</ version>
</ dependency>
< dependency>
< groupId> mysql</ groupId>
< artifactId> mysql-connector-java</ artifactId>
< version> 8.0.30</ version>
</ dependency>
< dependency>
< groupId> com.zaxxer</ groupId>
< artifactId> HikariCP</ artifactId>
< version> 5.0.1</ version>
</ dependency>
< dependency>
< groupId> jakarta.servlet</ groupId>
< artifactId> jakarta.servlet-api</ artifactId>
< version> 5.0.0</ version>
< scope> provided</ scope>
</ dependency>
< dependency>
< groupId> jakarta.servlet.jsp</ groupId>
< artifactId> jakarta.servlet.jsp-api</ artifactId>
< version> 3.1.0</ version>
< scope> provided</ scope>
</ dependency>
< dependency>
< groupId> org.glassfish.web</ groupId>
< artifactId> jakarta.servlet.jsp.jstl</ artifactId>
< version> 2.0.0</ version>
</ dependency>
< dependency>
< groupId> com.fasterxml.jackson.core</ groupId>
< artifactId> jackson-databind</ artifactId>
< version> 2.15.3</ version>
</ dependency>
</ dependencies>
< build>
< finalName> ssm-demo</ finalName>
< plugins>
< plugin>
< groupId> org.apache.maven.plugins</ groupId>
< artifactId> maven-compiler-plugin</ artifactId>
< version> 3.11.0</ version>
< configuration>
< source> 17</ source>
< target> 17</ target>
</ configuration>
</ plugin>
</ plugins>
</ build>
</ project>
web.xml 配置
<?xml version="1.0" encoding="UTF-8"?>
< web-app xmlns = " https://jakarta.ee/xml/ns/jakartaee"
xmlns: xsi= " http://www.w3.org/2001/XMLSchema-instance"
xsi: schemaLocation= " https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"
version = " 5.0" >
< context-param>
< param-name> contextConfigLocation</ param-name>
< param-value> classpath: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> classpath:springmvc.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>
< 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>
</ web-app>
db.properties 配置
db.driver=com.mysql.cj.jdbc.Driver
db.url=jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=UTC
db.username=root
db.password=123456
mybatis-config.xml 配置
<?xml version="1.0" encoding="UTF-8"?>
<! DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd" >
< configuration>
< settings>
< setting name = " mapUnderscoreToCamelCase" value = " true" />
</ settings>
< typeAliases>
< package name = " com.davarich.entity" />
</ typeAliases>
</ configuration>
UserMapper.xml 配置
<?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.davarich.mapper.UserMapper" >
< select id = " selectUsers" resultType = " User" >
SELECT * FROM user
</ select>
</ mapper>
applicationContext.xml 配置
<?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
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/tx
https://www.springframework.org/schema/tx/spring-tx.xsd" >
< context: property-placeholder location = " classpath:db.properties" />
< context: component-scan base-package = " com.davarich.service,mapper" />
< bean id = " dataSource" class = " com.zaxxer.hikari.HikariDataSource" >
< property name = " driverClassName" value = " ${db.driver}" />
< property name = " jdbcUrl" value = " ${db.url}" />
< property name = " username" value = " ${db.username}" />
< property name = " password" value = " ${db.password}" />
</ bean>
< bean id = " sqlSessionFactory" class = " org.mybatis.spring.SqlSessionFactoryBean" >
< property name = " dataSource" ref = " dataSource" />
< property name = " configLocation" value = " classpath:mybatis-config.xml" />
< property name = " mapperLocations" value = " classpath:mapper/*.xml" />
</ bean>
< bean class = " org.mybatis.spring.mapper.MapperScannerConfigurer" >
< property name = " basePackage" value = " com.davarich.mapper" />
< property name = " sqlSessionFactoryBeanName" value = " sqlSessionFactory" />
</ bean>
< bean id = " transactionManager" class = " org.springframework.jdbc.datasource.DataSourceTransactionManager" >
< property name = " dataSource" ref = " dataSource" />
</ bean>
< tx: annotation-driven transaction-manager = " transactionManager" />
</ beans>
springmvc.xml 配置
<?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
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
https://www.springframework.org/schema/mvc/spring-mvc.xsd" >
< context: component-scan base-package = " com.davarich.controller" />
< bean class = " org.springframework.web.servlet.view.InternalResourceViewResolver" >
< property name = " prefix" value = " /WEB-INF/views/" />
< property name = " suffix" value = " .jsp" />
</ bean>
< mvc: resources mapping = " /static/**" location = " classpath:/static/" />
< mvc: annotation-driven/>
</ beans>
实体类 entity (Users.java)
package com. davarich. entity ;
public class User {
private Integer id;
private String name;
private String email;
public User ( ) {
}
public User ( Integer id, String name, String email) {
this . id = id;
this . name = name;
this . email = email;
}
public Integer getId ( ) {
return id;
}
public void setId ( Integer id) {
this . id = id;
}
public String getName ( ) {
return name;
}
public void setName ( String name) {
this . name = name;
}
public String getEmail ( ) {
return email;
}
public void setEmail ( String email) {
this . email = email;
}
@Override
public String toString ( ) {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
", email='" + email + '\'' +
'}' ;
}
}
持久层 mapper (UserMapper.java)
package com. davarich. mapper ;
import com. davarich. entity. User ;
import org. apache. ibatis. annotations. Mapper ;
import java. util. List ;
@Mapper
public interface UserMapper {
List < User > selectUsers ( ) ;
}
业务层 service
接口类 UserService.java
package com. davarich. service ;
import com. davarich. entity. User ;
import java. util. List ;
public interface UserService {
List < User > getAllUsers ( ) ;
}
实现类 UserServiceImpl.java
package com. davarich. service ;
import com. davarich. entity. User ;
import com. davarich. mapper. UserMapper ;
import org. springframework. beans. factory. annotation. Autowired ;
import org. springframework. stereotype. Service ;
import java. util. List ;
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public List < User > getAllUsers ( ) {
return userMapper. selectUsers ( ) ;
}
}
控制层 controller (UserController.java)
package com. davarich. controller ;
import com. davarich. entity. User ;
import com. davarich. service. UserService ;
import com. oracle. wls. shaded. org. apache. bcel. generic. RETURN;
import org. springframework. beans. factory. annotation. Autowired ;
import org. springframework. stereotype. Controller ;
import org. springframework. ui. Model ;
import org. springframework. web. bind. annotation. GetMapping ;
import java. util. List ;
@Controller
public class UserController {
@Autowired
private UserService userService;
@GetMapping ( "/users" )
public String listUsers ( Model model) {
List < User > users = userService. getAllUsers ( ) ;
model. addAttribute ( "users" , users) ;
return "user/list" ;
}
@GetMapping ( "/welcome" )
public String welCome ( ) {
return "user/welcome" ;
}
}
前端页面(JSP)
welcome.jsp
<%--
Created by IntelliJ IDEA.
User: WT
Date: 2025/3/25
Time: 下午6:10
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>这是一个SSM项目Demo</h1>
<a href="/webssm/users">用户列表</a>
</body>
</html>
list.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head>
<title>用户列表</title>
</head>
<body>
<h1>用户列表</h1>
<table>
<tr>
<th>ID</th>
<th>姓名</th>
<th>邮箱</th>
</tr>
<c:forEach items="${users}" var="user">
<tr>
<td>${user.id}</td>
<td>${user.name}</td>
<td>${user.email}</td>
</tr>
</c:forEach>
</table>
</body>
</html>
参考内容:
SSM工作流程与原理详解_51CTO博客_ssm工作原理
介绍SSM框架 - 看热闹的蓝胖子 - 博客园