最详细的SSM(Spring + Spring MVC + MyBatis)项目搭建

速览

  • 使用Spring+Spring MVC+MyBatis搭建项目
  • 开发工具IDEA(Ecplise步骤类似,代码完全一样)
  • 项目类型Maven工程
  • 数据库MySQL8.0
  • 数据库连接池:Druid

发现不合适的出门左转,不要浪费时间~~

数据库信息如下:

  • 数据库名:webtest
  • 测试表名称user

在这里插入图片描述

CREATE TABLE `user` (
  `username` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `password` varchar(16) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `tel` varchar(11) NOT NULL,
  `email` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `name` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  PRIMARY KEY (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

步骤

Step 1:创建Maven工程

  1. 新建Project,选择Maven,选择jdk,选择创建模板为webapp(注意看清名称)
    最详细的SSM(Spring + Spring MVC + MyBatis)项目搭建_第1张图片
    2.填写项目信息,然后一路next,最后finish
    最详细的SSM(Spring + Spring MVC + MyBatis)项目搭建_第2张图片

Step 2:添加依赖和插件,修改pom.xml文件,主要信息如下:

  • Spring相关依赖
  • MyBatis相关依赖
  • MySQL连接相关依赖
  • Druid连接池
  • 测试依赖
  • FastJSON依赖
  • Tomcat插件
  • Maven插件
  • 资源拷贝插件(为了避免部分开发工具中不拷贝java包下的资源文件,不是所有人都会遇到这个问题,可以不配,具体请看这里)

pom.xml文件



<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.0modelVersion>

  <groupId>com.demogroupId>
  <artifactId>ssmdemoartifactId>
  <version>1.0-SNAPSHOTversion>
  <packaging>warpackaging>

  
  <properties>
    <spring.version>4.2.4.RELEASEspring.version>
    <junit.version>4.9junit.version>
    <fastjson.version>1.2.28fastjson.version>
    <mybatis.version>3.2.8mybatis.version>
    <mybatis.spring.version>1.2.2mybatis.spring.version>
    <mysql.version>8.0.11mysql.version>
    <druid.version>1.0.9druid.version>
  properties>

  
  <dependencies>
    
    <dependency>
      <groupId>org.springframeworkgroupId>
      <artifactId>spring-contextartifactId>
      <version>${spring.version}version>
    dependency>
    <dependency>
      <groupId>org.springframeworkgroupId>
      <artifactId>spring-beansartifactId>
      <version>${spring.version}version>
    dependency>
    <dependency>
      <groupId>org.springframeworkgroupId>
      <artifactId>spring-webmvcartifactId>
      <version>${spring.version}version>
    dependency>
    <dependency>
      <groupId>org.springframeworkgroupId>
      <artifactId>spring-jdbcartifactId>
      <version>${spring.version}version>
    dependency>
    <dependency>
      <groupId>org.springframeworkgroupId>
      <artifactId>spring-aspectsartifactId>
      <version>${spring.version}version>
    dependency>
    <dependency>
      <groupId>org.springframeworkgroupId>
      <artifactId>spring-context-supportartifactId>
      <version>${spring.version}version>
    dependency>
    <dependency>
      <groupId>org.springframeworkgroupId>
      <artifactId>spring-testartifactId>
      <version>${spring.version}version>
    dependency>
    
    <dependency>
      <groupId>junitgroupId>
      <artifactId>junitartifactId>
      <version>${junit.version}version>
      <scope>testscope>
    dependency>
    
    <dependency>
      <groupId>com.alibabagroupId>
      <artifactId>fastjsonartifactId>
      <version>${fastjson.version}version>
    dependency>
    
    <dependency>
      <groupId>javax.servletgroupId>
      <artifactId>servlet-apiartifactId>
      <version>2.5version>
      <scope>providedscope>
    dependency>
    
    <dependency>
      <groupId>org.mybatisgroupId>
      <artifactId>mybatisartifactId>
      <version>${mybatis.version}version>
    dependency>
    
    <dependency>
      <groupId>org.mybatisgroupId>
      <artifactId>mybatis-springartifactId>
      <version>${mybatis.spring.version}version>
    dependency>
    
    <dependency>
      <groupId>mysqlgroupId>
      <artifactId>mysql-connector-javaartifactId>
      <version>${mysql.version}version>
    dependency>
    
    <dependency>
      <groupId>com.alibabagroupId>
      <artifactId>druidartifactId>
      <version>${druid.version}version>
    dependency>
  dependencies>

  <build>
    
    <resources>
      <resource>
        <directory>src/main/javadirectory>
        <includes>
          <include>**/*.propertiesinclude>
          <include>**/*.xmlinclude>
        includes>
        <filtering>falsefiltering>
      resource>
      <resource>
        <directory>src/main/resourcesdirectory>
        <includes>
          <include>**/*.propertiesinclude>
          <include>**/*.xmlinclude>
        includes>
        <filtering>falsefiltering>
      resource>
    resources>

    
    <plugins>
      
      <plugin>
        <groupId>org.apache.maven.pluginsgroupId>
        <artifactId>maven-resources-pluginartifactId>
        <version>2.7version>
        <configuration>
          <encoding>UTF-8encoding>
        configuration>
      plugin>

      
      <plugin>
        <groupId>org.apache.maven.pluginsgroupId>
        <artifactId>maven-compiler-pluginartifactId>
        <version>3.2version>
        <configuration>
          <source>1.8source>
          <target>1.8target>
          <encoding>UTF-8encoding>
        configuration>
      plugin>

      
      <plugin>
        <groupId>org.apache.tomcat.mavengroupId>
        <artifactId>tomcat7-maven-pluginartifactId>
        <version>2.2version>
        <configuration>
          <port>8080port>
          <path>/path>
          <uriEncoding>UTF-8uriEncoding>
        configuration>
      plugin>

    plugins>
  build>



project>

Step 3:修改web.xml 文件(webapp/WEB-INF下),完成内容如下(所有的配置文件稍后会列出):

  • 初始化Spring容器

  <context-param>
    <param-name>contextConfigLocationparam-name>
    
    <param-value>classpath:spring/applicationContext-*.xmlparam-value>
  context-param>
  • 创建监听器,监听项目启动的时候初始化我们的Spring容器

  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListenerlistener-class>
  listener>
  • 创建一个Fliter,解决POST请求中文乱码问题(在pom.xml配置Tomcat插件是指定的UTF-8只能解决GET请求的乱码问题)

  <filter>
    <filter-name>CharacterEncodingFilterfilter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilterfilter-class>
    <init-param>
      <param-name>encodingparam-name>
      <param-value>utf-8param-value>
    init-param>
  filter>
  <filter-mapping>
    <filter-name>CharacterEncodingFilterfilter-name>
    <url-pattern>/*url-pattern>
  filter-mapping>
  • 创建DispatcherServlet(我们可以使用SpringMVC的基础)
  
  <servlet>
    <servlet-name>ssmdemo-servletservlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
    
    <init-param>
      <param-name>contextConfigLocationparam-name>
      <param-value>classpath:spring/springmvc.xmlparam-value>
    init-param>
    <load-on-startup>1load-on-startup>
  servlet>
  <servlet-mapping>
    <servlet-name>ssmdemo-servletservlet-name>
    <url-pattern>/url-pattern>
  servlet-mapping>
  • 完整的web.xml


<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://java.sun.com/xml/ns/javaee"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
         version="2.5">
  <display-name>Archetype Created Web Applicationdisplay-name>

  
  <context-param>
    <param-name>contextConfigLocationparam-name>
    <param-value>classpath:spring/applicationContext-*.xmlparam-value>
  context-param>

  
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListenerlistener-class>
  listener>

  
  <filter>
    <filter-name>CharacterEncodingFilterfilter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilterfilter-class>
    <init-param>
      <param-name>encodingparam-name>
      <param-value>utf-8param-value>
    init-param>
  filter>
  <filter-mapping>
    <filter-name>CharacterEncodingFilterfilter-name>
    <url-pattern>/*url-pattern>
  filter-mapping>

  
  <servlet>
    <servlet-name>ssmdemo-servletservlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
    
    <init-param>
      <param-name>contextConfigLocationparam-name>
      <param-value>classpath:spring/springmvc.xmlparam-value>
    init-param>
    <load-on-startup>1load-on-startup>
  servlet>
  
  <servlet-mapping>
    <servlet-name>ssmdemo-servletservlet-name>
    <url-pattern>/url-pattern>
  servlet-mapping>

web-app>

Step 4:在java下创建需要package(没有java请创建),方便稍后写配置文件

  • controller包
  • service包
  • mapper包
  • domain包

最详细的SSM(Spring + Spring MVC + MyBatis)项目搭建_第3张图片

Step 5:在resources(没有请创建)包下创建spring包,用来存放Spring相关的配置文件,创建springmvc.xml配置文件

  • 开启controller的扫描
  • 开启mvc的注解扫描
  • 配置转换器

最详细的SSM(Spring + Spring MVC + MyBatis)项目搭建_第4张图片


<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.demo.controller"/>

    
    <mvc:annotation-driven>
        
        <mvc:message-converters>
            <bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter"/>
        mvc:message-converters>
    mvc:annotation-driven>
beans>

Step 6:继续在spring文件下创建applicationContext-service.xml配置文件,配置service层的相关配置

  • 开启组件扫描

<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.demo.service"/>
beans>

Step 7:继续在spring文件夹下创建applicationContext-dao.xml配置文件,配置持久层相关配置

  • 在resources下创建properties文件夹,新建db.properties配置文件,配置连接数据库相关属性

最详细的SSM(Spring + Spring MVC + MyBatis)项目搭建_第5张图片

db.properties文件内容如下:
数据库连接驱动、url、用户名、密码

jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/webtest?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false
jdbc.username=root
jdbc.password=root
  • 在spring文件夹下创建applicationContext-dao.xml配置文件
    • 配置数据源
    • 配置sqlsession工厂(SqlMapConfig.xml稍后创建)
    • 配置mapper代理

applicationContext-dao.xml文件


<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:property-placeholder location="classpath:properties/db.properties"/>

    
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" destroy-method="close">
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}" />
        <property name="password" value="${jdbc.password}" />
        <property name="driverClassName" value="${jdbc.driver}" />
        <property name="maxActive" value="10" />
        <property name="minIdle" value="5" />
    bean>

    
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        
        <property name="dataSource" ref="dataSource"/>
        
        <property name="configLocation" value="classpath:mybatis/SqlMapConfig.xml"/>
    bean>

    
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.demo.mapper"/>
    bean>
beans>

Step 8:在resources文件夹下创建mybatis文件夹,存放mybatis相关配置,

创建SqlMapConfig.xml文件

最详细的SSM(Spring + Spring MVC + MyBatis)项目搭建_第6张图片

SqlMapConfig.xml



<configuration>
    
    <typeAliases>
        <package name="com.demo.domain"/>
    typeAliases>

configuration>

至此,resources文件夹下的内容配置完成,回到java文件夹下

Step 9:在com.demo.domain下创建User实体类

User.java

package com.demo.domain;

import java.io.Serializable;

/**
 * @author 11699
 * @date 20/3/27 - 16:53
 */
public class User implements Serializable {

    private String username;
    private String password;
    private String tel;
    private String email;
    private String name;

    //省略getter和setter方法
}

Step 10:在mapper文件下创建接口UserMapper,同时创建同名的UserMapper.xml文件,写一个简单的查询全部的方法

UserMapper接口

package com.demo.mapper;

import com.demo.domain.User;

import java.util.List;

/**
 * @author 11699
 * @date 20/3/27 - 16:57
 */
public interface UserMapper {

    List<User> findAll();
}

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

    <!--查询全部 id必须与接口的方法名对应-->
    <select id="findAll" resultType="com.demo.domain.User">
        select * from user
    </select>
</mapper>

Step 11:service下创建接口UserService,同时创建impl包,在impl包下创建UserServiceImpl类,扩展UserService接口

在接口中定义个查询全部的方法,并在实现类中实现此方法

UserService接口

package com.demo.service;

import com.demo.domain.User;

import java.util.List;

/**
 * @author 11699
 * @date 20/3/27 - 17:07
 */
public interface UserService {

    /**
     * 查找全部User
     * @return User
     */
    List<User> findAll();
}

UserServiceImpl实现类(不要忘记@Service注解)

package com.demo.service.impl;

import com.demo.domain.User;
import com.demo.mapper.UserMapper;
import com.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * @author 11699
 * @date 20/3/27 - 17:08
 */

//别忘了service注解哦
@Service
public class UserServiceImpl implements UserService {

    //注入UserMapper对象
    @Autowired
    private UserMapper mapper;


    @Override
    public List<User> findAll() {
        return mapper.findAll();
    }
}

Step 12:在controller下创建UserController类

package com.demo.controller;

import com.demo.domain.User;
import com.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * @author 11699
 * @date 20/3/27 - 17:12
 */
@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    @RequestMapping("/all")
    public List<User> findAll(){
        return userService.findAll();
    }
}

运行测试配置

最详细的SSM(Spring + Spring MVC + MyBatis)项目搭建_第7张图片
启动没有报错的话就可以在浏览器中测试访问:

http://localhost:8080/user/all

成功返回JSON串
最详细的SSM(Spring + Spring MVC + MyBatis)项目搭建_第8张图片

项目完整结构

最详细的SSM(Spring + Spring MVC + MyBatis)项目搭建_第9张图片

├─.idea
│  ├─codeStyles
│  ├─dictionaries
│  └─inspectionProfiles
├─src
│  └─main
│      ├─java
│      │  └─com
│      │      └─demo
│      │          ├─controller
│      │          ├─domain
│      │          ├─mapper
│      │          └─service
│      │              └─impl
│      ├─resources
│      │  ├─mybatis
│      │  ├─properties
│      │  └─spring
│      └─webapp
│          └─WEB-INF
└─target
    ├─apache-tomcat-maven-plugin
    ├─classes
    │  ├─com
    │  │  └─demo
    │  │      ├─controller
    │  │      ├─domain
    │  │      ├─mapper
    │  │      └─service
    │  │          └─impl
    │  ├─mybatis
    │  ├─properties
    │  └─spring
    ├─generated-sources
    │  └─annotations
    ├─maven-status
    │  └─maven-compiler-plugin
    │      └─compile
    │          └─default-compile
    └─tomcat
        ├─conf
        ├─logs
        ├─webapps
        └─work
            └─Tomcat
                └─localhost
                    └─_

源码下载

点击这里下载源码

你可能感兴趣的:(框架)