怎么用SSM实现管理系统

发布时间:2022-09-30 10:08:44 作者:iii
来源:亿速云 阅读:168

怎么用SSM实现管理系统

目录

  1. 引言
  2. SSM框架简介
  3. 项目环境搭建
  4. 数据库设计
  5. Spring配置
  6. 业务逻辑实现
  7. 前端页面设计
  8. 系统测试
  9. 项目部署
  10. 总结与展望

引言

在现代软件开发中,管理系统的开发是一个常见的需求。无论是企业内部的管理系统,还是面向公众的服务平台,都需要一个高效、稳定、易维护的技术架构来实现。SSM(Spring + Spring MVC + MyBatis)框架是目前Java Web开发中非常流行的技术组合,它结合了Spring的依赖注入和面向切面编程、Spring MVC的模型-视图-控制器架构以及MyBatis的持久层框架,能够有效地提高开发效率和系统性能。

本文将详细介绍如何使用SSM框架来实现一个管理系统。我们将从项目环境搭建开始,逐步深入到数据库设计、业务逻辑实现、前端页面设计、系统测试以及项目部署等各个环节。通过本文的学习,读者将能够掌握SSM框架的基本使用,并能够独立完成一个管理系统的开发。

SSM框架简介

Spring

Spring是一个轻量级的Java开发框架,它提供了全面的基础设施支持,使得开发者能够专注于业务逻辑的实现。Spring的核心特性包括依赖注入(DI)和面向切面编程(AOP)。依赖注入使得对象之间的依赖关系由Spring容器来管理,从而降低了代码的耦合度;面向切面编程则允许开发者将横切关注点(如日志、事务管理等)从业务逻辑中分离出来,提高了代码的可维护性。

Spring MVC

Spring MVC是Spring框架中的一个模块,它基于模型-视图-控制器(MVC)设计模式,用于构建Web应用程序。Spring MVC通过DispatcherServlet来处理所有的HTTP请求,并将请求分发给相应的控制器进行处理。控制器处理完请求后,将模型数据传递给视图进行渲染,最终生成HTML页面返回给客户端。

MyBatis

MyBatis是一个优秀的持久层框架,它支持定制化SQL、存储过程以及高级映射。MyBatis避免了几乎所有的JDBC代码和手动设置参数以及获取结果集的工作。MyBatis可以使用简单的XML或注解来配置和映射原生信息,将接口和Java的POJOs(Plain Old Java Objects)映射成数据库中的记录。

项目环境搭建

开发工具

在开始项目之前,我们需要准备一些开发工具:

项目结构

一个典型的SSM项目结构如下:

src
├── main
│   ├── java
│   │   ├── com.example.controller
│   │   ├── com.example.dao
│   │   ├── com.example.entity
│   │   ├── com.example.service
│   │   └── com.example.config
│   ├── resources
│   │   ├── mybatis
│   │   ├── spring
│   │   └── application.properties
│   └── webapp
│       ├── WEB-INF
│       │   └── views
│       └── static
└── test
    ├── java
    └── resources

依赖配置

pom.xml文件中,我们需要添加SSM框架的相关依赖:

<dependencies>
    <!-- Spring -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.3.21</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>5.3.21</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>5.3.21</version>
    </dependency>

    <!-- MyBatis -->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.9</version>
    </dependency>
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis-spring</artifactId>
        <version>2.0.7</version>
    </dependency>

    <!-- MySQL -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.29</version>
    </dependency>

    <!-- Servlet API -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>4.0.1</version>
        <scope>provided</scope>
    </dependency>

    <!-- JSTL -->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>

    <!-- Jackson -->
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.13.3</version>
    </dependency>

    <!-- Log4j -->
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.17.2</version>
    </dependency>
</dependencies>

数据库设计

需求分析

在开始设计数据库之前,我们需要明确系统的需求。假设我们要开发一个简单的员工管理系统,系统需要实现以下功能:

ER图设计

根据需求分析,我们可以设计出以下ER图:

+-------------+        +-------------+
|   Employee  |        |   Department |
+-------------+        +-------------+
| id          |<------>| id           |
| name        |        | name         |
| email       |        | description  |
| phone       |        +-------------+
| department_id|
+-------------+

表结构设计

根据ER图,我们可以设计出以下表结构:

Employee表

字段名 类型 描述
id INT 主键,自增
name VARCHAR(50) 员工姓名
email VARCHAR(100) 员工邮箱
phone VARCHAR(20) 员工电话
department_id INT 部门ID

Department表

字段名 类型 描述
id INT 主键,自增
name VARCHAR(50) 部门名称
description VARCHAR(255) 部门描述

Spring配置

Spring核心配置

src/main/resources/spring目录下创建applicationContext.xml文件,配置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"
       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">

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

    <!-- 配置数据源 -->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/employee_management?useSSL=false&amp;serverTimezone=UTC"/>
        <property name="username" value="root"/>
        <property name="password" value="password"/>
    </bean>

    <!-- 配置MyBatis -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="mapperLocations" value="classpath*:mybatis/*.xml"/>
    </bean>

    <!-- 配置Mapper扫描 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.example.dao"/>
    </bean>

    <!-- 配置事务管理器 -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>

    <!-- 开启事务注解 -->
    <tx:annotation-driven transaction-manager="transactionManager"/>
</beans>

Spring MVC配置

src/main/resources/spring目录下创建spring-mvc.xml文件,配置Spring MVC的相关功能:

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans.xsd
           http://www.springframework.org/schema/mvc
           http://www.springframework.org/schema/mvc/spring-mvc.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context.xsd">

    <!-- 扫描控制器 -->
    <context:component-scan base-package="com.example.controller"/>

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

    <!-- 开启注解驱动 -->
    <mvc:annotation-driven/>

    <!-- 静态资源处理 -->
    <mvc:resources mapping="/static/**" location="/static/"/>
</beans>

MyBatis配置

src/main/resources/mybatis目录下创建mybatis-config.xml文件,配置MyBatis的相关功能:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <settings>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
    </settings>
</configuration>

业务逻辑实现

实体类设计

src/main/java/com/example/entity目录下创建Employee.javaDepartment.java实体类:

package com.example.entity;

public class Employee {
    private Integer id;
    private String name;
    private String email;
    private String phone;
    private Integer departmentId;

    // Getters and Setters
}

public class Department {
    private Integer id;
    private String name;
    private String description;

    // Getters and Setters
}

DAO层实现

src/main/java/com/example/dao目录下创建EmployeeMapper.javaDepartmentMapper.java接口:

package com.example.dao;

import com.example.entity.Employee;
import org.apache.ibatis.annotations.*;

import java.util.List;

public interface EmployeeMapper {
    @Select("SELECT * FROM employee")
    List<Employee> findAll();

    @Select("SELECT * FROM employee WHERE id = #{id}")
    Employee findById(Integer id);

    @Insert("INSERT INTO employee(name, email, phone, department_id) VALUES(#{name}, #{email}, #{phone}, #{departmentId})")
    @Options(useGeneratedKeys = true, keyProperty = "id")
    void insert(Employee employee);

    @Update("UPDATE employee SET name = #{name}, email = #{email}, phone = #{phone}, department_id = #{departmentId} WHERE id = #{id}")
    void update(Employee employee);

    @Delete("DELETE FROM employee WHERE id = #{id}")
    void delete(Integer id);
}

public interface DepartmentMapper {
    @Select("SELECT * FROM department")
    List<Department> findAll();

    @Select("SELECT * FROM department WHERE id = #{id}")
    Department findById(Integer id);

    @Insert("INSERT INTO department(name, description) VALUES(#{name}, #{description})")
    @Options(useGeneratedKeys = true, keyProperty = "id")
    void insert(Department department);

    @Update("UPDATE department SET name = #{name}, description = #{description} WHERE id = #{id}")
    void update(Department department);

    @Delete("DELETE FROM department WHERE id = #{id}")
    void delete(Integer id);
}

Service层实现

src/main/java/com/example/service目录下创建EmployeeService.javaDepartmentService.java接口及其实现类:

package com.example.service;

import com.example.entity.Employee;
import java.util.List;

public interface EmployeeService {
    List<Employee> findAll();
    Employee findById(Integer id);
    void save(Employee employee);
    void update(Employee employee);
    void delete(Integer id);
}

package com.example.service.impl;

import com.example.dao.EmployeeMapper;
import com.example.entity.Employee;
import com.example.service.EmployeeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class EmployeeServiceImpl implements EmployeeService {
    @Autowired
    private EmployeeMapper employeeMapper;

    @Override
    public List<Employee> findAll() {
        return employeeMapper.findAll();
    }

    @Override
    public Employee findById(Integer id) {
        return employeeMapper.findById(id);
    }

    @Override
    public void save(Employee employee) {
        employeeMapper.insert(employee);
    }

    @Override
    public void update(Employee employee) {
        employeeMapper.update(employee);
    }

    @Override
    public void delete(Integer id) {
        employeeMapper.delete(id);
    }
}

package com.example.service;

import com.example.entity.Department;
import java.util.List;

public interface DepartmentService {
    List<Department> findAll();
    Department findById(Integer id);
    void save(Department department);
    void update(Department department);
    void delete(Integer id);
}

package com.example.service.impl;

import com.example.dao.DepartmentMapper;
import com.example.entity.Department;
import com.example.service.DepartmentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class DepartmentServiceImpl implements DepartmentService {
    @Autowired
    private DepartmentMapper departmentMapper;

    @Override
    public List<Department> findAll() {
        return departmentMapper.findAll();
    }

    @Override
    public Department findById(Integer id) {
        return departmentMapper.findById(id);
    }

    @Override
    public void save(Department department) {
        departmentMapper.insert(department);
    }

    @Override
    public void update(Department department) {
        departmentMapper.update(department);
    }

    @Override
    public void delete(Integer id) {
        departmentMapper.delete(id);
    }
}

Controller层实现

src/main/java/com/example/controller目录下创建EmployeeController.javaDepartmentController.java控制器类:

”`java package com.example.controller;

import com.example.entity.Employee; import com.example.service.EmployeeService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.*;

import java.util.List;

@Controller @RequestMapping(“/employee”) public class EmployeeController { @Autowired private EmployeeService employeeService;

@GetMapping("/list")
public String list(Model model) {
    List<Employee> employees = employeeService.findAll();
    model.addAttribute("employees", employees);
    return "employee/list";
}

@GetMapping("/add")
public String addForm(Model model) {
    model.addAttribute("employee", new Employee());
    return "employee/add";
}

@PostMapping("/add")
public String add(@ModelAttribute Employee employee) {
    employeeService.save(employee);
    return "redirect:/employee/list";
}

@GetMapping("/edit/{id}")
public String editForm(@PathVariable Integer id, Model model) {
    Employee employee = employeeService.findById(id);
    model.addAttribute("employee", employee);
    return "employee/edit";
}

@PostMapping("/edit")
public String edit(@ModelAttribute Employee employee) {
    employeeService.update(employee);
    return "redirect:/employee/list";
}

@GetMapping("/delete/{id}")
public String delete(@PathVariable Integer id) {
    employeeService.delete(id);
    return "redirect:/employee/list";
}

}

package com.example.controller;

import com.example.entity.Department; import com.example.service.DepartmentService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation

推荐阅读:
  1. 哪里有 基于SSM框架 管理系统 设计与实现 设计
  2. 如何实现ssm分页

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

ssm

上一篇:win10电脑记事本怎么查看

下一篇:win10蓝牙搜索不到设备如何解决

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》