SSM框架——干净详细的整合学习教程(Spring+SpringMVC+MyBatis)

一、SpringMVC概述

熟悉MVC的同学都知道,MVC即model(模型)、view(视图)、controller(控制),用一种业务逻辑,数据,界面显示分离的方式使得开发更加的便捷高效,具有低耦合,高重用性,可维护性等优点。 因此,SpringMVC分为用户界面层(view)web层(controller)领域模型层(model)用户界面层:有两个重要的接口 org.springframework.web.servlet.View接口呈现了web应用程序的视图或者页面,它负责将客户端请求操作的结果转化为一个客户端可见的表单。通俗的讲就是页面的展示,springmvc支持了JSP、Freemarker、Velocity、XSTL、JasperReport、Excel和PDF。 org.springframework.web.servlet.viewResolver提供了一个间接层,ViewResolver提供了视图实例与逻辑名称的映射。 例如,一个文件名为/WEB-INF/jsp/success.jsp的jsp页面,通过”success”名称被引用,使得视图和代码引用解耦。 web层:关键词Controller、ModelAndView springmvc提供了一个org.springframework.web.servlet.mvc.Controller接口及其他。Controller负责接收HttpServletRequest和HttpServletResponse,将请求导航到指定路径的方法中,并且组装了一个ModelAndView,包含了一个相应所有数据的map以及一个view的名称引用。 领域模型层:是客户和系统交互的对象模型 采用ORM框架使得对象模型与数据库对象关系进行映射交互,也就是我们理解的POJO对象,此片文章采用mybatis的ORM框架

Spring Web MVC处理请求的流程

二、MyBatis概述

MyBatis 是支持普通 SQL查询,存储过程和高级映射的优秀持久层框架。 MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。 MyBatis 使用简单的 XML或注解用于配置和原始映射,将接口和 Java 的POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。 Mybatis分为三层:

  1. API接口层:提供给外部使用的接口API,开发人员通过这些本地API来操纵数据库。接口层一接收到调用请求就会调用数据处理层来完成具体的数据处理。
  2. 数据处理层:负责具体的SQL查找、SQL解析、SQL执行和执行结果映射处理等。它主要的目的是根据调用的请求完成一次数据库操作。
  3. 基础支撑层:负责最基础的功能支撑,包括连接管理、事务管理、配置加载和缓存处理,这些都是共用的东西,将他们抽取出来作为最基础的组件。为上层的数据处理层提供最基础的支撑。

三、项目构建过程及代码实现

环境需求:

1、Eclipse 1、Java JDK、JRE1.7 2、Tomcat7.0

1、Maven项目创建

Next

Next

maven-archetype-webapp

Group Id和Artifact Id任意填写--->Finish

创建完成项目会发下index.jsp报错

maven 构建web项目index.jsp报错问题解决

解决办法:   JSP页面顶端出现“红色”的报错信息:The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path。原来Javaweb工程类中没有添加Tomcat运行时相关类导致。 下面是具体的解决方法: 1、右击web工程—>属性或Build Path—>Java Build Path—>Libraries—> Add Libray...—>Server Runtime —>Tomcat Server—>Finish

添加后就出现Tomcat7.0,此处我用的是7.0

2、切换到Java Build Path界面中的Orader and Export,选择Tomcat,报错就没有了。 注意:按以上方法操作时,若打开Server Runtime后一片空白,需要设置Apache服务器。设置方法为:window->Preferences->Server->Runtime Environment -> add --> 选择Apache的版本后点Next,再填入你apache服务器软件的安装(解压后)地址。

2、代码配置文件

项目demo所有文件

1、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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.creed.asset</groupId>
<artifactId>asset_wq_ssm</artifactId>
<packaging>war</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>asset_wq_ssm Maven Webapp</name>
<url>http://maven.apache.org</url>
  <properties>
    <!-- spring版本号 -->
    <spring.version>4.0.2.RELEASE</spring.version>
    <!-- mybatis版本号 -->
    <mybatis.version>3.2.6</mybatis.version>
    <!-- log4j日志文件管理包版本 -->
    <slf4j.version>1.7.7</slf4j.version>
    <log4j.version>1.2.17</log4j.version>
</properties>
 
<dependencies>
<!-- 表示开发的时候引入,发布的时候不会加载此包 -->
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.12</version>
    <scope>test</scope>
</dependency>

<!-- hibernate验证器 -->
<dependency>
    <groupId>org.hibernate</groupId>
       <artifactId>hibernate-validator</artifactId>
       <version>5.4.1.Final</version>
</dependency>
    
<!-- Gson -->
<dependency>  
      <groupId>com.google.code.gson</groupId>  
      <artifactId>gson</artifactId>  
      <version>2.2.2</version>  
</dependency>
    
<!-- spring核心包 -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>${spring.version}</version>
    </dependency>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
         <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-oxm</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-tx</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-webmvc</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aop</artifactId>
        <version>${spring.version}</version>
    </dependency>
    
     <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>${spring.version}</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context-support</artifactId>
        <version>${spring.version}</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-test</artifactId>
        <version>${spring.version}</version>
    </dependency>
    
    <!-- pageHelper -->
    <dependency>
        <groupId>com.github.pagehelper</groupId>
        <artifactId>pagehelper</artifactId>
        <version>4.2.1</version>
    </dependency>
    
    <!-- mybatis核心包 -->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>${mybatis.version}</version>
    </dependency>
    <!-- mybatis/spring包 -->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis-spring</artifactId>
        <version>1.2.2</version>
    </dependency>
    <!-- 导入java ee jar 包 -->
    <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-api</artifactId>
        <version>7.0</version>
    </dependency>
    <!-- 导入Mysql数据库链接jar包 -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.30</version>
    </dependency>
    <!-- 导入dbcp的jar包,用来在applicationContext.xml中配置数据库 -->
    <dependency>
        <groupId>commons-dbcp</groupId>
        <artifactId>commons-dbcp</artifactId>
        <version>1.2.2</version>
    </dependency>
    <!-- JSTL标签类 -->
    <dependency>
        <groupId>jstl</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
    </dependency>
    
    <!-- 日志文件管理包 -->
    <!-- log start -->
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>${log4j.version}</version>
    </dependency>
    <!-- 格式化对象,方便输出日志 -->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>fastjson</artifactId>
        <version>1.2.27</version>
    </dependency>

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>${slf4j.version}</version>
    </dependency>

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>${slf4j.version}</version>
    </dependency>
    <!-- log end -->
    
    <!-- 映入JSON -->
    <dependency>
        <groupId>org.codehaus.jackson</groupId>
        <artifactId>jackson-mapper-asl</artifactId>
        <version>1.9.13</version>
    </dependency>
    
    <!-- 上传组件包 -->
    <dependency>
        <groupId>commons-fileupload</groupId>
        <artifactId>commons-fileupload</artifactId>
        <version>1.3.1</version>
    </dependency>
    <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>2.4</version>
    </dependency>
    <dependency>
        <groupId>commons-codec</groupId>
        <artifactId>commons-codec</artifactId>
        <version>1.9</version>
    </dependency>       
</dependencies>
<build>
  <finalName>asset_wq_ssm</finalName>
</build>
</project>

2、web.xml

<?xml version="1.0" encoding="UTF-8"?>
<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_3_0.xsd"
version="3.0">

<display-name>Archetype Created Web Application</display-name>
<!-- Spring和mybatis的配置文件 -->
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:spring-mybatis.xml</param-value>
</context-param>    

<!-- 编码过滤器 -->
<filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <async-supported>true</async-supported>
    <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>

<!-- Spring监听器 -->
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<!-- 防止Spring内存溢出监听器 --> 
<listener>
    <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
</listener> 

<!-- Spring MVC servlet -->
 <servlet>
    <servlet-name>SpringMVC</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring-mvc.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
    <async-supported>true</async-supported>
</servlet>
<servlet-mapping>
    <servlet-name>SpringMVC</servlet-name>
    <!-- 此处配置请求的格式  -->
    <url-pattern>/asset/*</url-pattern>
</servlet-mapping>  

<welcome-file-list>
    <welcome-file>/index.jsp</welcome-file>
</welcome-file-list>

<!-- 配置SESSION超时,单位是分钟 -->
<session-config>
    <session-timeout>60</session-timeout>
</session-config>
</web-app>

3、index.jsp

<%@ page language="java" contentType="text/html; charset=Utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Utf-8">

<title>查询用户</title>
</head>
<body>
<script language="JavaScript">
    window.location.href = "<%=request.getContextPath()%>/asset/user/selectAllUser";
</script>
</body>
</html>

3、重要的整合文件

SpringMVC整合文件

具体代码文件我就不贴出来了(偷下懒,嘻嘻),这里给下我的资源链接,大家可以自行下载,参考; http://download.csdn.net/download/hsxy123123/9929239

4、利用MyBatis Generator自动创建代码 这个可根据表自动创建实体类、MyBatis映射文件以及DAO接口,当然,我习惯将生成的接口名改为IUserDao,而不是直接用它生成的UserMapper。如果不想麻烦就可以不改。完成后将文件复制到工程中。 可以参考我的SSM框架——使用MyBatis Generator自动创建代码

红色线内是生成代码

5、userController.java,不能生成,那我就贴出来呗。

package com.ssm.asset.user.controller;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.ssm.asset.user.domain.User;
import com.ssm.asset.user.service.UserService;
@Controller
@RequestMapping("/user")
public class UserController{
@Resource
private UserService userService;

@RequestMapping(value = "/selectAllUser")
@ResponseBody
public List<User> selectAllUserList(){
    List<User> userList = this.userService.selectAllUserList();
    return userList;
}
}

6、UserService.java文件,那我也贴出来

package com.ssm.asset.user.service;
import java.util.List;
import com.ssm.asset.user.domain.User;
public interface UserService {
    public List<User> selectAllUserList();
}

7、UserServiceImpl .java我也贴出来

package com.ssm.asset.user.service.impl;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.stereotype.Service;
import com.ssm.asset.user.dao.UserMapper;
import com.ssm.asset.user.domain.User;
import com.ssm.asset.user.service.UserService;
@Service("userService")
public class UserServiceImpl implements UserService {

@Resource
private UserMapper userDao;

public List<User> selectAllUserList(){
    List<User> userList = this.userDao.selectAllUser();
    return userList;
}
}

8、测试 至此已经完成了SSM三大框架的整合了,接下来测试一下,如果成功了,那么恭喜你,如果失败了,继续调试吧,作为程序员就是不停的与BUG做斗争!

是不是很嗨皮

偷了许多懒,还请小伙伴见谅!!!,喜欢就点赞,爱我就打赏,嘻嘻

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Gaussic

使用IntelliJ IDEA开发SpringMVC网站(五)博客文章管理 顶

访问GitHub下载最新源码:https://github.com/gaussic/SpringMVCDemo

29220
来自专栏battcn

一起来学SpringBoot | 第三篇:SpringBoot日志配置

SpringBoot 内部采用的是 CommonsLogging进行日志记录,但在底层为 JavaUtilLogging、 Log4J2、 Logback 等日...

14830
来自专栏IT笔记

SpringBoot开发案例之微信小程序文件上传

最近在做一个口语测评的小程序服务端,小程序涉及到了音频文件的上传,按理说应该统一封装一个第三方上传接口服务提供给前段调用,但是开发没有那么多道理,暂且为了省事就...

76370
来自专栏轻扬小栈

ubuntu debian 百度网盘的Python客户端 bypy

1K40
来自专栏Jaycekon

Spring-boot:快速搭建微框架服务

前言: Spring Boot是为了简化Spring应用的创建、运行、调试、部署等而出现的,使用它可以做到专注于Spring应用的开发,而无需过多关注XML的配...

558120
来自专栏乐沙弥的世界

Linux 6 下编译安装 PHP 5.6

25420
来自专栏用户2442861的专栏

使用IntelliJ IDEA开发SpringMVC网站(四)用户管理

转载请注明出处:Gaussic(一个致力于AI研究却不得不兼顾项目的研究生) 。

28410
来自专栏Java编程技术

你真的了解Netty中@Sharable?

Netty 是一个可以快速开发网络应用程序的基于事件驱动的异步 网络通讯 框架,它大大简化了 TCP 或者 UDP 服务器的网络编程。Netty 的应用还是比较...

17630
来自专栏运维技术迷

解决Sublime在LinuxMint下无法输入中文的问题

环境说明: 操作系统: Linux Mint 18 MATE 输入法管理:fcitx 一、创建sublime_imfix.c文件 进入sublime安装目录...

46770
来自专栏耕耘实录

Linux(Centos7.4和RHEL7.4)环境下基于chrony的NTP服务器的构建

版权声明:本文为耕耘实录原创文章,各大自媒体平台同步更新。欢迎转载,转载请注明出处,谢谢

14310

扫码关注云+社区

领取腾讯云代金券