SSM资料介绍了Spring、Spring MVC和MyBatis三个框架的整合,阐述了每个框架的作用及其优势,适用于各种中大型Web应用。文章还详细讲解了环境搭建、Maven项目构建以及Spring与Spring MVC的基础知识,并通过实战案例展示了如何从零开始构建一个简单的SSM项目。
SSM框架是指Spring、Spring MVC和MyBatis三个框架的整合。Spring是一个轻量级的企业级Java开发框架,它提供了依赖注入(DI)、面向切面编程(AOP)等特性,为开发人员提供了统一的配置方式。Spring MVC是Spring框架的一个Web MVC实现,它提供了一种简单灵活的前端控制器设计,使得开发Web应用更加便捷。MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射,为Java应用提供了更强大的数据访问层解决方案。
SSM框架的优势主要体现在以下几点:
SSM框架适用于各种中大型Web应用,特别是在需要高效处理数据库操作的企业级应用中,SSM框架能够提供强大的支持。
配置开发环境前,需要确保以下要求:
JDK安装:
JAVA_HOME
,并将其添加到系统路径中。java -version
,确认JDK已正确安装。# 验证JDK是否安装成功 java -version
Spring与Spring MVC:
pom.xml
中配置相应的依赖即可。mybatis-config.xml
,并编写SQL映射文件。<!-- pom.xml中的依赖配置 --> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.3.10</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.3.10</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.6</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.23</version> </dependency> </dependencies>
Maven是一个强大的项目管理和构建工具,它通过一个项目对象模型(POM)来管理项目的构建、报告和文档。在SSM项目中,Maven的主要作用是简化依赖管理、自动下载依赖库、生成构建文档等,使得项目构建过程更加自动化。
创建Maven项目:
pom.xml
文件中配置项目的基本信息,如groupId
、artifactId
、version
等。<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.example</groupId> <artifactId>ssm-demo</artifactId> <version>1.0.0</version> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.3.10</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.3.10</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.6</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.23</version> </dependency> </dependencies> </project>
通过Maven管理依赖,只需在pom.xml
中添加相应的依赖即可。下面是一个完整的pom.xml
示例,其中包含了常用的SSM依赖。
<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.example</groupId> <artifactId>ssm-demo</artifactId> <version>1.0.0</version> <properties> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.3.10</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.3.10</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.6</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>5.3.10</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.23</version> </dependency> </dependencies> </project>
Spring容器是管理Bean生命周期的核心组件。它通过依赖注入(DI)机制,将对象的依赖关系进行解耦,使对象之间的耦合度降低。依赖注入可以通过构造器注入、setter方法注入或字段注入等方式实现。
下面是一个简单的Spring配置文件示例,展示了如何设置bean和依赖注入:
<!-- applicationContext.xml --> <bean id="userService" class="com.example.service.UserService"> <property name="userDao" ref="userDao" /> </bean> <bean id="userDao" class="com.example.dao.UserDao" />
Spring MVC的工作流程如下:
DispatcherServlet
。DispatcherServlet
根据请求信息,调用处理器映射器找到相应的处理器(Controller)。下面是一个简单的Spring MVC控制器示例:
package com.example.controller; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; @Controller public class UserController { @RequestMapping(value = "/user", method = RequestMethod.GET) public String getUser(@RequestParam(value = "id") int id, ModelMap model) { User user = userService.getUserById(id); model.addAttribute("user", user); return "user"; } }
控制器用于处理客户端请求,它可以接收请求参数,调用相应的服务方法,并将结果传递给视图。下面的示例展示了如何创建和使用控制器:
package com.example.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; @Controller public class UserController { private final UserService userService; public UserController(UserService userService) { this.userService = userService; } @RequestMapping("/user") public @ResponseBody User getUser(@RequestParam int id) { return userService.getUserById(id); } }
在Spring MVC中,视图(View)负责将模型数据渲染成HTTP响应返回给客户端。模型(Model)是控制器处理请求后生成的数据对象。下面是一个简单的视图配置示例:
<!-- spring-mvc-servlet.xml --> <bean name="/user" class="org.springframework.web.servlet.view.InternalResourceView"> <property name="url" value="/WEB-INF/jsp/user.jsp" /> </bean>
<!-- user.jsp --> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>User</title> </head> <body> <h1>User Information</h1> <p>Name: ${user.name}</p> </body> </html>
MyBatis是一个持久层框架,它通过XML配置文件或注解来映射SQL语句和Java对象。MyBatis的核心是SqlSessionFactory
,它负责创建SqlSession
,提供CRUD等数据库操作功能。
下面是一个MyBatis的简单配置示例:
<!-- mybatis-config.xml --> <configuration> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <dataSource type="POOLED"> <property name="driver" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/ssm"/> <property name="username" value="root"/> <property name="password" value="password"/> </dataSource> </environment> </environments> </configuration>
SQL映射文件用于定义SQL语句及其与Java对象的映射关系。下面是一个简单的SQL映射文件示例:
<!-- UserMapper.xml --> <mapper namespace="com.example.mapper.UserMapper"> <select id="getUserById" resultType="com.example.entity.User"> SELECT * FROM users WHERE id = #{id} </select> </mapper>
在MyBatis中,可以通过SqlSession
对象执行数据库操作。下面是一个简单的CRUD操作示例:
package com.example.mapper; import com.example.entity.User; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import java.io.InputStream; public class UserMapper { private SqlSessionFactory sqlSessionFactory; public UserMapper() { String resource = "mybatis-config.xml"; InputStream inputStream = UserMapper.class.getClassLoader().getResourceAsStream(resource); sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream); } public User getUserById(int id) { try (SqlSession session = sqlSessionFactory.openSession()) { UserMapper mapper = session.getMapper(UserMapper.class); return mapper.getUserById(id); } } }
MyBatis支持使用注解来简化SQL映射。下面是一个使用注解的示例:
package com.example.mapper; import org.apache.ibatis.annotations.*; import java.util.List; import java.util.Map; public interface UserMapper { @Select("SELECT * FROM users WHERE id = #{id}") User getUserById(@Param("id") int id); @Insert("INSERT INTO users(id, name) VALUES(#{id}, #{name})") @Options(useGeneratedKeys = true, keyProperty = "id") int insertUser(User user); @Update("UPDATE users SET name = #{name} WHERE id = #{id}") int updateUser(User user); @Delete("DELETE FROM users WHERE id = #{id}") int deleteUser(@Param("id") int id); }
假设我们要开发一个简单的用户管理系统,实现用户信息的增删改查功能。
applicationContext.xml
,配置数据源、事务管理器和MyBatis的SqlSessionFactory。<!-- applicationContext.xml --> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/ssm"/> <property name="username" value="root"/> <property name="password" value="password"/> </bean> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <property name="mapperLocations" value="classpath*:mapper/*.xml"/> </bean> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.example.mapper"/> </bean>
mybatis-config.xml
,配置数据源和类型别名。<!-- mybatis-config.xml --> <configuration> <typeAliases> <typeAlias type="com.example.entity.User" alias="User"/> </typeAliases> </configuration>
UserMapper.xml
,定义SQL语句。<!-- UserMapper.xml --> <mapper namespace="com.example.mapper.UserMapper"> <select id="getUserById" resultType="User"> SELECT * FROM users WHERE id = #{id} </select> </mapper>
spring-mvc-servlet.xml
,配置视图解析器和处理器映射器。<!-- spring-mvc-servlet.xml --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/"/> <property name="suffix" value=".jsp"/> </bean>
package com.example.controller; import com.example.entity.User; import com.example.mapper.UserMapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; @Controller public class UserController { @Autowired private UserMapper userMapper; @RequestMapping(value = "/user", method = RequestMethod.GET) public String getUser(@RequestParam(value = "id") int id, ModelMap model) { User user = userMapper.getUserById(id); model.addAttribute("user", user); return "user"; } }
user.jsp
,显示用户信息。<!-- user.jsp --> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>User</title> </head> <body> <h1>User Information</h1> <p>Name: ${user.name}</p> </body> </html>
mvn clean package
,生成war
文件。# 打包项目 mvn clean package
war
文件部署到Tomcat服务器。# 启动Tomcat服务器 $CATALINA_HOME/bin/startup.sh
http://localhost:8080/ssm-demo/user?id=1
访问用户信息页面。通过以上步骤,一个简单的SSM项目就完成了从环境搭建到项目部署的完整流程。