欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

SSM 框架 - 简洁详细的集成学习教程(Spring+SpringMVC+MyBatis)

最编程 2024-07-12 19:29:29
...

一、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.****.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做斗争!

是不是很嗨皮

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

推荐阅读