本文介绍了SSM学习的相关内容,包括Spring、SpringMVC和MyBatis框架的简述及整合步骤。文中详细讲解了开发环境的搭建、HelloWorld实例的创建以及项目结构的详解。此外,文章还提供了常见问题的解决方案和进阶指南,帮助读者更好地掌握SSM框架的使用。
SSM框架简介
Spring框架简述
Spring是由Rod Johnson在2003年发起的一个开源框架。Spring框架的核心是Spring容器,它负责创建、配置和管理应用程序中的所有对象。Spring框架简化了Java企业应用开发,提供了事务管理、依赖注入(DI)、控制反转(IoC)等功能。Spring框架的模块化设计使开发者可以根据需要选择需要的模块进行开发。
SpringMVC框架简述
SpringMVC是Spring框架的一部分,它提供了一种基于Java的Web框架,用于构建Web应用。SpringMVC是基于MVC设计模式的,能够轻松地将请求映射到处理器,从而处理请求并返回响应。SpringMVC处理请求的流程如下:
- 用户发送请求到DispatcherServlet。
- DispatcherServlet将请求分发到相应的处理器(Controller)。
- Controller处理请求,调用业务逻辑层(Service)。
- Service层处理逻辑,调用数据访问层(DAO)。
- DAO层访问数据库,获取数据。
- Service层将数据返回给Controller。
- Controller将结果传递给视图解析器(View Resolver)。
- View Resolver解析视图,并将结果渲染给用户。
MyBatis框架简述
MyBatis是一个持久层框架,它提供了一种从XML或注解中加载映射文件,并执行SQL语句的方法。MyBatis将SQL语句映射到Java方法,从而简化了数据访问层的开发。MyBatis的核心是SqlSessionFactory接口,它负责创建SqlSession实例,SqlSession用来执行数据库操作。MyBatis的优点包括:
- 灵活的SQL映射:允许使用XML或注解来定义SQL语句。
- 动态SQL:支持动态生成SQL语句。
- 提供了丰富的API:可以执行增删改查等操作。
- 易于扩展:提供了插件机制,可以方便地进行扩展。
SSM框架整合介绍
SSM框架是指Spring、SpringMVC和MyBatis的整合。Spring管理整个应用的配置和依赖关系;SpringMVC负责处理Web层面的请求和响应;MyBatis负责持久化操作。通过整合,可以充分利用各个框架的优势,简化开发流程。整合的步骤如下:
- 配置Spring核心配置文件,配置Spring容器。
- 配置SpringMVC核心配置文件,配置DispatcherServlet。
- 配置MyBatis核心配置文件,定义数据库连接信息和SQL映射文件。
- 在Spring配置文件中引入MyBatis配置文件和SpringMVC配置文件。
- 在Spring配置文件中配置事务管理器和数据源。
开发环境搭建
开发工具选择
开发工具的选择决定了开发效率和开发体验。常见的开发工具包括IDEA、Eclipse和IntelliJ IDEA。IDEA和Eclipse都是开源的IDE,其中IDEA的功能更加强大,提供了代码自动补全、智能提示等功能。以下是IDEA的安装和配置步骤:
- 下载并安装IDEA:官网下载地址为https://www.jetbrains.com/idea/download/
- 配置IDEA:
- 设置项目编码为UTF-8
- 配置Maven支持
- 配置JDK版本
<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-SNAPSHOT</version>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
</project>
JDK环境安装
JDK(Java Development Kit)是Java开发工具包,包含了Java运行环境(JRE)和Java开发工具(JDK Tools)。以下是安装JDK的步骤:
- 下载并安装JDK:官网下载地址为https://www.oracle.com/java/technologies/javase-jdk11-downloads.html
- 设置环境变量:
- 在系统环境变量中设置JAVA_HOME
- 在PATH环境变量中添加%JAVA_HOME%\bin
Maven配置与使用
Maven是一个项目管理和构建工具,它利用一个项目的对象模型(POM)描述项目是如何构建的、用于构建它的依赖从哪里下载等。以下是Maven的安装和配置步骤:
- 下载并安装Maven:官网下载地址为https://maven.apache.org/download.cgi
- 设置Maven环境变量:
- 在系统环境变量中设置MAVEN_HOME
- 在PATH环境变量中添加%MAVEN_HOME%\bin
- 配置Maven仓库:打开%M2_HOME%\conf\settings.xml文件,配置本地仓库路径和镜像源。
SSM框架各模块依赖配置
在Maven项目中,需要添加对Spring、SpringMVC、MyBatis及其相关依赖的支持。以下是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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>ssm-demo</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<!-- Spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.3.10</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</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.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.10</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.3.10</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>5.3.10</version>
</dependency>
<!-- MyBatis -->
<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>
<!-- Spring Security -->
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>5.5.2</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>5.5.2</version>
</dependency>
</dependencies>
</project>
HelloWorld实例
创建Maven项目
使用Maven创建一个新的Web项目。以下是在IDEA中创建Maven项目的步骤:
- 打开IDEA,选择“File” -> “New” -> “Project”。
- 选择“Maven”,点击“Next”。
- 输入项目名称(例如:ssm-demo),选择项目位置,点击“Next”。
- 输入GroupId和ArtifactId,选择Java版本,点击“Finish”。
- 在项目根目录下的pom.xml文件中添加Spring、SpringMVC、MyBatis相关依赖。
配置Spring核心配置文件
Spring的核心配置文件用于定义Spring容器中的Bean。以下是一个简单的Spring配置文件示例:
<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">
<bean id="userService" class="com.example.service.UserServiceImpl"/>
<bean id="userDao" class="com.example.dao.UserDaoImpl"/>
</beans>
创建SpringMVC控制器与视图解析
创建一个SpringMVC控制器,处理HTTP请求并返回相应的视图。以下是一个简单的控制器示例:
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class UserController {
@RequestMapping("/hello")
public ModelAndView hello() {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("hello");
modelAndView.addObject("message", "Hello, World!");
return modelAndView;
}
}
配置MyBatis持久层与数据库连接
MyBatis的核心配置文件定义了数据库连接信息和SQL映射文件。以下是一个简单的MyBatis配置文件示例:
<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>
<mappers>
<mapper resource="com/example/mapper/UserMapper.xml"/>
</mappers>
</configuration>
运行实例测试
新建一个视图文件(例如:hello.jsp):
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Hello World</title>
</head>
<body>
<h1>${message}</h1>
</body>
</html>
启动Tomcat服务器,并在浏览器中访问http://localhost:8080/ssm-demo/hello
,可以看到输出“Hello, World!”。
SSM项目结构详解
项目文件目录结构
SSM项目的典型文件目录结构如下:
src
|-- main
| |-- java
| | |-- com.example.controller
| | |-- com.example.service
| | |-- com.example.dao
| | |-- com.example.mapper
| |-- resources
| | |-- applicationContext.xml
| | |-- springmvc-servlet.xml
| | |-- mybatis-config.xml
| | |-- mapper
| | | |-- UserMapper.xml
各层代码分离原则
SSM项目的代码通常按照MVC模式进行分离,分为三层:
- Controller层:处理HTTP请求,调用Service层。
- Service层:处理业务逻辑。
- DAO层:处理数据访问操作。
配置文件详解
applicationContext.xml
:Spring配置文件,定义Bean的创建和依赖注入。
<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">
<bean id="userService" class="com.example.service.UserServiceImpl"/>
<bean id="userDao" class="com.example.dao.UserDaoImpl"/>
</beans>
springmvc-servlet.xml
:SpringMVC配置文件,定义DispatcherServlet的相关配置。
<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">
<context:component-scan base-package="com.example"/>
<mvc:annotation-driven/>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>
mybatis-config.xml
:MyBatis配置文件,定义数据库连接信息和SQL映射文件。
<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>
<mappers>
<mapper resource="com/example/mapper/UserMapper.xml"/>
</mappers>
</configuration>
常见问题与解决方案
依赖加载失败处理
依赖加载失败通常是由于配置文件中的依赖项版本冲突或者依赖项下载失败导致的。解决方法如下:
- 检查pom.xml文件中的依赖项版本是否正确。
- 清除Maven本地仓库中的缓存文件,重新下载依赖项。
- 使用Maven命令
mvn clean install
重新下载和安装依赖项。
配置文件解析错误处理
配置文件解析错误通常是由于配置文件格式错误或配置项缺失导致的。解决方法如下:
- 检查配置文件中的标签和属性是否正确。
- 检查配置文件中的路径和文件名是否正确。
- 检查配置文件中的元素是否正确闭合。
数据库连接失败处理
数据库连接失败通常是由于数据库配置错误或数据库服务未启动导致的。解决方法如下:
- 检查数据库连接URL、用户名和密码是否正确。
- 确保数据库服务已经启动。
- 检查数据库驱动是否正确引入。
进阶指南
自动扫描与注解配置
在SpringMVC中,可以通过注解@Controller
和@RequestMapping
自动扫描控制器。以下是一个简单的自动扫描配置示例:
<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">
<context:component-scan base-package="com.example"/>
<mvc:annotation-driven/>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>
整合Spring Security进行安全控制
Spring Security是一个强大的安全框架,用于保护Web应用的安全。以下是一个简单的Spring Security配置示例:
- 添加Spring Security依赖:
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>5.5.2</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>5.5.2</version>
</dependency>
- 配置Spring Security核心配置文件(spring-security.xml):
<beans:beans xmlns="http://www.springframework.org/schema/security"
xmlns:beans="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
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security.xsd">
<http auto-config="true">
<intercept-url pattern="/admin*" access="hasRole('ROLE_ADMIN')"/>
<intercept-url pattern="/user*" access="hasRole('ROLE_USER')"/>
<form-login login-page="/login"/>
<logout logout-url="/logout"/>
</http>
<authentication-manager>
<authentication-provider>
<user-service>
<user name="admin" password="123456" authorities="ROLE_ADMIN"/>
<user name="user" password="123456" authorities="ROLE_USER"/>
</user-service>
</authentication-provider>
</authentication-manager>
</beans:beans>
整合单元测试框架
单元测试是确保代码质量的重要手段。Spring提供了单元测试的支持,可以使用JUnit和Mockito等工具进行测试。以下是一个简单的单元测试示例:
- 添加测试依赖:
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>3.11.2</version>
<scope>test</scope>
</dependency>
- 编写单元测试代码:
import org.junit.jupiter.api.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import static org.mockito.Mockito.when;
import static org.junit.Assert.assertEquals;
public class UserServiceTest {
@Mock
private UserDao userDao;
@InjectMocks
private UserService userService;
@Test
public void testGetUser() {
MockitoAnnotations.initMocks(this);
User mockUser = new User();
mockUser.setId(1);
mockUser.setName("test");
when(userDao.getUser(1)).thenReturn(mockUser);
assertEquals(mockUser.getName(), userService.getUser(1).getName());
}
}
共同学习,写下你的评论
评论加载中...
作者其他优质文章