SSM整合案例【C站讲解最详细流程的案例】

一、需求分析

接下来我们使用Maven+Spring+MyBatis+SpringMVC完成一个案例,案例需求为在页面可以进行添加学生+查询所有学生!其他小功能如果有想法的读者可以自行添加,作者有更重要的事情需要做哦。

1.1 使用到的技术

  1. 使用Maven创建聚合工程,并使用Maven的tomcat插件运行工程
  2. 使用Spring的IOC容器管理对象
  3. 使用MyBatis操作数据库
  4. 使用Spring的声明式事务进行事务管理
  5. 使用SpringMVC作为控制器封装Model并跳转到JSP页面展示数据
  6. 使用Junit测试方法
  7. 使用Log4j在控制台打印日志

1.2 确定项目流程 

  1. 创建maven父工程,添加需要的依赖和插件
  2. 创建dao子工程,配置MyBatis操作数据库,配置Log4j在控制台打印日志。
  3. 创建service子工程,配置Spring声明式事务
  4. 创建controller子工程,配置SpringMVC作为控制器,编写JSP页面展示数据。
  5. 每个子工程都使用Spring进行IOC管理

1.3 准备数据库数据 

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for student
-- ----------------------------
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student`  (
  `id` int NOT NULL AUTO_INCREMENT,
  `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `sex` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `address` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 10 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of student
-- ----------------------------
INSERT INTO `student` VALUES (1, '几何心凉', '男', '北京');
INSERT INTO `student` VALUES (2, '哈士奇', '女', '上海');
INSERT INTO `student` VALUES (3, 'SXT', '女', '上海');
INSERT INTO `student` VALUES (4, '利比亚', '男', '广州');

SET FOREIGN_KEY_CHECKS = 1;

二、创建父工程

创建maven父工程mvc_demo4,下面是添加需要的依赖和插件,算了直接放上pom.xml文件




  4.0.0

  com.example
  mvc_demo4
  1.0-SNAPSHOT
  
    ssm_dao
    ssm_service
    ssm_controller
  
  pom

  mvc_demo4 Maven Webapp
  
  https://www.example.com

  
    
    5.2.12.RELEASE
    UTF-8
    1.7
    1.7
  

  
    
    
      org.mybatis
      mybatis
      3.5.7
    
    
    
      mysql
      mysql-connector-java
      8.0.27
    
    
    
      com.alibaba
      druid
      1.2.8
    
    
    
      org.mybatis
      mybatis-spring
      2.0.6
    
    
      org.springframework
      spring-jdbc
      ${spring.version}
    
    
    
      org.springframework
      spring-context
      ${spring.version}
    
    
      org.springframework
      spring-web
      ${spring.version}
    
    
      org.springframework
      spring-webmvc
      ${spring.version}
    
    
    
      org.springframework
      spring-tx
      ${spring.version}
    
    
      org.aspectj
      aspectjweaver
      1.8.7
    
    
    
      org.apache.taglibs
      taglibs-standard-spec
      1.2.5
    
    
      org.apache.taglibs
      taglibs-standard-impl
      1.2.5
    
    
    
      javax.servlet
      servlet-api
      2.5
      provided
    
    
    
      javax.servlet.jsp
      jsp-api
      2.0
      provided
    
    
    
      junit
      junit
      4.12
      test
    
    
      org.springframework
      spring-test
      ${spring.version}
    
    
    
      log4j
      log4j
      1.2.12
    
  

  
    
      
      
        org.apache.tomcat.maven
        tomcat7-maven-plugin
        2.1
        
          8080
          /
          UTF-8
          tomcat7
          
            %1$tH:%1$tM:%1$tS%2 $s%n%4$s: %5$s%6$s%n
            
          
        
      
    
  

三、创建dao工程

3.1 在父工程下创建maven普通java子工程ssm_dao

目录结构如下图:

SSM整合案例【C站讲解最详细流程的案例】_第1张图片

3.2 实体类

Student.java

package com.example.pojo;

public class Student {
    private int id;
    private String name;
    private String sex;
    private String address;

    public Student() {
    }

    public Student(int id, String name, String sex, String address) {
        this.id = id;
        this.name = name;
        this.sex = sex;
        this.address = address;
    }

    public int getId() {
        return id;
    }

    public void setId(int 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 String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "Student [ " +
                "id=" + id +
                ", name='" + name + '\'' +
                ", sex='" + sex + '\'' +
                ", address='" + address + '\'' +
                " ]";
    }
}

3.3 持久层接口

StudentDao.java

package com.example.dao;

import com.example.pojo.Student;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;

import java.util.List;

public interface StudentDao {
    // 查询所有学生
    @Select("select * from student")
    List findAll();

    // 添加学生
    @Insert("insert into student values(null,#{name},#{sex},#{address})")
    void add(Student student);
}

3.4 log4j.properties配置文件

这里有这个日志文件是为了控制输出的时候可以更加直观感受到我们操作流程:

log4j.rootCategory=debug, CONSOLE, LOGFILE
log4j.logger.org.apache.axis.enterprise=FATAL, CONSOLE
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=[%d{MM/dd HH:mm:ss}] %-6r [%15.15t] %-5p %30.30c %x - %m\n

3.5 数据库配置文件druid.properties

jdbc.driverClassName=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql:///student
jdbc.username=自己用户名
jdbc.password=自己密码

3.6 MyBatis配置文件SqlMapConfig.xml

因为我这里功能不多,就没有使用配置文件开发,只是用了注解,但也放了一个模板在这里





3.7 Spring配置文件applicationContext-dao.xml




    
    

    
    
        
        
        
        
    

    
    
        
        
    

    
    
        
    

3.8 测试持久层接口方法

测试类:

import com.example.dao.StudentDao;
import com.example.pojo.Student;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import java.util.List;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:applicationContext-dao.xml")
public class StudentDaoTest {
    @Autowired
    private StudentDao studentDao;

    @Test
    public void testFindAll(){
        List all = studentDao.findAll();
        all.forEach(System.out::println);
    }

    @Test
    public void testAdd(){
        Student student = new Student(0,"SXT","女","上海");
        studentDao.add(student);
    }
}

3.8.1 测试查询所有用户

SSM整合案例【C站讲解最详细流程的案例】_第2张图片

OK,测试成功,接着下一步 

3.8.2 测试添加用户

SSM整合案例【C站讲解最详细流程的案例】_第3张图片

OK,测试成功,接着下一步 

四、创建service工程

4.1 在父工程下创建maven普通java子工程ssm_service

工程目录结构图:

SSM整合案例【C站讲解最详细流程的案例】_第4张图片

4.2 引入依赖

    
        
            com.example
            ssm_dao
            1.0-SNAPSHOT
        
    

4.3 创建服务层方法

StudentService.java

package com.example.service;

import com.example.dao.StudentDao;
import com.example.pojo.Student;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class StudentService {
    @Autowired
    private StudentDao studentDao;

    public List findAllStudent(){
        return studentDao.findAll();
    }

    public void addStudent(Student student){
        studentDao.add(student);
    }
}

4.4 创建配置文件applicationContext-service.xml

虽然说本项目需求较少,但是该有的配置我们都得整一个,巩固一下也好




    
    

    
    
        
    

    
    
        
            
        
    

    
    
        
    

五、创建controller工程

5.1 在父工程下使用maven创建web类型子工程ssm_controller

目录结构图如下:

SSM整合案例【C站讲解最详细流程的案例】_第5张图片

5.2 引入依赖

controller工程引入service子工程的依赖,并配置ssm父工程

  
    mvc_demo4
    com.example
    1.0-SNAPSHOT
  

  
    
      com.example
      ssm_service
      1.0-SNAPSHOT
    
  

5.3 控制器类

package com.example.controller;

import com.example.pojo.Student;
import com.example.service.StudentService;
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 java.util.List;

@RequestMapping("/student")
@Controller
public class StudentController {
    @Autowired
    private StudentService studentService;

    @RequestMapping("/all")
    public String all(Model model){
        List allStudent = studentService.findAllStudent();
        model.addAttribute("students",allStudent);
        return "allStudent";
    }

    @RequestMapping("add")
    public String add(Student student){
        studentService.addStudent(student);
        // 重定向到查询所有学生
        return "redirect:/student/all";
    }
}

5.4 SpringMVC配置文件springmvc.xml




    
    

    
    
        
        
    

    
    

    
    

5.5 Spring的总配置文件applicationContext.xml

Spring的总配置文件applicationContext.xml,该文件引入dao和service层的Spring配置文件




    
    

5.6 web.xml中进行配置

在web.xml中配置Spring监听器,该监听器会监听服务器启动,并自动创建Spring的IOC容器,并配置SpringMVC的前端控制器和编码过滤器




  
  Archetype Created Web Application
  
  
  
    org.springframework.web.context.ContextLoaderListener
  

  
    contextConfigLocation
    classpath:applicationContext.xml
  

  
  
    dispatchServlet
    org.springframework.web.servlet.DispatcherServlet
    
      contextConfigLocation
      classpath:springmvc.xml
    
    1
  
  
    dispatchServlet
    /
  

  
  
    encFilter
    org.springframework.web.filter.CharacterEncodingFilter
    
      encoding
      utf-8
    
  
  
    encFilter
    /*
  

5.7 JSP页面allStudent.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>


    所有学生



    
    
姓名:
性别:
地址:
id 姓名 性别 地址
${studnet.id} ${studnet.name} ${studnet.sex} ${studnet.address}

5.8 运行项目

我们直接访问http://localhost:8080/allStudent.jsp即可

SSM整合案例【C站讲解最详细流程的案例】_第6张图片

我们可以看到的页面是这样的,因为此时下方表格没有传入参数,因此就没有数据,但是只要我们对上方的输入框输入数据提交添加用户就可以刷新下方表格了。

SSM整合案例【C站讲解最详细流程的案例】_第7张图片

OK,本次专栏就到此告一段落了,希望该专栏可以给各位读者有所帮助,这篇文章也是我写过最长的一篇文章,但绝对是最详细的。

往期专栏&文章相关导读 

     大家如果对于本期内容有什么不了解的话也可以去看看往期的内容,下面列出了博主往期精心制作的Maven,Mybatis等专栏系列文章,走过路过不要错过哎!如果对您有所帮助的话就点点赞,收藏一下啪。其中Spring专栏有些正在更,所以无法查看,但是当博主全部更完之后就可以看啦。

1. Maven系列专栏文章

Maven系列专栏 Maven工程开发
Maven聚合开发【实例详解---5555字】

2. Mybatis系列专栏文章

Mybatis系列专栏 MyBatis入门配置
Mybatis入门案例【超详细】
MyBatis配置文件 —— 相关标签详解
Mybatis模糊查询——三种定义参数方法和聚合查询、主键回填
Mybatis动态SQL查询 --(附实战案例--8888个字--88质量分)
Mybatis分页查询——四种传参方式
Mybatis一级缓存和二级缓存(带测试方法)
Mybatis分解式查询
Mybatis关联查询【附实战案例】
MyBatis注解开发---实现增删查改和动态SQL
MyBatis注解开发---实现自定义映射关系和关联查询

3. Spring系列专栏文章

Spring系列专栏 Spring IOC 入门简介【自定义容器实例】
IOC使用Spring实现附实例详解
Spring IOC之对象的创建方式、策略及销毁时机和生命周期且获取方式
Spring DI简介及依赖注入方式和依赖注入类型
Spring IOC相关注解运用——上篇
Spring IOC相关注解运用——下篇
Spring AOP简介及相关案例
注解、原生Spring、SchemaBased三种方式实现AOP【附详细案例】
Spring事务简介及相关案例
Spring 事务管理方案和事务管理器及事务控制的API
Spring 事务的相关配置、传播行为、隔离级别及注解配置声明式事务

4. Spring MVC系列专栏文章    

SpringMVC系列专栏 Spring MVC简介附入门案例
Spring MVC各种参数获取及获取方式自定义类型转换器和编码过滤器
Spring MVC获取参数和自定义参数类型转换器及编码过滤器
Spring MVC处理响应附案例详解
Spring MVC相关注解运用 —— 上篇

Spring MVC相关注解运用 —— 中篇

Spring MVC相关注解运用 —— 下篇
Spring MVC多种情况下的文件上传
Spring MVC异步上传、跨服务器上传和文件下载
Spring MVC异常处理【单个控制异常处理器、全局异常处理器、自定义异常处理器】
Spring MVC拦截器和跨域请求
SSM整合案例【C站讲解最详细流程的案例】

你可能感兴趣的:(ssm框架,#,Spring,MVC,java,maven,spring,mybatis,mvc)