SSM整合(XML方式)

文章目录

  • SSM整合之后xml方式
  • [1 系统环境](#1 系统环境)
    • [1.1 软件环境](#1.1 软件环境)
    • [1.2 项目环境](#1.2 项目环境)
    • [1.3 配置web.xml](#1.3 配置web.xml)
    • [1.4 配置jdbc.properties文件](#1.4 配置jdbc.properties文件)
    • [1.5 配置SpringMVC核心文件](#1.5 配置SpringMVC核心文件)
    • [1.6 配置Spring的核心文件](#1.6 配置Spring的核心文件)
    • [1.7 配置MyBatis的核心文件](#1.7 配置MyBatis的核心文件)
    • [1.8 配置数据库](#1.8 配置数据库)
    • [1.9 配置文件位置](#1.9 配置文件位置)
  • [2 编写后端代码](#2 编写后端代码)
    • [2.1 编写实体类](#2.1 编写实体类)
    • [2.2 编写Dao接口](#2.2 编写Dao接口)
    • [2.3 编写Dao映射文件(resource目录下)](#2.3 编写Dao映射文件(resource目录下))
    • [2.4 编写Service接口](#2.4 编写Service接口)
    • [2.5 编写ServiceImpl实现类](#2.5 编写ServiceImpl实现类)
    • [2.6 编写Controller类](#2.6 编写Controller类)
    • [2.7 代码映射文件位置](#2.7 代码映射文件位置)
  • [3 编写前端代码](#3 编写前端代码)
    • [3.1 编写首页index.jsp](#3.1 编写首页index.jsp)
    • [3.2 配置Tomcat](#3.2 配置Tomcat)
    • [3.3 webapp下配置图片](#3.3 webapp下配置图片)
    • [3.4 编写功能页面WEB-INF下](#3.4 编写功能页面WEB-INF下)
  • [4 运行访问](#4 运行访问)
    • [4.1 请求路径](#4.1 请求路径)
    • [4.2 增删改查界面](#4.2 增删改查界面)
    • [4.3 项目源代码](#4.3 项目源代码)

SSM整合之后xml方式

1 系统环境

1.1 软件环境

软件版本:
IDEA 2021.3
Maven 3.6.3
MySql (Mariadb) 10.10
JDK 1.8

1.2 项目环境

1、创建Maven的web工程

2、引入pom依赖

xml 复制代码
 <dependencies>
        <!--servlet的依赖-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
            <scope>provided</scope>
        </dependency>
        
        <!--jsp的依赖-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.0</version>
        </dependency>

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

        <!--SpringWeb-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.3.1</version>
        </dependency>

        <!--spring事务-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>5.3.1</version>
        </dependency>

        <!--jsckson的依赖-->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.14.2</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.14.2</version>
        </dependency>

        <!--mybatis的依赖-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.5.13</version>
        </dependency>
        
        <!--spring整合mybatis-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>2.1.1</version>
        </dependency>

        <!--mysql依赖-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.28</version>
        </dependency>
        
        <!--Spring的JDBC-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.3.17</version>
        </dependency>

        <!--druid连接池-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.2.16</version>
        </dependency>

        <!--单元测试-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>

        <!--lombok插件-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.28</version>
        </dependency>
    </dependencies>

3 设置插件

xml 复制代码
 <build>
        <resources>
            <resource>
                <!--所在的目录-->
                <directory>src/main/java</directory>
                <!--包括目录下的.properties .xml文件都会扫描到-->
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
        </resources>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

1.3 配置web.xml

配置前端控制器

xml 复制代码
    <!--配置前端控制器-->
    <servlet>
        <servlet-name>myssm</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:config/springmvc.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>myssm</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>

注册监听器

xml 复制代码
    <!--注册监听器-->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:config/applicationContext.xml</param-value>
    </context-param>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

注册字符过滤器,处理中文乱码

xml 复制代码
    <!--注册字符过滤器-->
    <filter>
        <filter-name>characterEncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>utf-8</param-value>
        </init-param>
        <init-param>
            <param-name>forceRequestEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
        <init-param>
            <param-name>forceResponseEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>characterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

1.4 配置jdbc.properties文件

xml 复制代码
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/db002
jdbc.username=root
jdbc.password=root

1.5 配置SpringMVC核心文件

xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<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 https://www.springframework.org/schema/mvc/spring-mvc.xsd">
    <!--springMVC的配置文件  配置controller和其他web相关对象-->
    <!--配置扫描-->
    <context:component-scan base-package="com.hx.controller"/>
    <!--配置视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
    <!--配置注解驱动-->
    <mvc:annotation-driven></mvc:annotation-driven>
</beans>

1.6 配置Spring的核心文件

xml 复制代码
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:tx="http://www.springframework.org/schema/tx"
       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
        http://www.springframework.org/schema/mvc
        https://www.springframework.org/schema/mvc/spring-mvc.xsd">

        <!--spring的配置文件,声明Service dao等工具类对象-->

    <!-- 加载配置文件 -->
    <context:property-placeholder location="classpath:config/jdbc.properties" />
    <!-- 数据库连接池 -->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
          destroy-method="close">
        <property name="driverClassName" value="${jdbc.driver}" />
        <property name="url" value="${jdbc.url}" />
        <property name="username" value="${jdbc.username}" />
        <property name="password" value="${jdbc.password}" />
    </bean>

    <!--声明SqlSessionFactoryBean 创建 sqlSessionFactory-->
    <!-- mapper配置,mybatis的SqlSessionFactoryBean -->
    <!-- 让spring管理sqlsessionfactory 使用mybatis和spring整合包中的 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- 数据库连接池 -->
        <property name="dataSource" ref="dataSource" />
        <!-- 加载mybatis的全局配置文件 -->
        <property name="configLocation" value="classpath:config/mybatis-config.xml" />
    </bean>

    <!--声明mybatis的扫描,创建dao对象-->
    <!-- 配置Mapper扫描器 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
        <property name="basePackage" value="com.hx.dao"/>
    </bean>

    <!--声明service的扫描-->
    <context:component-scan base-package="com.hx.service"/>

</beans>

1.7 配置MyBatis的核心文件

xml 复制代码
<?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>
    <!--设置实体类别名-->
    <typeAliases>
        <package name="com.hx.domain"/>
    </typeAliases>

    <!--配置接口文件映射-->
    <mappers>
        <!--
            使用package要求:
                1、mapper文件名称和mapper接口名完全一致,包括大小写
                2、mapper文件和mapper接口必须在统一目录
        -->
        <package name="com.hx.dao"/>
    </mappers>
</configuration>

1.8 配置数据库

创建数据库,数据表student

表字段如下:

1.9 配置文件位置

2 编写后端代码

2.1 编写实体类

java 复制代码
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Student {
    private Integer sid;
    private String sname;
    private Integer sage;
}

2.2 编写Dao接口

java 复制代码
@Mapper
public interface StudentDao {
    //查询所有
    List<Student> findAll();
    //新增数据
    int addStu(@Param("student") Student student);
    //删除数据
    int delStuById(Integer sid);
    //修改数据
    int updateStu(Student student);
}

2.3 编写Dao映射文件(resource目录下)

xml 复制代码
<?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.hx.dao.StudentDao">
    <!--查询所有列表-->
    <select id="findAll" resultType="Student">
        select sid, sname, sage
        from student;
    </select>
    <!--新增数据-->
    <insert id="addStu">
        insert into student
        values (#{student.sid}, #{student.sname}, #{student.sage});
    </insert>
    <!--删除数据-->
    <delete id="delStuById">
        delete
        from student
        where sid = #{sid}
    </delete>
    <!--修改数据-->
    <update id="updateStu" parameterType="Student">
        update student
        set sname=#{sname},
            sage=#{sage}
        where sid = #{sid}
    </update>
</mapper>

2.4 编写Service接口

java 复制代码
public interface StudentService {
    //查询所有
    List<Student> selectAll();

    //插入数据
    int insertStu(Student student);

    int delStuById(Integer sid);

    int updateStu(Student student);
}

2.5 编写ServiceImpl实现类

java 复制代码
@Service
public class StudentServiceImpl implements StudentService {

    @Autowired
    private StudentDao studentDao;

    @Override
    public List<Student> selectAll() {
        return studentDao.findAll();
    }

    @Override
    public int insertStu(Student student) {
        return studentDao.addStu(student);
    }

    @Override
    public int delStuById(Integer sid) {
        return studentDao.delStuById(sid);
    }

    @Override
    public int updateStu(Student student) {
        return studentDao.updateStu(student);
    }
}

2.6 编写Controller类

1、业务Controller

java 复制代码
@Controller
@RequestMapping("/student")
public class StudentController {

    @Autowired
    private StudentService studentService;

    @GetMapping("/getAll.do")
    public ModelAndView getAll() {
        List<Student> list = studentService.selectAll();
        ModelAndView mv = new ModelAndView();
        mv.addObject("list", list);
        mv.setViewName("listStu");
        return mv;
    }

    @PostMapping("/add.do")
    public ModelAndView saveStu(Student student) {
        String tips = "插入失败";
        ModelAndView mv = new ModelAndView();
        int i = studentService.insertStu(student);
        if (i > 0) {
            tips = "插入成功";
        }
        mv.addObject("data1", tips);
        mv.setViewName("success");
        return mv;
    }

    @RequestMapping("/put.do")
    public ModelAndView putStu(Student student) {
        String tips = "修改失败!";
        ModelAndView mv = new ModelAndView();
        int i = studentService.updateStu(student);
        if (i > 0) {
            tips = "修改成功";
        }
        mv.addObject("data2", tips);
        mv.setViewName("success");
        return mv;
    }

    @RequestMapping(value = "/del.do")
    public ModelAndView delStu(Integer sid) {
        String tips = "删除失败!";
        ModelAndView mv = new ModelAndView();
        int i = studentService.delStuById(sid);
        if (i > 0) {
            tips = "删除成功";
        }
        mv.addObject("data3", tips);
        mv.setViewName("success");
        return mv;
    }
}

2、页面相关Controller

java 复制代码
@RestController
@RequestMapping("/index")
public class IndexController {

    @RequestMapping("/m1Add.do")
    public ModelAndView m1Add(){
        ModelAndView mv = new ModelAndView();
        mv.setViewName("add");
        return mv;
    }
    @RequestMapping("/m2Put.do")
    public ModelAndView m2Put(){
        ModelAndView mv = new ModelAndView();
        mv.setViewName("put");
        return mv;
    }
    @RequestMapping("/m3Del.do")
    public ModelAndView m3Del(){
        ModelAndView mv = new ModelAndView();
        mv.setViewName("del");
        return mv;
    }
}

2.7 代码映射文件位置

3 编写前端代码

3.1 编写首页index.jsp

html 复制代码
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
    <style>
        div {
            background-color: antiquewhite;
            width: 400px;
            height: 200px;
            margin: 100px auto;
            text-align: center;
            background-image: url("images/p5.jpg");
            background-repeat: no-repeat;
        }

        a {
            text-decoration: none;
            color: orange;
        }

        button {
            margin: 10px 20px;
        }
    </style>
</head>
<body>
<div>
    <h1>功能区首页</h1><br>
    <button><a href="/student/getAll.do">查询数据</a></button>

    <button><a href="/index/m1Add.do">插入数据</a></button>
    <br>
    <button><a href="/index/m2Put.do">修改数据</a></button>

    <button><a href="/index/m3Del.do">删除数据</a></button>
</div>
</body>
</html>

3.2 配置Tomcat

3.3 webapp下配置图片

3.4 编写功能页面WEB-INF下

1 编写 listStu.jsp

html 复制代码
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
   String basePath =
           request.getScheme() + "://" +
                   request.getServerName() + ":" +
                   request.getServerPort() + request.getContextPath() + "/";
%>
<html>
<head>
   <title>展示所有学生信息</title>
   <style>
       .box1 {
           width: 300px;
           height: 400px;
           text-align: center;
           margin: 10px auto;
           background-image: url("/images/p3.jpg");
           background-repeat: no-repeat;
       }
       .box2 {
           width: 80px;
           height: 25px;
           text-align: center;
           margin: 10px auto;
       }
   </style>
</head>
<body>
<div class="box1">
   <table border="1px" width="300px" height="30px" align="center" cellspacing="0" cellpadding="0">
       <caption style="font-size: 20px">学生信息表</caption>
       <tr bgcolor="#a9a9a9" text-align="center">
           <td>学号</td>
           <td>姓名</td>
           <td>年龄</td>
       </tr>
       <%--数据行--%>
       <c:forEach items="${list}" var="stu" varStatus="s">
           <tr>
               <td>${stu.sid}</td>
               <td>${stu.sname}</td>
               <td>${stu.sage}</td>
           </tr>
       </c:forEach>
   </table>
   <%--返回到首页--%>
   <div class="box2">
       <form action="<%=basePath%>index.jsp">
           <input type="submit" name="返回" value="返回功能区">
       </form>
   </div>
</div>
</body>
</html>

2 编写 add.jsp

html 复制代码
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
    String basePath =
            request.getScheme() + "://" +
                    request.getServerName() + ":" +
                    request.getServerPort() + request.getContextPath() + "/";
%>
<html>
<head>
    <title>新增学生信息</title>
    <style>
        div {
            background-color: antiquewhite;
            width: 300px;
            height: 180px;
            margin: 100px auto;
            text-align: center;
            line-height: normal;
            background-image: url("/images/p1.jpg");
            background-repeat: no-repeat;
        }
        .box2 {
            width: 80px;
            height: 25px;
            text-align: center;
            margin: auto;
        }
    </style>
</head>
<body>
<div>
    <h3>新增数据</h3>
    <form action="/student/add.do" method="post">
        学号:<input type="text" name="sid" value=""><br>
        姓名:<input type="text" name="sname" value=""><br>
        年龄:<input type="text" name="sage" value=""><br>
        <input type="submit" value="添加">
        <input type="reset" value="重置">
    </form>
    <%--返回到首页--%>
    <div class="box2">
        <form action="<%=basePath%>index.jsp">
            <input type="submit" name="返回" value="返回功能区">
        </form>
    </div>
</div>
</body>
</html>

3 编写 put.jsp

html 复制代码
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
    String basePath =
            request.getScheme() + "://" +
                    request.getServerName() + ":" +
                    request.getServerPort() + request.getContextPath() + "/";
%>
<html>
<head>
    <title>修改学生信息</title>
    <style>
        div {
            background-color: antiquewhite;
            width: 300px;
            height: 180px;
            margin: 100px auto;
            text-align: center;
            line-height: normal;
            background-image: url("/images/p4.jpg");
            background-repeat: no-repeat;
        }
        .box2 {
            width: 80px;
            height: 25px;
            text-align: center;
            margin: auto;
        }
    </style>
</head>
<body>
<div>
    <h3>根据学号修改数据</h3>
    <form action="/student/put.do" method="post">
        学号:<input type="text" name="sid" value=""><br>
        姓名:<input type="text" name="sname" value=""><br>
        年龄:<input type="text" name="sage" value=""><br>
        <input type="submit" value="修改">
        <input type="reset" value="重置">
    </form>
    <%--返回到首页--%>
    <div class="box2">
        <form action="<%=basePath%>index.jsp">
            <input type="submit" name="返回" value="返回功能区">
        </form>
    </div>
</div>
</body>
</html>

4 编写 del.jsp

html 复制代码
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
    String basePath =
            request.getScheme() + "://" +
                    request.getServerName() + ":" +
                    request.getServerPort() + request.getContextPath() + "/";
%>
<html>
<head>
    <title>删除学生信息</title>
    <style>
        div {
            background-color: beige;
            width: 300px;
            height: 150px;
            margin: 100px auto;
            text-align: center;
            background-image: url("/images/p2.jpg");
            background-repeat: no-repeat;
        }
        .box2 {
            width: 80px;
            height: 25px;
            text-align: center;
            margin: auto;
        }
    </style>
</head>
<body>
<div>
    <h3>根据学号删除数据</h3>
    <form action="/student/del.do" method="get">
        <input type="text" placeholder="请输入学号" name="sid" value="">
        <input type="submit" value="删除">
    </form>
    <%--返回到首页--%>
    <div class="box2">
        <form action="<%=basePath%>index.jsp">
            <input type="submit" name="返回" value="返回功能区">
        </form>
    </div>
</div>
</body>
</html>

5 编写success.jsp

html 复制代码
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
    String basePath =
            request.getScheme() + "://" +
                    request.getServerName() + ":" +
                    request.getServerPort() + request.getContextPath() + "/";
%>
<html>
<head>
    <title>Title</title>
    <style>
        .box1{
            width: 200px;
            height: 150px;
            background-color: lightgoldenrodyellow;
            margin: 0 auto;
            text-align: center;
        }
    </style>
</head>
<body>
<div class="box1">
    <div class="box2">
        <div>插入:${data1}</div>
        <div>修改:${data2}</div>
        <div>删除:${data3}</div>
    </div>
    <%--返回到首页--%>
    <div>
        <form action="<%=basePath%>index.jsp">
            <input type="submit" name="返回" value="返回功能区">
        </form>
    </div>
</div>
</body>
</html>

4 运行访问

4.1 请求路径

首页:http://localhost:8080

4.2 增删改查界面

  • 查询功能
  • 新增功能
  • 修改功能
  • 删除功能

4.3 项目源代码

https://gitee.com/allureyu/ssm__xml.git

以上纯属个人一手编写,欢迎指教,不喜勿喷!

相关推荐
尚学教辅学习资料1 天前
基于SSM+uniapp的营养食谱系统+LW参考示例
java·uni-app·ssm·菜谱
尚学教辅学习资料4 天前
基于SSM的扶贫信息管理系统+lw示例参考
ssm·java源码·扶贫
Yaml414 天前
智慧旅游微信小程序平台
vue.js·spring boot·微信小程序·uni-app·ssm·1024程序员节
尚学教辅学习资料15 天前
基于SSM的在线旅游美食展现管理系统源码
ssm·旅游·美食·java源码
阿亮说技术16 天前
Java毕业设计 基于SSM jsp餐厅卫生安全系统
java·毕业设计·ssm·课程设计·jsp
代码吐槽菌17 天前
基于SSM的学生管理系统【附源码】
java·数据库·毕业设计·ssm·计算机专业
VaporGas22 天前
Spring MVC实现高效文件上传及优化案例
java·spring·mvc·ssm·springmvc
赐你岁月如歌23 天前
如何使用ssm实现超市管理系统
java·后端·ssm
夜月行者1 个月前
如何使用ssm实现基于Java的民宿预订管理系统的设计与实现
java·后端·ssm
夜月行者1 个月前
如何使用ssm实现基于Java的校园二手物品交易平台的设计与实现+vue
java·后端·ssm