ssm整合思路【java】(超详细)个人总结

目录

 

一、SSM简介

1.MVC介绍?

2.整合版本要求。

二、SSM整合实例

1.创建Maven Web项目。

step1:新建模块。

step2:点击下一个,构建坐标。

step3:点击完成,添加web框架的支持。

step4:检查项目结构,是否符合下图:

2.导入依赖。

3.创建数据库表和编写相关查询语句

4.根据这些语句编写实体类代码。

5.编写配置文件及资源文件

6.整合Mybatis与Spring。

7.JUnit测试。

8.整合SpringMVC。

1.配置Spring-mvc.xml

2.配置web.xml文件

3.编写视图层页面。

4.根据视图层编写控制层代码。

5.启动服务器进行测试是否整合成功。

三、SSM总结

如有不足,欢迎指正!


一、SSM简介

SSM(Spring+SpringMVC+MyBatis)框架集由Spring、SpringMVC、MyBatis三个开源框架整合而成,常作为数据源较简单的web项目的框架。

其中Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。

SpringMVC分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。

MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架。

1.MVC介绍?

MVC:全名Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。

通俗解释:一种文件的组织和管理形式!不要被缩写吓到了,这其实就是把不同类型的文件放到不同目录下的一种方法,然后取了个高大上的名字。当然,他带来的好处有很多,比如前后端分离,松耦合等等,就不详细说明了。

模型(model):数据持久层,即我们常用的Dao层,CRUD操作。同时需要配合Service层,处理详细的业务逻辑。

视图(View):前端展示数据,提供链发起Service请求,例如a,form,img...等。

控制器(Controller):接收用户的请求:req-请求参数、Session信息等,并把这些请求数据交给业务层进行处理相应代码,同时控制视图的跳转。

如图所示理解MVC:

ssm整合思路【java】(超详细)个人总结_第1张图片

2.整合版本要求。

导入的依赖一定要满足上图版本要求,不然运行项目时会出现各种报错!

二、SSM整合实例

1.创建Maven Web项目。

step1:新建模块。

ssm整合思路【java】(超详细)个人总结_第2张图片

step2:点击下一个,构建坐标。

ssm整合思路【java】(超详细)个人总结_第3张图片

step3:点击完成,添加web框架的支持。

ssm整合思路【java】(超详细)个人总结_第4张图片  ssm整合思路【java】(超详细)个人总结_第5张图片

step4:检查项目结构,是否符合下图:

ssm整合思路【java】(超详细)个人总结_第6张图片

如果存在,那就ok了,开始我们的项目配置工作。

2.导入依赖。

这里需要注意导入的依赖的版本要按照整合版本的要求来,这里我使用的是最新版本要求。

Spring  5.3.3

SpringMVC 5.3.3

Mybatis  3.5.2



    4.0.0

    com.luo
    SSM-Demo
    1.0-SNAPSHOT
    
        
            
                org.apache.maven.plugins
                maven-compiler-plugin
                
                    6
                    6
                
            
        
        
            
                
                    src/main/resources
                    
                        **/*.properties
                        **/*.xml
                    
                    false
                
                
                    src/main/java
                    
                        **/*.properties
                        **/*.xml
                    
                    false
                
            
    
    

        
        
        
            junit
            junit
            4.13
        
        
        
            org.projectlombok
            lombok
            1.18.12
        
        
        
            commons-fileupload
            commons-fileupload
            1.3.1
        
        
        
        
            com.fasterxml.jackson.core
            jackson-databind
            2.12.1
        
        



        
        
        
            org.springframework
            spring-webmvc
            5.3.3
        
        
            org.springframework
            spring-jdbc
            5.3.3
        
        
            org.springframework
            spring-context-support
            5.3.3
        
        
            org.springframework
            spring-test
            5.3.3
        

        
            javax.annotation
            javax.annotation-api
            1.3.2
        
        
        
            org.apache.geronimo.bundles
            aspectjweaver
            1.6.8_2
        
        
        
            javax.servlet
            javax.servlet-api
            4.0.1
        
        
            javax.servlet.jsp
            javax.servlet.jsp-api
            2.3.3
        
        


        
        
            mysql
            mysql-connector-java
            8.0.22
        
        
            org.mybatis
            mybatis
            3.5.2
        
        
        
            org.mybatis
            mybatis-spring
            2.0.6
        
        


        
        
        
        
        
            org.apache.logging.log4j
            log4j-api
            2.11.0
        
        
        
            org.apache.logging.log4j
            log4j-core
            2.11.0
        
        
        
            org.apache.logging.log4j
            log4j-web
            2.11.0
        
        
        
            javax.mail
            mail
            1.4.5 
        
        
            com.lmax
            disruptor
            3.4.2
        
        
            org.junit.jupiter
            junit-jupiter
            RELEASE
            compile
        
    


    

3.创建数据库表和编写相关查询语句

# 创建一个简单的用户表
CREATE TABLE `user_t` (
  `id` int NOT NULL AUTO_INCREMENT,
  `user_name` varchar(255) NOT NULL,
  `password` varchar(255) NOT NULL,
  `age` int NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8;

-- 下面语句在Mybatis中使用即可
# 查询所有用户
 select * from user_t;
 
#根据id查询用户
  select * from ssm_test.user_t where id=#{userId};
 
#新增名字不重复的用户,前提表中至少有一条数据
  insert into ssm_test.user_t(user_name,password,age)
        (select #{user_name},#{password},#{age} from ssm_test.user_t
            where not exists(
                select * from ssm_test.user_t where user_name=#{user_name}
                )
        limit 1);

4.根据这些语句编写实体类代码。

这里推荐一下 IDEA快速实现接口、查找接口的实现、getSet方法快速生成等等常用快捷键这篇文章,方便快速开发。

ssm整合思路【java】(超详细)个人总结_第7张图片

User.class

package com.luo.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;

@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class User {
    private String user_name;
    private String password;
    private int age;
}

这里我使用了lombok,它是相当于一个插件,与类里的注解配合使用,简便的省去写set,get啥的实体类的东西。

它的使用步骤如下:

  1. 在IDEA中安装Lombok插件

  2. 在项目中导入lombok的jar包

  3. 在实体类中可使用下面常用的注解:

 

ssm整合思路【java】(超详细)个人总结_第8张图片

使用这个插件的优缺点:

  • 优点: 1.能通过注解的形式自动生成构造器、getter/setter. equals、 hashcode. toString等方法, 提高了一定的开发效率 2.让代码变得简洁,不用过多的去关注相应的方法 3.属性做修改时,也简化了维护为这些属性所生成的getter/setter方法等

  • 缺点: 1.不支持多种参数构造器的重载 2.虽然省去了手动创建getter/setter方法的麻烦,但大大降低了源代码的可读性和完整性,降低了阅读源代码的舒适度

5.编写配置文件及资源文件

ssm整合思路【java】(超详细)个人总结_第9张图片

首先创建db.properties,这设置了连接数据库的所需参数的资源信息。

username = 
password = 
url = jdbc:mysql://localhost:3306/ssm_test?useUnicode=true&characterEncoding=utf8&useSSL=true&serverTimezone=UTC
driver = com.mysql.cj.jdbc.Driver

#定义初始连接数
initialSize = 0
#定义最大连接数
maxActive = 20
#定义最大空间
maxIdle = 20
#定义最小空间
minIdle = 1
#定义最长等待时间
maxWait = 60000

然后在spring-mybatis.xml中引用,实现JDBC连接,同时此文件设置日志模式及spring与mybatis整合:




    

    

    

    
        
        
        
        
    

    
       
       
           
               LOG4J2
               true
           
       
        
    

    
        
        
    

    
        
    

    
        
        
    

由于在此设置了log4j2的日志模式,所以我们需要导入log4j2.xml文件,便于我们每次调试程序生成相关日志文件:

百度百科:为了方便调试,一般都会使用日志来输出信息,Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。为了方便调试,一般都会使用日志来输出信息,Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。

关于如果设置了log4j的日志模式,那么我们可以使用这篇文章的配置:http://www.blogjava.net/zJun/archive/2006/06/28/55511.html







    
        
        
        log

        
        
        ${logFileName}
        
        
        
        

        
        %d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] %l - %m%n
        
        
        
        %d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] %C.%M[%L line] - %m%n

        
        20MB
        
        DEBUG

        
        
        ${basePath}/all.log
        
        ${basePath}/%d{yyyy-MM}/all-%d{yyyy-MM-dd-HH}-%i.log.gz
        
        500
        
        12
        
        true

        
        
        ${basePath}/info.log
        
        ${basePath}/%d{yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log.gz
        
        100
        
        12
        
        true

        
        
        ${basePath}/warn.log
        
        ${basePath}/%d{yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log.gz
        
        100
        
        12
        
        true

        
        
        ${basePath}/error.log
        
        ${basePath}/%d{yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log.gz
        
        100
        
        12
        
        true

        
        
        DEBUG

    

    
    
        
        
            
            
            
            
        

        
        
            
            
                
                
            
            
            
        

        
        
            
            
                
                
            
            
            
                
                
            
        

        
        
            
            
                
                
            
            
            
                
                
            
        

        
        
            
            
                
                
            
            
            
                
                
            
        
    

    
    
        
        
        
            
        
        
        
            
        
        
        
            
        
        
        
            
        
        

        
        
            
            
            
            
            
        
    

applicationContext.xml中导入spring-mybatis.xml文件,创建这个文件的作用目的是为了方便以后的多人开发,同时便于AOP编程:





    
    
    
        
    

    
    
        
            
            
        
    

    
    
        
    


 

6.整合Mybatis与Spring。

由于spring-mybatis.xml配置文件中,我们已经设置支持了注解驱动,那么我们可以现在编写如下目录下的几个类了:

ssm整合思路【java】(超详细)个人总结_第10张图片

由于之前我们已经完成了User.class文件的编写,那么我们现在只需要创建UserDao接口及mappper映射文件了:

UserDao.class:

package com.luo.dao;

import com.luo.pojo.User;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public interface UserDao {

    //根据主键查找用户
    User selectByPrimaryKey(int userId);

    //查找所有用户
    List selectAllUser();

    //增加用户
    void addUser(User user);

}

UserMapper.xml:




    
    
    
        insert into ssm_test.user_t(user_name,password,age)
        (select #{user_name},#{password},#{age} from ssm_test.user_t
            where not exists(
                select * from ssm_test.user_t where user_name=#{user_name}
                )
        limit 1);
    

由于更好的去实现业务,我们需要建立Service接口和实现类,对单元测试的支持,通过单独的一层service实现业务逻辑,那么对于业务逻辑的单元测试会更容易编写,只需要对service来编写就可以了;而web层的单元测试就不需要关注业务本身,只需要关注反馈格式就行了;不然web层就既要考虑业务逻辑的计算,还要考虑web反馈的格式验证,太过复杂。

UserService.class:

package com.luo.service;

import com.luo.pojo.User;

import java.util.List;

public interface UserService {
    //根据主键查找用户
    User selectByPrimaryKey(int userId);

    //查找所有用户
    List selectAllUser();

    //增加用户
    void addUser(User user);
}

UserServiceImp.class:

package com.luo.service;

import com.luo.dao.UserDao;
import com.luo.pojo.User;
import org.springframework.stereotype.Service;

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

@Service("UserService")
public class UserServiceImp  implements UserService{
    @Resource
    private UserDao userDao;

    @Override
    public User selectByPrimaryKey(int userId) {
        return this.userDao.selectByPrimaryKey(userId);
    }

    @Override
    public List selectAllUser() {
        return this.userDao.selectAllUser();
    }

    @Override
    public void addUser(User user) {
        this.userDao.addUser(user);
    }
}

7.JUnit测试。

测试类在src/test/java中建立使用注解的方式来引入配置文件和类,然后再将service接口对象注入,就可以进行测试了。如果测试成功,表示Spring和Mybatis已经整合成功了。输出信息使用的是Log4j打印到控制台。

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.luo.pojo.User;
import com.luo.service.UserService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import javax.annotation.Resource;


@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:applicationContext.xml"})
public class TestMyBatis {

   @Resource
   private UserService userService;
   @Test
    public void test1() throws JsonProcessingException {
      ObjectMapper mapper = new ObjectMapper();
       User user = userService.selectByPrimaryKey(1);
       System.out.println(mapper.writeValueAsString(user));
   }
}

控制台输出如下:

ssm整合思路【java】(超详细)个人总结_第11张图片

这是生成的日志文件:

至此,完成Spring和Mybatis这两大框架的整合,下面再继续进行SpringMVC的整合。

8.整合SpringMVC。

1.配置Spring-mvc.xml

配置里面的注释很详细,在此就不说了,主要是自动扫描控制器,视图模式,注解的启动这三个。




    
    

    
    

    
    
        
            
            
                
            
            
                
                    
                        
                    
                
            
            
            
                
                    
                        text/html;charset=UTF-8
                    
                
            
        
    

    
    

        
        
        
        
    

    
    
        
        
        
        
        
    

2.配置web.xml文件

ssm整合思路【java】(超详细)个人总结_第12张图片




    
    
        springmvc
        org.springframework.web.servlet.DispatcherServlet
        
            contextConfigLocation
            classpath:spring-mvc.xml
        
        1
        true
    
    
        springmvc
        /
    
    
    
    
        contextConfigLocation
        classpath:applicationContext.xml
    

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

    
    
        org.apache.logging.log4j.web.Log4jServletContextListener
    
    
        log4jServletFilter
        org.apache.logging.log4j.web.Log4jServletFilter
    
    
        log4jServletFilter
        /*
        REQUEST
        FORWARD
        INCLUDE
        ERROR
    

    
    
        org.springframework.web.context.ContextLoaderListener
    
    
    
        org.springframework.web.util.IntrospectorCleanupListener
    

3.编写视图层页面。

在jsp文件夹下:showUser.jsp

<%@ page import="com.luo.pojo.User" %>
<%@ page import="java.util.List" %><%--
  Created by IntelliJ IDEA.
  User: Luo
  Date: 2021/2/23
  Time: 16:42
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>


    查看用户
    
    


Hello World!

用户输入

用户名:
年  龄:
密  码:

<% List list = (List)request.getAttribute("users"); for (User user : list) { %> <% } %>
用户名 年龄 密码
<%=user.getUser_name()%> <%=user.getAge()%> <%=user.getPassword()%>

4.根据视图层编写控制层代码。

ssm整合思路【java】(超详细)个人总结_第13张图片

package com.luo.controller;

import com.luo.pojo.User;
import com.luo.service.UserService;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import javax.annotation.Resource;

@Controller
public class UserShow {
    @Resource
    private UserService userService;

    //根据Restful风格通过地址栏查询用户
    @RequestMapping("/user/{id}")
    public String test(Model model, @PathVariable int id){
        return "showUser";
    }

    //进入页面查询所有用户
    @RequestMapping("/user/login")
    public String test1(Model model){
        model.addAttribute("users",this.userService.selectAllUser());
        System.out.println(model.getAttribute("users"));
        return "showUser";
    }

    //新增用户数据刷新页面
    @RequestMapping("/user/add")
    public String test2(String username, int age, String password, ModelAndView mv,Model model){
        User user = new User(username,password,age);
        this.userService.addUser(user);
        return test1(model);
    }

}

5.启动服务器进行测试是否整合成功。

ssm整合思路【java】(超详细)个人总结_第14张图片

启动成功!!!如果没有启动成功,可能是你Build的时候没有添加所需库。按照如下操作即可:

ssm整合思路【java】(超详细)个人总结_第15张图片ssm整合思路【java】(超详细)个人总结_第16张图片

打开浏览器进入首页,点击跳转:


ssm整合思路【java】(超详细)个人总结_第17张图片

点击提交,页面刷新,表中数据增加,同时数据库中数据增加,不会出现重复用户:

ssm整合思路【java】(超详细)个人总结_第18张图片

至此,三大框架的整合就完成了,在此基础上也可以很容易的添加其他功能。

三、SSM总结

ssm 是 Spring 、SpringMVC 、Mybatis 的结合, Spring 相当于在 SpringMVC 与 Mybatis 之间的桥梁。其中 SpringMVC 相当于传统的 service+model+servlet 。结合注解进行开发,使整个开发高效代码量大大的减少。Mybatis 负责数据库的数据交换,不用自己写 SQL 语句防止了 SQL 注入问题发生,而且相比于 python中的Django框架, 他非常的轻,dao 与 model 直接自动生成大大减少了多表开发的时间,因此 ssm 是非常优秀的后台框架。

如有不足,欢迎指正!

你可能感兴趣的:(学习,java,ssm,dbcp)