使用IDEA搭建ssm框架的详细图文教程

所需工具

开始搭建ssm框架项目之前先预安装idea,jdk,mysql,Tomcat,maven:

第一步(创建maven项目)

创建一个项目
点击创建项目
选择maven模板
在这里插入图片描述
设置项目名称(组名即包名)
*强调文本* _强调文本_
选择maven存储路径
在这里插入图片描述
设置项目名称,可修改项目名称和项目存储路径
在这里插入图片描述
进入项目后可选择maven的下载方式
在这里插入图片描述
maven项目即创建完成

第二步(新建相应的目录结构)

打开后发现目录结构只有webapp,则新建java和resource文件
在这里插入图片描述
将java和resource文件分别设为sources和resource
点击file-》project structure,进入此页面,设置完成后点击apply在点击OK
在这里插入图片描述

第三步(添加项目所需的依赖)

配置pom.xml文件

<?xml version="1.0" encoding="UTF-8"?>

<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>ssmdemotest</groupId>
  <artifactId>ssmdemotest</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

  <name>ssmdemotest Maven Webapp</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

  <properties>
    <!-- spring版本号 -->
    <spring.version>5.1.5.RELEASE</spring.version>


    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>

    <!--c标签所用的包-->
    <dependency>
      <groupId>org.glassfish.web</groupId>
      <artifactId>javax.servlet.jsp.jstl</artifactId>
      <version>1.2.2</version>
    </dependency>

    <!-- spring需要的jar包 -->
    <!-- Spring的包 -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>${spring.version}</version> <!-- 引用properties中配置的版本,方便维护 -->
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aspects</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-orm</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-test</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <!-- springMVC需要的包 -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <!-- 2.数据库 -->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.34</version>
      <scope>runtime</scope>
    </dependency>

    <!-- mybatis和持久层需要的包 -->
    <!-- mybatis依赖的库 -->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.3.1</version>
    </dependency>

    <!-- 用来整合mybatis和sping框架的一个类库 -->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis-spring</artifactId>
      <version>1.3.2</version>
    </dependency>

    <!-- 添加分布插件的包pagehelper -->
    <dependency>
      <groupId>com.github.pagehelper</groupId>
      <artifactId>pagehelper</artifactId>
      <version>5.1.1</version>
    </dependency>

    <!--controller返回json数据-->
    <!-- JSON转换器需要的jar包 将java对象转化成json对象 -->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>2.9.8</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.9.8</version>
    </dependency>

    <!-- dbcp连接池需要的jar包 -->
    <dependency>
      <groupId>commons-dbcp</groupId>
      <artifactId>commons-dbcp</artifactId>
      <version>1.4</version>
    </dependency>
    <!-- log4j支持 -->
	  <!-- slf4j-log4j12:slf4j和log4j结合包 -->
	  <!-- slf4j-api提供接口,log4j提供具体的实现 -->
	  <dependency>
	      <groupId>org.slf4j</groupId>
	      <artifactId>slf4j-log4j12</artifactId>
	      <version>2.0.0-alpha0</version>
	  </dependency>

  </dependencies>

  <build>
    <finalName>ssmdemotest</finalName>
    <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
      <plugins>
        <plugin>
          <artifactId>maven-clean-plugin</artifactId>
          <version>3.1.0</version>
        </plugin>
        <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
        <plugin>
          <artifactId>maven-resources-plugin</artifactId>
          <version>3.0.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.8.0</version>
        </plugin>
        <plugin>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.22.1</version>
        </plugin>
        <plugin>
          <artifactId>maven-war-plugin</artifactId>
          <version>3.2.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-install-plugin</artifactId>
          <version>2.5.2</version>
        </plugin>
        <plugin>
          <artifactId>maven-deploy-plugin</artifactId>
          <version>2.8.2</version>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
</project>

下载了相应的依赖
下载了相应的依赖

第四步(添加项目所需的配置文件和业务文件)

新建相应的文件目录和文件
在这里插入图片描述

配置文件内容如下

1.jdbc.properties文件

mybatis.driver=com.mysql.jdbc.Driver
mybatis.url=jdbc:mysql://localhost:3306/student?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT
mybatis.username=root
mybatis.password=root
#定义初始连接数
mybatis.initialSize=3
#定义最大连接数
mybatis.maxActive=20
#定义最大空闲
mybatis.maxIdle=20
#定义最小空闲
mybatis.minIdle=1
#定义最长等待时间
mybatis.maxWait=60000

2.log4j.properties文件(不使用可不配置)

log4j.rootLogger = debug, console, R
log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [%p][%c{1}] - %m%n
log4j.appender.R = org.apache.log4j.RollingFileAppender
log4j.appender.R.File = F:/IDEAworkspace/log.txt
log4j.appender.R.MaxFileSize = 1MB
log4j.appender.R.MaxBackupIndex = 1
log4j.appender.R.layout = org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%p]-%c{1} - %m%n

### sql ###
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
log4j.logger.java.sql.ResultSet=DEBUG

3.spring-mybatis文件

<?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:p="http://www.springframework.org/schema/p"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
	 http://www.springframework.org/schema/context
	 http://www.springframework.org/schema/context/spring-context-4.0.xsd
	 http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
	 http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
	 ">

    <!-- spring 配置文件  主要配置和业务逻辑有关的 -->


    <!-- 2 设置扫描的包 表示不扫描控制层,控制层由springMVC来扫描 -->
    <context:component-scan base-package="com.etc">
        <!-- 表示不扫描控制层 -->
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" />
    </context:component-scan>

    <!--<import resource="redisConfig.xml"></import>-->

    <!-- 配置数据库连接的相关信息 jdbc.properties也定义在resources文件夹下-->

    <!-- 设置与数据库配置文件关联 引入配置文件 读取数据库有关的配置信息-->
    <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="location" value="classpath:jdbc.properties" />
    </bean>


    <!--3  配置数据源连接池有关的属性 -->
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="url" value="${mybatis.url}"></property>
        <property name="username" value="${mybatis.username}"></property>
        <property name="password" value="${mybatis.password}"></property>
        <property name="driverClassName" value="${mybatis.driver}"></property>
        <!-- 初始化连接大小 -->
        <property name="initialSize" value="${mybatis.initialSize}"></property>
        <!-- 连接池最大数量 -->
        <property name="maxActive" value="${mybatis.maxActive}"></property>
        <!-- 连接池最大空闲 -->
        <property name="maxIdle" value="${mybatis.maxIdle}"></property>
        <!-- 连接池最小空闲 -->
        <property name="minIdle" value="${mybatis.minIdle}"></property>
        <!-- 获取连接最大等待时间 -->
        <property name="maxWait" value="${mybatis.maxWait}"></property>
    </bean>

    <!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 -->
    <!--4  mybatis的配置  SqlSessionFactoryBean的配置和注入操作-->
    <bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- ① 配置和数据源有关 -->
        <property name="dataSource" ref="dataSource"></property>
        <!-- ②其他的属性 和映射文件有关的配置信息 -->
        <property name="mapperLocations" value="classpath:mapper/*.xml"></property>
        <!--给包中的类起别名-->
        <property name="typeAliasesPackage" value="com.etc.entity"></property>
        <!-- 配置pagehelper分页插件 -->
        <property name="plugins">
            <array>
                <bean class="com.github.pagehelper.PageInterceptor">
                    <property name="properties">
                        <!--使用下面的方式配置参数,一行配置一个 -->
                        <value>helperDialect=mysql</value>
                    </property>
                </bean>
            </array>
        </property>
    </bean>
    <!-- 5 配置扫描器 MapperScannerConfigurer 需要用到mybatis-spring.jar-->
    <!-- spring跟mybatis的整合,扫描所有的dao下的接口,然后创建接口的实现类 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!-- DAO接口所在包名,Spring会自动查找其下的类 -->
        <property name="basePackage" value="com.etc.dao"></property>
        <!-- 注意这里的是value 不是ref   -->
        <property name="sqlSessionFactoryBeanName" value="sessionFactory"></property>
    </bean>

    <!--事务管理器-->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager" autowire="byName"></bean>
    <!--配置事务如何使用的通知-->
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <tx:method name="*query*" read-only="true"/>
            <tx:method name="*get*" read-only="true"/>
            <tx:method name="*"/>
        </tx:attributes>
    </tx:advice>
    <aop:config>
        <!--切入点配置-->
        <aop:pointcut id="pointCut" expression="execution(* com.etc.service.impl.*.*(..))"></aop:pointcut>
        <!--切入点与通知的关联-->
        <aop:advisor advice-ref="txAdvice" pointcut-ref="pointCut"></aop:advisor>
    </aop:config>
</beans>

4.新建mapper文件夹(存放所有映射文件)
新建StuMapper.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.etc.dao.StuDao">
    <!--定义一段代码段  -->
    <sql id="cols">
        id,name,sex,age
    </sql>
    <select id="query" resultType="Stu" parameterType="Stu">
        select <include refid="cols"></include> from studentone a
        <where><!-- 有where元素 它后面的第一个and会被mybatis取消掉 -->
            <if test="name!=null and name!=''">
                and name like '%${name}%'
            </if>
            <if test="sex!=null and sex!=''">
                and sex = #{sex}
            </if>
        </where>
        order by id desc
    </select>

    
</mapper>

5.springmvc-servlet.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/mvc
       http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
      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-4.3.xsd">


    <!-- 1.开启spring的注解功能 存放控制器的目录(包) 此处spring mvc配置文件中只扫描控制器,其他包交给spring管理 -->
    <context:component-scan base-package="com.etc.controller"></context:component-scan>

    <!-- 2为@Controller分发请求 -->
    <mvc:annotation-driven />

    <!-- 将spring mvc 不能处理的请求交给tomcat  例如静态资源 -->
    <!--3 设置释放静态资源 静态资源必须放在web-app根目录下 两个**表示比如js文件下的所有文件,包括子路径 -->
   <mvc:default-servlet-handler></mvc:default-servlet-handler>


    <!-- 4 配置视图处理器 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!-- 跳转到视图层的前缀 -->
        <property name="prefix" value="/"></property>
        <!-- 跳转到视图层的后缀 -->
        <property name="suffix" value=".jsp"></property>
    </bean>

    <!-- 5文件上传的视图解析器 如果没有使用文件上传可以不用配置,当然如果不配,那么配置文件中也不必引入上传组件包 -->
    <!--<bean id="multipartResolver"-->
          <!--class="org.springframework.web.multipart.commons.CommonsMultipartResolver">-->
        <!--<property name="maxUploadSize" value="2048000"></property>&lt;!&ndash; 上传的文件最大大小 &ndash;&gt;-->
    <!--</bean>-->
</beans>

6.web.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         id="WebApp_ID" version="3.1">

    <!-- 配置监听器,监听application -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <!--启动spring容器,加载spring配置文件spring-mybatis.xml文件-->
    <context-param>
        <!--   上下文对象的初始化参数 -->
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring-mybatis.xml</param-value>
    </context-param>

    <!-- 配置spring mvc 的前端控制器,DispatcherServlet类拦截所有请求,交给controller处理
  加载spring mvc配置文件(springmvc-servlet.xml) -->
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!--此servlet启动时,会从WEB-INF路径下面,找springmvc-servlet.xml来解析-->
        <!-- 如果springmvc-servlet.xml是放在resources中就需要设置init-param -->
        <!-- <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc-servlet.xml</param-value>
        </init-param> -->
    </servlet>

    <!--将所有请求映射到DispatcherServlet进行处理-->
    <!-- Map all requests to the DispatcherServlet for handling -->
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

    <!-- 解决工程的中文乱码问题 -->
    <filter>
        <filter-name>encodingFilter</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>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

</web-app>

7.在wepapp文件下新建jsp文件
stuQuery.jsp文件

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h1>这是学生的查询页面</h1>
<table border="1" width="100%">
    <tr>
        <th>序号</th>
        <th>姓名</th>
        <th>性别</th>
        <th>年龄</th>
    </tr>
    <c:forEach items="${p}" var="s" varStatus="st">
        <tr>
            <%--<td>${((p.pageNum-1)*p.pageSize)+st.count}</td>--%>
            <td>${s.id}</td>
            <td>${s.name}</td>
            <td>${s.sex}</td>
            <td>${s.age}</td>
            <td>
                <a href="stuget?sid=${s.id}">详情</a>
                <a href="studel?sid=${s.id}" onclick="return confirm('你确定要删除吗?')">删除</a>
            </td>
        </tr>
    </c:forEach>
</table>

</body>
</html>

业务逻辑文件如下

1.entity层包的文件
Stu.java文件

package com.etc.entity;

import java.util.Date;

public class Stu {

    private Integer id;
    private String name;
    private String sex;
    private Integer age;

    public Stu() {
    }

    public Stu(Integer id, String name, String sex, Integer age) {
        this.id = id;
        this.name = name;
        this.sex = sex;
        this.age = age;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}

2.dao层包的文件
BaseDao.java文件

package com.etc.dao;

import java.io.Serializable;
import java.util.List;

public interface BaseDao<G> {

   public void add(G g);

   public void mod(G g);

   public void del(Serializable cid);

   public G get(Serializable cid);

   public List<G> query(G g);
}

StuDao.java文件

package com.etc.dao;

import com.etc.entity.Stu;

public interface StuDao extends BaseDao<Stu> {
}

3.service层包的文件
BaseService.java文件

package com.etc.service;

import java.io.Serializable;
import java.util.List;

public interface BaseService<G> {

    public void add(G g);

    public void mod(G g);

    public void del(Serializable cid);

    public G get(Serializable cid);

    public List<G> query();

    public List<G> query(G g);

//    public PageInfo<G> query(G g, int pageNo, int pageSize);
}

StuService.java文件

package com.etc.service;

import com.etc.entity.Stu;

public interface StuService extends BaseService<Stu> {
}

4.service包下的impl包
StuServiceImpl.java文件

package com.etc.service.impl;

import com.etc.dao.StuDao;
import com.etc.entity.Stu;
import com.etc.service.StuService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.io.Serializable;
import java.util.List;

@Service("stuService")
public class StuServiceImpl implements StuService {


    @Resource
    private StuDao stuDao;


    @Override
    public void add(Stu stu) {

    }

    @Override
    public void mod(Stu stu) {

    }

    @Override
    public void del(Serializable cid) {

    }

    @Override
    public Stu get(Serializable cid) {
        return null;
    }

    @Override
    public List<Stu> query() {
        List<Stu> list = stuDao.query(new Stu());
        System.out.println("数据"+list);
        return list;
    }

    @Override
    public List<Stu> query(Stu stu) {
        return null;
    }
}

5.controller层包下的文件
StuController.java文件

package com.etc.controller;

import com.etc.entity.Stu;
import com.etc.service.StuService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;

import javax.annotation.Resource;
import java.util.List;

// controller :返回的数据经过视图解析器,进入相应的页面
// restController:返回的数据直接返回数据
@Controller
public class StuController {

    @Resource
    private StuService stuService;

    /**
     * 返回数据
     * @return
     */
    @RequestMapping("/query")
    @ResponseBody
    private List<Stu> queryStu(){
        List<Stu> list = stuService.query();
        return list;
    }

    /**
     * 经过视图解析器,进入index.jsp页面
     * @return
     */
    @RequestMapping("/queryModel")
    private ModelAndView queryModel(){
        ModelAndView mv = new ModelAndView("index");
        return mv;
    }

    /**
     * 经过视图解析器,进入stuQuery.jsp页面
     * @return
     */
    @RequestMapping("/queryModelStu")
    private ModelAndView queryModelStu(){
        ModelAndView mv = new ModelAndView("stuQuery");
        mv.addObject("p",stuService.query());
        return mv;
    }

    /**
     * 返回内容
     * @return
     */
    @RequestMapping("/queryString")
    @ResponseBody
    private String queryStuString(){
        return "index";
    }
}

第五步(配置Tomcat)

配置Tomcat
在这里插入图片描述
在这里插入图片描述
选择Tomcat版本
在这里插入图片描述
添加部署文件
在这里插入图片描述
选择运行的文件
在这里插入图片描述
选择完毕后点击ok即可
在这里插入图片描述

第六步(启动项目,并进行测试)

运行项目
启动成功后则会自动打开index.jsp的文件
在这里插入图片描述
修改相应的路由跳转到新增的jsp页面
在这里插入图片描述

在这里插入图片描述
附上学生表的数据库的表设计
在这里插入图片描述

到此ssm框架搭建成功


版权声明:本文为weixin_45438625原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。