本文介绍了Spring、Spring MVC和MyBatis三个框架的组合,提供了一套完整的Java Web开发解决方案。文章详细讲解了SSM框架的优势和应用场景,并指导读者完成开发环境的搭建,包括工具安装、数据库配置与相关依赖的添加。
SSM框架简介 SSM框架的定义和组成SSM框架是指Spring + Spring MVC + MyBatis三个开源框架的组合,提供了一套完整的Java Web开发解决方案。其主要组成部分如下:
- Spring:是一个轻量级的企业级Java应用开发框架,旨在简化企业应用开发。
- Spring MVC:是Spring框架的一部分,用于构建Web应用,遵循MVC(Model-View-Controller)设计模式。
- MyBatis:是一个优秀的持久层框架,简化了数据库操作,提供了一种简单的方式来操作数据库,可以避免显式使用SQL语句和手工建造SQL语句。
SSM框架的优势包括:
- 松耦合性:各部分之间相对独立,模块化程度高。
- 易于维护:配置灵活,方便扩展和升级。
- 丰富的功能:支持AOP,事务管理,安全等企业级应用的重要特性。
- 强大的数据库操作:MyBatis提供了强大的SQL映射功能。
SSM框架的应用场景包括但不限于:
- 企业级应用开发:如电商平台、OA系统等。
- 数据驱动的业务逻辑处理:需要频繁操作数据库的应用。
- Web应用程序:需要处理大量的HTTP请求,响应速度要求高的应用。
开发工具主要选择IDEA或Eclipse。它们都提供了丰富的开发工具支持,例如代码编辑、调试、版本控制等。
安装步骤:
- 访问官网下载对应版本的IDEA或Eclipse。
- 安装到本地计算机上。
- 启动IDEA或Eclipse。
- 配置IDE(例如设置JDK路径、安装插件等)。
JDK(Java Development Kit)是Java开发环境的核心。
安装步骤:
- 访问JDK官网下载对应版本的JDK。
- 解压下载的JDK安装包。
- 设置环境变量:
- Windows:在系统环境变量中设置
JAVA_HOME
指向JDK安装目录,Path
包含%JAVA_HOME%\bin
。 - Linux:编辑
~/.bashrc
文件,添加JAVA_HOME
和PATH
环境变量。
- Windows:在系统环境变量中设置
Maven是一个强大的项目管理和构建工具,能够帮助开发者自动管理项目依赖。
安装步骤:
- 访问Maven官网下载对应版本的Maven。
- 解压下载的Maven安装包。
- 设置环境变量:
- Windows:在系统环境变量中设置
MAVEN_HOME
指向Maven安装目录,Path
包含%MAVEN_HOME%\bin
。 - Linux:编辑
~/.bashrc
文件,添加MAVEN_HOME
和PATH
环境变量。
- Windows:在系统环境变量中设置
配置Maven:
- 创建
settings.xml
文件,配置Maven使用的仓库。 - 设置Maven的本地仓库路径。
MySQL是一款开源的关系型数据库管理系统。
安装步骤:
- 访问MySQL官网下载对应版本的MySQL安装包。
- 解压下载的MySQL安装包。
- 安装MySQL数据库。
- 设置数据库用户名和密码。
- 启动MySQL服务。
在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-tutorial</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</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-webmvc</artifactId>
<version>5.3.10</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.26</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.4</version>
</dependency>
</dependencies>
</project>
Spring框架基础
Spring的核心概念简介
Spring的核心概念包括:
- IoC(控制反转):通过容器管理对象的生命周期和依赖关系,而不是由应用程序代码直接创建和管理对象。
- AOP(面向切面编程):将业务逻辑从横切关注点(如日志、事务管理)中分离出来,提高代码的可维护性和复用性。
- DI(依赖注入):通过容器注入对象的依赖关系,从而使代码更加解耦和灵活。
Spring配置文件通常以XML文件的形式存在,用于配置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="exampleBean" class="com.example.ExampleBean">
<property name="exampleProperty" value="exampleValue"></property>
</bean>
</beans>
在这个例子中,定义了一个id为exampleBean
的Bean,类型为com.example.ExampleBean
,并设置了实例属性exampleProperty
的值为exampleValue
。
Spring提供了多种注解,用于简化配置文件的编写。常用的注解包括:
- @Service:用于标记服务层(业务逻辑层)的组件。
- @Controller:用于标记控制层(MVC中的控制器)的组件。
- @Repository:用于标记数据访问层(如DAO层)的组件。
- @Autowired:用于自动装配依赖的Bean。
- @Component:通用注解,用于标记任何Spring管理的Bean。
- @Configuration:用于标记配置类,可包含多个Bean的定义。
以下是一个使用Spring注解的示例代码:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.context.annotation.Configuration;
@Service
public class ExampleService {
private final ExampleRepository exampleRepository;
@Autowired
public ExampleService(ExampleRepository exampleRepository) {
this.exampleRepository = exampleRepository;
}
}
@Configuration
public class AppConfig {
@Bean
public ExampleService exampleService() {
return new ExampleService(new ExampleRepository());
}
}
Spring MVC框架基础
Spring MVC的工作原理
Spring MVC遵循MVC设计模式,主要组件包括DispatcherServlet、HandlerMapping、HandlerAdapter、ViewResolver和Controller。
- 请求到达DispatcherServlet:它负责请求的分发。
- HandlerMapping解析请求:查找合适的Controller来处理请求。
- Controller执行业务逻辑并返回ModelAndView对象:该对象包含视图名称和数据。
- ViewResolver解析视图名称:找到具体的视图。
- 视图渲染数据:将Model中的数据渲染到视图中。
- 创建一个新的Maven项目。
- 添加Spring MVC相关依赖到pom.xml:
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.3.10</version> </dependency>
-
配置DispatcherServlet:在web.xml中配置DispatcherServlet。
<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-servlet.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>
-
创建Controller类:
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.stereotype.Controller; @Controller public class ExampleController { @RequestMapping(value = "/example", method = RequestMethod.GET) @ResponseBody public String exampleMethod() { return "Hello, World!"; } }
- 配置视图解析器:在spring-servlet.xml中配置视图解析器。
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/" /> <property name="suffix" value=".jsp" /> </bean>
视图解析器负责将逻辑视图名称解析为实际的视图对象。
-
配置InternalResourceViewResolver:
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/" /> <property name="suffix" value=".jsp" /> </bean>
- 创建视图文件:在
/WEB-INF/views/
目录下创建相应的JSP文件。<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <body> <h1>Hello, World!</h1> </body> </html>
MyBatis通过XML配置文件或注解将Java对象映射到数据库表的SQL语句,实现数据库操作。它通过SqlSession来执行SQL语句并获取结果。
-
配置文件:通过
<mapper>
标签定义SQL语句及其对应的Java对象。<mapper namespace="com.example.mapper.ExampleMapper"> <select id="selectExample" resultType="com.example.model.Example"> SELECT * FROM example WHERE id = #{id} </select> </mapper>
-
映射文件:通过
@Mapper
注解标记接口。import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Select; @Mapper public interface ExampleMapper { @Select("SELECT * FROM example WHERE id = #{id}") Example selectExample(int id); }
实体类对应数据库表的结构,通常包含表中的字段名作为属性,以及相应的getter和setter方法。
-
定义实体类:
public class Example { private int id; private String name; private String description; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } }
映射文件描述了SQL语句如何映射到Java对象的方法。
-
XML配置示例:
<mapper namespace="com.example.mapper.ExampleMapper"> <select id="selectExample" resultType="com.example.model.Example"> SELECT * FROM example WHERE id = #{id} </select> <insert id="insertExample" parameterType="com.example.model.Example"> INSERT INTO example (id, name, description) VALUES (#{id}, #{name}, #{description}) </insert> </mapper>
-
注解配置示例:
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Select; @Mapper public interface ExampleMapper { @Select("SELECT * FROM example WHERE id = #{id}") Example selectExample(int id); @Insert("INSERT INTO example (id, name, description) VALUES (#{id}, #{name}, #{description})") void insertExample(Example example); }
-
配置MyBatis的SqlSessionFactory:
<bean id="sqlSessionFactory" class="org.apache.ibatis.session.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="mapperLocations" value="classpath:mapper/*.xml" /> </bean>
-
配置数据源:
<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/exampledb" /> <property name="username" value="root" /> <property name="password" value="password" /> </bean>
- 配置Mapper扫描:
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.example.mapper" /> </bean>
- 配置Spring:在Spring配置文件中定义Bean和依赖关系。
- 配置Spring MVC:配置DispatcherServlet、HandlerMapping、ViewResolver等组件。
- 配置MyBatis:配置SqlSessionFactory、Mapper扫描等。
- 编写业务逻辑代码:将Spring、Spring MVC和MyBatis结合起来,实现业务逻辑。
-
配置DispatcherServlet:
<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-servlet.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>
-
Spring配置文件:
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/" /> <property name="suffix" value=".jsp" /> </bean> <bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping" /> <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor" />
-
配置SqlSessionFactory:
<bean id="sqlSessionFactory" class="org.apache.ibatis.session.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="mapperLocations" value="classpath:mapper/*.xml" /> </bean>
-
配置数据源:
<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/exampledb" /> <property name="username" value="root" /> <property name="password" value="password" /> </bean>
- 配置Mapper扫描:
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.example.mapper" /> </bean>
-
创建Mapper接口:
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Update; import org.apache.ibatis.annotations.Delete; @Mapper public interface ExampleMapper { @Select("SELECT * FROM example WHERE id = #{id}") Example selectExample(int id); @Insert("INSERT INTO example (id, name, description) VALUES (#{id}, #{name}, #{description})") void insertExample(Example example); @Update("UPDATE example SET name = #{name}, description = #{description} WHERE id = #{id}") void updateExample(Example example); @Delete("DELETE FROM example WHERE id = #{id}") void deleteExample(int id); }
-
创建Service层:
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class ExampleService { private final ExampleMapper exampleMapper; @Autowired public ExampleService(ExampleMapper exampleMapper) { this.exampleMapper = exampleMapper; } public Example selectExample(int id) { return exampleMapper.selectExample(id); } public void insertExample(Example example) { exampleMapper.insertExample(example); } public void updateExample(Example example) { exampleMapper.updateExample(example); } public void deleteExample(int id) { exampleMapper.deleteExample(id); } }
-
创建Controller层:
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; @Controller public class ExampleController { private final ExampleService exampleService; @Autowired public ExampleController(ExampleService exampleService) { this.exampleService = exampleService; } @GetMapping("/example/{id}") @ResponseBody public Example getExample(@PathVariable int id) { return exampleService.selectExample(id); } @PostMapping("/example") @ResponseBody public void insertExample(@RequestBody Example example) { exampleService.insertExample(example); } @PutMapping("/example") @ResponseBody public void updateExample(@RequestBody Example example) { exampleService.updateExample(example); } @DeleteMapping("/example/{id}") @ResponseBody public void deleteExample(@PathVariable int id) { exampleService.deleteExample(id); } }
通过上述步骤,可以完成SSM框架的整合,并实现简单的增删改查操作。
共同学习,写下你的评论
评论加载中...
作者其他优质文章