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

SSM实战:新手入门教程

标签:
SSM
概述

本文详细介绍了如何搭建和开发基于SSM框架的Web应用,从环境搭建到代码开发,涵盖了Spring、SpringMVC和MyBatis三个核心框架的配置,帮助新手快速入门SSM实战。

SSM简介

Spring框架介绍

Spring框架是Java领域最流行的轻量级框架之一,由Rod Johnson在2003年设计并发布。Spring框架是一个开源的企业级Java应用程序框架,它提供了全面的基础设施支持,使得开发人员可以专注于核心业务逻辑,而无需处理低级的系统问题。Spring框架的核心是Spring核心容器,它负责管理和配置应用程序中的对象。Spring框架还提供了许多其他功能,如IoC(控制反转)、依赖注入、AOP(面向切面编程)、事务处理、数据库访问等。

SpringMVC框架介绍

SpringMVC是Spring框架的一个模块,专门用于Web开发。SpringMVC是一个基于MVC设计模式的Web框架,它通过控制器、视图和模型的分离来简化Web开发。SpringMVC使用了DispatcherServlet作为前端控制器,负责接收所有的HTTP请求,并将请求分发给相应的处理器。SpringMVC支持多种视图解析器,如InternalResourceViewResolver,用于解析JSP页面。此外,SpringMVC还提供了拦截器和异常处理等功能,使得Web应用开发更加灵活和便捷。

MyBatis框架介绍

MyBatis是一个持久层框架,它可以将Java对象映射到关系型数据库中的表。MyBatis简化了数据库操作,允许开发人员使用简单的XML或注解来配置数据库映射。MyBatis提供了强大的SQL映射,使得编写高效的数据库访问代码变得更加容易。MyBatis支持缓存机制,可以显著提升应用性能。此外,MyBatis还具有强大的日志记录功能,方便开发者进行调试。

环境搭建

开发工具安装

开发工具的选择有很多,常见的有IDEA和Eclipse。下面是使用IDEA和Eclipse的安装步骤:

IDEA安装步骤

  1. 访问JetBrains官网,下载并安装IDEA。
  2. 安装完成后,打开IDEA,创建一个新的项目。

Eclipse安装步骤

  1. 访问Eclipse官网,下载并安装Eclipse。
  2. 安装完成后,打开Eclipse,创建一个新的项目。

JDK环境配置

JDK(Java Development Kit)是运行Java程序的必备组件,需要在系统中正确配置。以下是配置JDK的步骤:

  1. 访问Oracle官网,下载并安装最新版本的JDK。
  2. 配置环境变量:
    • 在系统环境变量中添加JAVA_HOME,指向JDK的安装目录。
    • 在系统环境变量中添加PATH,指向JDK的bin目录。

示例代码:

java -version

Maven环境配置

Maven是一个项目管理和构建工具,它可以帮助开发人员管理项目的依赖关系和构建流程。以下是配置Maven的步骤:

  1. 访问Maven官网,下载并安装Maven。
  2. 配置环境变量:
    • 在系统环境变量中添加M2_HOME,指向Maven的安装目录。
    • 在系统环境变量中添加PATH,指向Maven的bin目录。

示例代码:

mvn -v

SSM依赖添加

在Spring项目中引入Spring、SpringMVC和MyBatis的依赖。在项目的pom.xml文件中添加如下依赖:

<dependencies>
    <!-- Spring框架依赖 -->
    <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>

    <!-- MyBatis框架依赖 -->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.7</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.25</version>
    </dependency>

    <!-- Servlet依赖 -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>4.0.1</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>javax.servlet.jsp</groupId>
        <artifactId>javax.servlet.jsp-api</artifactId>
        <version>2.3.3</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>javax.servlet.jsp.jstl</groupId>
        <artifactId>javax.servlet.jsp.jstl-api</artifactId>
        <version>1.2.1</version>
        <scope>provided</scope>
    </dependency>
</dependencies>
创建项目

Maven项目创建

在IDEA或Eclipse中创建一个新的Maven项目,项目名称为ssm-demo,并选择Spring Web框架作为依赖。

基本项目结构介绍

一个典型的Spring项目基本结构如下:

src
└── main
    ├── java
    │   └── com
    │       └── example
    │           └── ssm
    │               ├── controller
    │               ├── dao
    │               ├── domain
    │               ├── service
    │               └── SpringConfig.java
    ├── resources
    │   ├── application.properties
    │   └── mybatis-config.xml
    └── webapp
        └── WEB-INF
            ├── web.xml
            └── spring-servlet.xml

构建项目流程

  1. 创建Spring配置文件SpringConfig.java,配置Spring容器。
  2. 创建web.xml,配置SpringMVC的前端控制器。
  3. 创建mybatis-config.xml,配置MyBatis核心配置。
  4. 创建SpringMVC配置文件spring-servlet.xml,配置SpringMVC。
代码开发

Spring配置文件编写

SpringConfig.java文件中编写Spring配置文件,设置Spring容器的基本配置。

package com.example.ssm;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.transaction.annotation.EnableTransactionManagement;

@Configuration
@EnableTransactionManagement
@ComponentScan(basePackages = "com.example.ssm")
@PropertySource("classpath:application.properties")
public class SpringConfig {

    @Bean
    public DriverManagerDataSource dataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/ssm");
        dataSource.setUsername("root");
        dataSource.setPassword("password");
        return dataSource;
    }

    @Bean
    public DataSourceTransactionManager txManager() {
        return new DataSourceTransactionManager(dataSource());
    }
}

SpringMVC配置文件编写

spring-servlet.xml文件中编写SpringMVC配置文件,配置SpringMVC相关的bean和拦截器。

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

MyBatis配置文件编写

mybatis-config.xml文件中编写MyBatis配置文件,配置数据库连接和映射文件。

<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/ssm/dao/UserMapper.xml"/>
    </mappers>
</configuration>

实际业务逻辑开发

创建DAO层、Service层和Controller层的类,实现实际的业务逻辑。

DAO层

package com.example.ssm.dao;

import com.example.ssm.domain.User;
import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface UserDao {
    User getUserById(int id);
    void updateUser(User user);
    void deleteUser(int id);
}
<?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.ssm.dao.UserDao">
    <select id="getUserById" resultType="com.example.ssm.domain.User">
        SELECT * FROM user WHERE id = #{id}
    </select>
    <update id="updateUser">
        UPDATE user SET name = #{name}, email = #{email} WHERE id = #{id}
    </update>
    <delete id="deleteUser">
        DELETE FROM user WHERE id = #{id}
    </delete>
</mapper>

Service层

package com.example.ssm.service;

import com.example.ssm.domain.User;
import com.example.ssm.dao.UserDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserService {
    @Autowired
    private UserDao userDao;

    public User getUserById(int id) {
        return userDao.getUserById(id);
    }

    public void updateUser(User user) {
        userDao.updateUser(user);
    }

    public void deleteUser(int id) {
        userDao.deleteUser(id);
    }
}

Controller层

package com.example.ssm.controller;

import com.example.ssm.domain.User;
import com.example.ssm.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
public class UserController {
    @Autowired
    private UserService userService;

    @RequestMapping("/user")
    public String getUserById(int id, Model model) {
        User user = userService.getUserById(id);
        model.addAttribute("user", user);
        return "user";
    }

    @RequestMapping(value = "/updateUser", method = RequestMethod.POST)
    public String updateUser(User user) {
        userService.updateUser(user);
        return "redirect:/user";
    }

    @RequestMapping(value = "/deleteUser", method = RequestMethod.POST)
    public String deleteUser(int id) {
        userService.deleteUser(id);
        return "redirect:/user";
    }
}
测试验证

单元测试环境搭建

在项目中添加单元测试框架JUnit和SpringTest依赖。

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-test</artifactId>
    <version>5.3.10</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.13.2</version>
    <scope>test</scope>
</dependency>

测试用例编写

编写单元测试用例,测试Service层的功能。

UserServiceTest

package com.example.ssm.test;

import com.example.ssm.service.UserService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

import static org.junit.Assert.assertEquals;

@RunWith(SpringRunner.class)
@SpringBootTest
public class UserServiceTest {
    @Autowired
    private UserService userService;

    @Test
    public void testGetUserById() {
        User user = userService.getUserById(1);
        assertEquals("John", user.getName());
    }

    @Test
    public void testUpdateUser() {
        User user = userService.getUserById(1);
        user.setName("Jane");
        userService.updateUser(user);
        User updatedUser = userService.getUserById(1);
        assertEquals("Jane", updatedUser.getName());
    }

    @Test
    public void testDeleteUser() {
        userService.deleteUser(1);
        User user = userService.getUserById(1);
        assertEquals(null, user);
    }
}

测试结果分析

运行单元测试用例,查看测试结果。确保测试用例通过,没有出现任何错误。

常见问题与解决

常见错误及其解决方案

问题1:Spring容器无法启动

  • 原因:Spring配置文件中存在错误,如bean配置不正确。
  • 解决方案:检查Spring配置文件,确保所有bean被正确配置。

问题2:MyBatis查询失败

  • 原因:MyBatis映射文件中SQL语句有误,或数据库表结构与映射文件不匹配。
  • 解决方案:检查MyBatis映射文件中的SQL语句,确保其正确无误。同时检查数据库表结构是否与映射文件一致。

性能优化建议

使用连接池

使用连接池管理数据库连接,可以有效提升系统性能。MyBatis支持多种连接池实现,如Druid、C3P0等。

缓存策略

合理使用MyBatis的缓存策略,可以减少数据库访问次数,从而提升系统性能。

索引优化

在数据库表上合理设计索引,可以显著提高查询性能。

分页查询

对于大数据量的查询,使用分页查询可以有效提升查询性能,并减少内存消耗。

通过以上步骤,你可以顺利搭建并开发一个基于SSM框架的Web应用。希望这篇教程对你有所帮助。

点击查看更多内容
TA 点赞

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

评论

作者其他优质文章

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

100积分直接送

付费专栏免费学

大额优惠券免费领

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

举报

0/150
提交
取消