为了账号安全,请及时绑定邮箱和手机立即绑定

SSM学习入门教程:轻松掌握Spring、Spring MVC和MyBatis集成

标签:
SSM
概述

本文详细介绍了SSM框架的组成、优势及应用场景,帮助读者快速了解Spring、Spring MVC和MyBatis的集成。文章还提供了从开发环境搭建到SSM框架的实战案例,包括JDK安装与配置、IDE选择与配置以及相关库的下载与配置,助力读者顺利完成SSM学习。

SSM框架简介

什么是SSM框架

SSM框架是Spring、Spring MVC和MyBatis框架的集成。这三个框架分别解决了企业级应用开发中不同的问题。Spring框架主要负责依赖注入和管理应用程序的服务,Spring MVC框架负责提供基于Web的开发框架,而MyBatis框架则专注于数据持久化操作。

SSM框架的优势

  1. 轻量级:SSM框架都是轻量级框架,不需要额外配置复杂的中间件。
  2. 灵活性:SSM框架提供了高度灵活的配置,可以很容易地与其他框架和库相结合。
  3. 可测试性:依赖注入使得单元测试更加容易,可以创建隔离测试来验证组件的行为。
  4. 解耦:通过依赖注入,可以将业务逻辑和数据访问逻辑解耦,提高代码复用性和可维护性。
  5. 社区支持:这三个框架都有活跃的社区支持和广泛的文档,解决了学习和使用中的许多问题。

SSM框架的应用场景

SSM框架适用于构建企业级Web应用程序。它特别适合于需要高度模块化和可维护性的项目。常见的应用场景包括:

  • 电子商务网站:购物车系统、订单处理、库存管理等。
  • 企业资源计划(ERP)系统:财务管理、人力资源管理、供应链管理等。
  • 内容管理系统:博客、新闻网站、论坛等。
  • 社交网络:微博、朋友圈等互动平台。
  • 学习管理系统:在线课程、学生考试、成绩管理等。
开发环境搭建

JDK安装与配置

  1. 下载并安装JDK:首先从Oracle官方网站下载适合的JDK版本,例如JDK 8或JDK 11。
  2. 配置环境变量
    • Windows
      • 打开命令提示符,输入java -version检查是否已经安装了JDK。
      • 如果没有安装,需要手动配置JAVA_HOME环境变量。
      • 设置Path环境变量为%JAVA_HOME%\bin
    • Linux
      • 使用命令sudo apt-get install openjdk-11-jdk(Debian/Ubuntu系统)或sudo yum install java-11-openjdk(CentOS/RHEL系统)安装JDK。
      • 设置环境变量:
        export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
        export PATH=$JAVA_HOME/bin:$PATH
  3. 验证安装
    • 使用命令java -version验证JDK是否安装成功。

IDE选择与配置

推荐使用IntelliJ IDEA或Eclipse作为开发工具。

IntelliJ IDEA配置

  1. 下载并安装IntelliJ IDEA:可以从JetBrains官方网站下载。
  2. 创建新项目
    • 打开IntelliJ IDEA,选择File -> New -> Project
    • 选择Java项目类型,点击Next
    • 输入项目名称并选择项目保存位置,点击Finish
  3. 配置项目SDK
    • 选择File -> Project Structure
    • Project选项卡下,选择SDKJava SDK
    • 确保选择的JDK版本与安装的版本一致。
  4. 创建Maven项目
    • 右键项目,选择New -> Module
    • 选择Maven项目,点击Next
    • 输入项目名称,点击Finish

Eclipse配置

  1. 下载并安装Eclipse:可以从Eclipse官方网站下载。
  2. 创建新项目
    • 打开Eclipse,选择File -> New -> Java Project
    • 输入项目名称,点击Finish
  3. 配置项目构建路径
    • 右键项目,选择Properties
    • Java Build Path选项卡下,添加User Libraries,选择Add Jars,添加需要的库文件。
  4. 创建Maven项目
    • 右键项目,选择New -> Other
    • 选择Maven项目,点击Next
    • 输入项目名称,点击Finish

SSM相关库的下载与配置

  1. 添加Spring、Spring MVC和MyBatis的依赖
    • 在Maven项目的pom.xml文件中添加以下依赖:
      <dependencies>
          <!-- Spring Core -->
          <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-web</artifactId>
              <version>5.3.10</version>
          </dependency>
          <dependency>
              <groupId>org.springframework</groupId>
              <artifactId>spring-webmvc</artifactId>
              <version>5.3.10</version>
          </dependency>
          <!-- Servlet API -->
          <dependency>
              <groupId>javax.servlet</groupId>
              <artifactId>javax.servlet-api</artifactId>
              <version>4.0.1</version>
              <scope>provided</scope>
          </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>
          <!-- JUnit用于单元测试 -->
          <dependency>
              <groupId>junit</groupId>
              <artifactId>junit</artifactId>
              <version>4.13.2</version>
              <scope>test</scope>
          </dependency>
      </dependencies>
Spring框架基础

Spring框架简介

Spring框架是一个轻量级、基于Java的开发框架,提供了依赖注入、AOP(面向切面编程)、事务管理等功能。Spring的核心容器管理着应用程序的对象,通过配置文件或注解来定义对象之间的依赖关系。

Spring核心容器配置

Spring配置文件

Spring配置文件通常命名为applicationContext.xml。该文件中定义了应用程序中需要管理的对象及其依赖关系。

<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.demo.service.UserService">
        <property name="userRepository" ref="userRepository"/>
    </bean>

    <bean id="userRepository" class="com.example.demo.repository.UserRepository"/>
</beans>

依赖注入

依赖注入是Spring框架的核心特性之一。它允许将对象的依赖关系从代码中解耦,改为通过配置文件或注解来定义。

public class UserService {
    private UserRepository userRepository;

    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    public void saveUser(User user) {
        userRepository.save(user);
    }
}

注解方式依赖注入

Spring支持使用注解来简化依赖注入的配置。常用的注解包括@Autowired@Qualifier

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserService {
    private final UserRepository userRepository;

    @Autowired
    public UserService(UserRepository userRepository) {
        this.userRepository = userRepository;
    }

    public void saveUser(User user) {
        userRepository.save(user);
    }
}
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

@Repository
public class UserRepository {
    public void save(User user) {
        // 保存用户到数据库
    }
}

XML配置方式依赖注入

使用XML配置文件来定义对象的依赖关系。

<bean id="userService" class="com.example.demo.service.UserService">
    <property name="userRepository" ref="userRepository"/>
</bean>

<bean id="userRepository" class="com.example.demo.repository.UserRepository"/>
Spring MVC基础

Spring MVC工作原理

Spring MVC是Spring框架的一部分,它提供了一个基于Java的Web开发框架。主要的工作流程包括:

  1. 前端控制器DispatcherServlet接收所有请求,根据请求参数调用相应的处理器。
  2. 处理器映射:将请求映射到具体的处理器。
  3. 处理器:处理器处理请求生成ModelAndView对象。
  4. 视图解析器:解析ModelAndView中的视图名称,转换为具体的视图。
  5. 视图:视图对象渲染Model中的数据,并将结果发送给客户端。

Spring MVC相关配置

MVC配置文件

SpringMVC配置文件中,需要配置前端控制器、视图解析器等。

<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">

    <!-- 启用Spring注解扫描 -->
    <context:component-scan base-package="com.example.demo.controller"/>

    <!-- 配置视图解析器 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
</beans>

配置前端控制器

web.xml文件中配置DispatcherServlet

<web-app>
    <display-name>SSM Demo</display-name>

    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
    </welcome-file-list>

    <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/springmvc-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>
</web-app>

实现简单的RESTful接口

使用Spring MVC实现简单的RESTful接口,可以通过注解来定义控制器的方法。

import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/users")
public class UserController {

    @Autowired
    private UserService userService;

    @PostMapping
    public void createUser(@RequestBody User user) {
        userService.saveUser(user);
    }

    @GetMapping("/{id}")
    public User getUser(@PathVariable("id") Long id) {
        return userService.getUser(id);
    }
}
MyBatis基础

MyBatis简介

MyBatis是一个持久层框架,它允许使用简单的XML或注解进行数据库操作。MyBatis通过SqlSession对象来执行SQL语句,并返回结果。它提供了灵活的SQL映射功能,可以将Java对象映射到数据库表的列。

MyBatis配置文件详解

mybatis-config.xml

MyBatis的核心配置文件是mybatis-config.xml,其中定义了数据库连接信息、类型处理器、映射器等。

<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.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/demo/mapper/UserMapper.xml"/>
    </mappers>
</configuration>

UserMapper.xml

该文件定义了数据库操作的SQL语句。

<?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.example.demo.mapper.UserMapper">

    <select id="selectUser" resultType="com.example.demo.model.User">
        SELECT * FROM users WHERE id = #{id}
    </select>

    <insert id="insertUser">
        INSERT INTO users (name, email) VALUES (#{name}, #{email})
    </insert>

</mapper>

MyBatis与数据库的交互

MyBatis通过SqlSession对象来执行SQL语句。

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class UserMapperTest {
    public static void main(String[] args) {
        // 创建SqlSessionFactory
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("mybatis-config.xml"));

        try (SqlSession sqlSession = factory.openSession()) {
            UserMapper mapper = sqlSession.getMapper(UserMapper.class);

            // 插入新用户
            User user = new User();
            user.setName("John Doe");
            user.setEmail("john.doe@example.com");
            mapper.insertUser(user);

            // 查询用户
            User retrievedUser = mapper.selectUser(1L);
            System.out.println(retrievedUser);
        }
    }
}
SSM集成实战

SSM整合步骤

  1. 创建Spring配置文件:定义数据源、事务管理器等。
  2. 创建MyBatis配置文件:定义SqlSessionFactory。
  3. 创建Spring MVC配置文件:定义视图解析器、控制器等。
  4. 创建MyBatis映射器文件:定义SQL语句。

Spring配置文件

<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
       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/tx
       http://www.springframework.org/schema/tx/spring-tx.xsd">

    <context:component-scan base-package="com.example.demo"/>

    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="com.mysql.cj.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 class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
        <property name="basePackage" value="com.example.demo.mapper"/>
    </bean>

    <tx:annotation-driven transaction-manager="transactionManager"/>

    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>
</beans>

MyBatis配置文件

<configuration>
    <typeAliases>
        <typeAlias alias="User" type="com.example.demo.model.User"/>
    </typeAliases>

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.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="mapper/UserMapper.xml"/>
    </mappers>
</configuration>

Spring MVC配置文件

<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.demo"/>
    <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映射器文件

<?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.example.demo.mapper.UserMapper">

    <select id="selectUser" resultType="com.example.demo.model.User">
        SELECT * FROM users WHERE id = #{id}
    </select>

    <insert id="insertUser">
        INSERT INTO users (name, email) VALUES (#{name}, #{email})
    </insert>

</mapper>

案例演示:实现一个简单的用户管理系统

用户实体类

public class User {
    private Long id;
    private String name;
    private String email;

    // Getters and Setters
}

用户映射器接口

public interface UserMapper {
    User selectUser(Long id);
    void insertUser(User user);
}

用户服务类

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserService {
    private final UserMapper userMapper;

    @Autowired
    public UserService(UserMapper userMapper) {
        this.userMapper = userMapper;
    }

    public User getUser(Long id) {
        return userMapper.selectUser(id);
    }

    public void saveUser(User user) {
        userMapper.insertUser(user);
    }
}

用户控制器类

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/users")
public class UserController {

    private final UserService userService;

    @Autowired
    public UserController(UserService userService) {
        this.userService = userService;
    }

    @PostMapping
    public void createUser(@RequestBody User user) {
        userService.saveUser(user);
    }

    @GetMapping("/{id}")
    public User getUser(@PathVariable("id") Long id) {
        return userService.getUser(id);
    }
}

用户视图

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
    <title>User Management</title>
</head>
<body>
    <h1>User Management</h1>
    <a href="/users">List Users</a>
    <form action="/users" method="post">
        <label for="name">Name:</label>
        <input type="text" id="name" name="name" required>
        <label for="email">Email:</label>
        <input type="email" id="email" name="email" required>
        <button type="submit">Create User</button>
    </form>
</body>
</html>

常见问题及解决方法

问题1:无法访问控制器方法

问题:请求控制器方法时返回404错误。
解决方法

  1. 检查web.xml文件中的servlet-mapping配置是否正确。
  2. 确保@Controller@RestController注解已正确应用到控制器类上。
  3. 确保Spring MVC配置文件中的<context:component-scan>标签指定了正确的包。

问题2:MyBatis SQL执行错误

问题:执行MyBatis的SQL语句时,出现SQL语法错误。
解决方法

  1. 检查UserMapper.xml文件中的SQL语句是否正确。
  2. 确保数据库表结构与SQL语句匹配。
  3. 使用MyBatis的debug模式查看详细的执行日志。

问题3:事务管理问题

问题:事务管理出现问题,例如提交事务失败。
解决方法

  1. 检查Spring配置文件中<tx:annotation-driven>标签是否正确配置。
  2. 确保@Transactional注解已正确应用到需要事务管理的方法上。
  3. 检查数据库连接池配置是否正确。
点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消