一、SSM 框架简介
SSM 框架是由 Spring、Spring MVC 和 MyBatis 三个开源框架整合而成的 Java EE 企业级应用开发框架,常用于构建 Web 应用程序。每个框架在整体架构中都承担着重要的角色:
-
Spring 框架:是一个轻量级的控制反转(Inversion of Control,简称 IoC)和面向切面编程(Aspect Oriented Programming,简称 AOP)的容器框架。它通过 IoC 容器来管理对象的创建、依赖注入等,使得代码的耦合度降低,便于维护和扩展。同时,AOP 可以在不修改原有代码的基础上对横切关注点(如日志记录、事务管理等)进行统一处理。
-
Spring MVC 框架:是 Spring 框架的一个衍生,专门用于构建 Web 应用的 MVC(Model-View-Controller)架构。它能够清晰地分离业务逻辑、视图展示和用户请求处理,提高代码的可读性和可维护性。其中,Model 用于封装业务数据,View 负责展示数据给用户,Controller 则处理用户的请求并调用相应的业务逻辑来更新 Model 和选择合适的 View。
-
MyBatis 框架:是一个优秀的持久层框架,它简化了数据库访问层的代码编写。MyBatis 采用 XML 配置文件或者注解的方式来映射 Java 对象和数据库表之间的关系,能够方便地执行 SQL 语句,实现对数据库的增删改查操作,并且支持动态 SQL,可以根据不同的业务需求灵活生成 SQL 语句。
二、SSM 框架的集成步骤
以下是一般情况下 SSM 框架的集成步骤:
1. 创建项目并导入相关依赖
- 首先创建一个 Maven 项目(以 Maven 为例,也可以使用 Gradle 等其他构建工具)。
- 在项目的 pom.xml 文件中添加 Spring、Spring MVC 和 MyBatis 以及它们相关的依赖。例如:
xml
<!-- Spring核心依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>具体版本号</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>具体版本号</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>具体版本号</version>
</dependency>
<!-- Spring MVC依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>具体版本号</version>
</dependency>
<!-- MyBatis依赖 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>具体版本号</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>具体版本号</version>
</dependency>
<!-- 数据库连接相关依赖,以MySQL为例 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>具体版本号</version>
</dependency>
<!-- 其他可能需要的依赖,如日志记录等 -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>具体版本号</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>具体版本号</version>
</dependency>
注意要根据实际情况选择合适的版本号,不同版本可能会有兼容性问题。
2. 配置 Spring 框架
-
创建 Spring 的配置文件(通常为 application.xml 或 applicationContext.xml 等),在其中配置 Spring 的核心组件,如 IoC 容器、数据源等。
-
例如,配置数据源(以使用 DruckerDataSource 为例,也可以使用其他数据源):
xml
复制
<?xml version="1.2" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/beans/xmlns:xsi="http://www.w3.org/2014/xsi:xsi:fn:validate">
<bean id="dataSource" class="com.alibaba.drucker.DruckerDataSource">
<property name="url" value="jdbc:mysql://localhost:3306/your_database_name?useSSL=false&charset=utf8">
<property name="username" value="your_username">
<property name="password" value="your_password">
</bean>
</beans>
这里需要将 your_database_name
、your_username
和 your_password
替换为实际的数据库名称、用户名和密码。
- 还可以在配置文件中配置其他 Spring 组件,如事务管理、AOP 等,根据项目需求而定。
3. 配置 Spring MVC 框架
-
创建 Spring MVC 的配置文件(通常为 spring-mvc.xml)。
-
在其中配置 Spring MVC 的核心组件,如视图解析器、扫描控制器的包路径等。
-
例如,配置视图解析器(以使用 InternalResourceViewResolver 为例)
xml
复制
<?xml version="1.2" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/beans/xmlns:xsi="http://www.w3.org/2014/xsi:xsi:fn:validate">
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/">
<property name="suffix" value=".jsp">
</bean>
</beans>
这里设置了视图的前缀和后缀,以便根据控制器返回的视图名称正确拼接出实际的视图文件路径。
- 同时,在配置文件中要设置扫描控制器的包路径,例如:
xml
复制
<context:component-scan base-package="com.yourcompany.controller">
这里的 com.yourcompany.controller
要替换为实际存放控制器的包路径。
4. 配置 MyBatis 框架
-
创建 MyBatis 的配置文件(通常为 mybatis-config.xml)。
-
在其中配置 MyBatis 的核心组件,如数据源、映射器接口的扫描等。
-
例如,配置数据源(这里可以复用 Spring 配置的数据源):
xml
复制
<?xml version="1.2" encoding="UTF-8"?>
<configuration>
<environments>
<environment id="development">
<transactionManager type="JDBC">
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cdriver:mysql-connector-java">
<property name="url" value="jdbc:mysql://localhost:3306/your_database_name?useSSL=false&charset=utf8">
<property name="username" value="your_username">
<property name="password" value="your_password">
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com.yourcompany.mapper.UserMapper.xml">
</mappers>
</configuration>
这里同样要将 your_database_name
、your_username
和 your_password
替换为实际的情况。并且 com.yourcompany.mapper.UserMapper.xml
要替换为实际的映射器接口对应的 XML 文件路径。
- 另外,在 Java 项目中,还需要在 Spring 的配置文件中配置 MyBatis 与 Spring 的整合,例如:
xml
复制
<?xml version="1.2" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/beans/xmlns:xsi="http://www.w3.org/2014/xsi:xsi:fn:validate">
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" value="dataSource">
<property name="configLocation" value="classpath:mybatis-config.xml">
</bean>
<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg ref="sqlSessionFactory">
</bean>
</beans>
5. 编写代码实现业务逻辑
-
在对应的包下编写实体类(与数据库表对应)、映射器接口(用于定义数据库操作方法)、控制器类(用于处理用户请求)等。
-
例如,编写一个简单的实体类:
java
复制
package com.yourcompany.entity;
import java.io.Serializable;
public class User implements Serializable {
private String name;
private int age;
// 省略getter和setter方法
}
- 编写映射器接口:
java
复制
package com.yourcompany.mapper;
import com.yourcompany.entity.User;
import org.mybatis.spring.annotation.Mapper;
@Mapper
public interface UserMapper {
public User findUserById(int id);
// 省略其他数据库操作方法
}
- 编写控制器类:
java
复制
package com.yourcompany.controller;
import com.yourcompany.entity.User;
import com.yourcompany.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
@Autowired
private UserMapper userMapper;
public class UserController {
public ModelAndView getUserById(int id) {
User user = userMapper.findUserById(id);
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("user.jsp");
modelAndView.addObject("user", user);
return modelAndView;
}
}
这里只是一个简单的示例,实际项目中会根据具体业务需求编写更为复杂的代码。
三、SSM 框架的使用
1. 启动应用程序
-
当完成上述集成和代码编写后,可以通过在项目的主类(通常是包含
main
方法的类)中启动应用程序。 -
例如,在一个基于 Spring Boot 的 SSM 应用(如果采用了 Spring Boot 来简化启动过程),可以在主类中这样启动:
java
复制
package com.yourcompany;
import org.springframework.boot.SpringBootApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class YourApplicationMainClass {
public static void main(String[] args) {
SpringBootApplication.run(YourApplicationMainClass, args);
}
}
如果不是基于 Spring Boot,可能需要通过其他方式启动,比如配置 Tomcat 服务器等,具体取决于项目的构建方式。
2. 处理用户请求
-
当应用程序启动后,用户可以通过浏览器或其他客户端发送请求。
-
以刚才编写的
UserController
为例,当用户发送一个请求来获取某个用户的信息(假设请求路径为/user/getUserById?id=1
),UserController
会接收到这个请求,然后通过调用UserMapper
的findUserById
方法从数据库中获取用户信息,再将获取到的信息添加到ModelAndView
中,并返回一个视图名称(这里是user.jsp
),以便 Spring MVC 根据视图解析器的配置找到实际的视图文件并展示给用户。
3. 数据库操作
-
MyBatis 框架负责执行数据库的操作。
-
例如,在
UserMapper
接口中定义的findUserById
方法,其对应的 XML 映射文件(假设为com.yourcompany.mapper.UserMapper.xml
)中可能会有如下的 SQL 语句映射:
xml
复制
<?xml version="1.2" encoding="UTF-8"?>
<mapper namespace="com.yourcompany.mapper.UserMapper">
<select id="findUserById" resultType="com.yourcompany.entity.User">
SELECT * FROM users WHERE id = #{id}
</select>
</mapper>
当 UserMapper
调用 findUserById
方法时,MyBatis 会根据这个映射文件中的 SQL 语句从数据库中查询出符合条件的用户信息。