SpringMVC(三)—— SSM整合

概念介绍

SSM:Spring+SpringMVC+MyBatis

SpringMVC负责MVC设计模式的实现,MyBatis负责数据持久层,Spring的IOC来管理SpringMVC和MyBatis相关对象的创建注入,Spring的AOP负责事务管理;

在这里插入图片描述
SSM整合Spring的作用:

  1. 通过Spring管理持久层mapper(dao层接口);
  2. 通过Spring管理service层,service层调用dao层,事务管理;
  3. 通过Spring管理展示层,Controller,Controller调用service层;

以下是一个SSM整合框架的实现思路:

  1. 整合dao层:MyBatis和Spring整合,通过Spring管理接口,使用Mapper接口扫自动扫描mapper接口在Spring中注册;
  2. 整合service层:通过Spring管理service层接口,是使用配置方法将service接口配置在Spring的文件中;
  3. 整合SpringMVC:SpringMVC本来就是Spring的一部分,不需要整合;

实现步骤

  1. 导入依赖;
  2. 创建对应的bean类、dao层接口、service对应的类、Controller层对应的类;
  3. 创建Mapper的配置文件、创建MyBatis的配置文件、创建Spring、SpringMVC的配置文件,创建JSP显示页面文件、配置web.xml文件;
  4. 部署项目到服务器;
  5. 使用;

整个目录结构如下:
在这里插入图片描述

一、导入依赖

    <!--Spring 基本核心jar包-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-beans</artifactId>
      <version>4.1.7.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>4.1.7.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>4.1.7.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-expression</artifactId>
      <version>4.1.7.RELEASE</version>
    </dependency>

    <!--SpringMVC相关-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>4.1.7.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>4.1.7.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
    </dependency>

    <!--jdbc相关的包-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>4.2.8.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-tx</artifactId>
      <version>4.2.8.RELEASE</version>
    </dependency>


    <!--加入jstl包-->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
    </dependency>


    <!--mybatis的依赖-->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.4.6</version>
    </dependency>

    <!--mysql的依赖-->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.17</version>
    </dependency>


    <!--打印日志 打印sql语句-->
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>1.2.17</version>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
      <version>1.7.21</version>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>1.7.21</version>
    </dependency>

    <!--AOP相关jar包-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aop</artifactId>
      <version>4.3.9.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.aspectj</groupId>
      <artifactId>aspectjweaver</artifactId>
      <version>1.6.0</version>
    </dependency>
    <dependency>
      <groupId>aopalliance</groupId>
      <artifactId>aopalliance</artifactId>
      <version>1.0</version>
    </dependency>

    <!--c3p0连接池-->
    <dependency>
      <groupId>com.mchange</groupId>
      <artifactId>c3p0</artifactId>
      <version>0.9.5.2</version>
    </dependency>

    <!--mybatis和spring整合包-->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis-spring</artifactId>
      <version>1.3.2</version>
    </dependency>

二、创建对应的类;

目录结构如下:
在这里插入图片描述
数据库表如下:
在这里插入图片描述

bean类:
public class Student {
    private int SID;
    private String Sname;
    private String Ssex;
    private int Age;

    //get、set、toString方法略
}
dao层接口
public interface StudentMapper {
    @Select("select * from Student")
    public List<Student> getStudentBean();  //根据给定id查找并返回对象
}
service层对应的类
@Service
public class StudentService {
    @Autowired
    private StudentMapper studentMapper;

    public List<Student> getAllStudent() {
        return studentMapper.getStudentBean();
    }
}
Controller层对应的类
@Controller
@RequestMapping("/student")
public class StudentController {
    @Autowired
    private StudentService studentService;

    @RequestMapping("/springmvc2")
    public ModelAndView getStudentList(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) {
        //查询
        List<Student> list = studentService.getAllStudent();

        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("students",list);

        //逻辑视图名
        modelAndView.setViewName("jsp1");
        return modelAndView;
    }
}

三、创建对应的文件

对应的目录结构如下:
在这里插入图片描述

创建Mapper的配置文件

StudentMapper.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.tulun3.dao.StudentMapper">
    <!--下面注释的语句和StudentMapper接口中的注解语句二留其一-->
    <!--<select id="getStudentBean" resultType="com.tulun3.bean.Student">
        select * from Student
    </select>-->
</mapper>
创建MyBatis的配置文件

mybatis.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>
    <!--数据源 和spring整合后交给spring管理-->

    <!--mapper映射  整合放在spring的配置文件中-->
    <mappers>
        <mapper resource="ssm整合/StudentMapper.xml"/>
    </mappers>
</configuration>
创建Spring的配置文件

spring.xml:

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
      http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
      http://www.springframework.org/schema/context
      http://www.springframework.org/schema/context/spring-context-3.0.xsd
      http://www.springframework.org/schema/aop
      http://www.springframework.org/schema/aop/spring-aop.xsd">

    <!--配置数据源-->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.cj.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/springmvc?useUnicode=true&amp;characterEncoding=utf-8&amp;useSSL=false&amp;serverTimezone=UTC"/>
        <property name="username" value="root"/>
        <property name="password" value="123456"/>
    </bean>

    <!--配置会话工厂-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!--注入数据源-->
        <property name="dataSource" ref="dataSource"/>

        <!--注入mybatis的配置xml文件-->
        <property name="configLocation" value="classpath:ssm整合/mybatis.xml"/>

        <!--注入mapper映射,这个我放mybatis的配置为文件里面去了,所以就不需要下面这个了
            两个位置只需要一个位置有就好了-->
        <!--<property name="mapperLocations" value="classpath:ssm整合/*Mapper.xml"/>-->
    </bean>

    <!--配置代理对象-->
    <bean  class="org.mybatis.spring.mapper.MapperFactoryBean">
        <!--注入接口-->
        <property name="mapperInterface" value="com.tulun3.dao.StudentMapper"/>
        <!--注入会话工厂-->
        <property name="sqlSessionFactory" ref="sqlSessionFactory"/>
    </bean>

    <!--开启注解扫描-->
    <context:component-scan base-package="com.tulun3"/>
</beans>
SpringMVC的配置文件

springmvc4.xml:

<?xml version="1.0" encoding="UTF-8"?>
<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.tulun3.controller"/>

    <!--自动扫描mvc相关的注解 适配器、映射器等,都有相关的默认配置-->
    <mvc:annotation-driven/>

    <!--视图处理器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!--配置jsp的视图解析类-->
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
        <!-- 前缀 -->
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <!-- 后缀 -->
        <property name="suffix" value=".jsp"/>
    </bean>

</beans>
创建JSP显示页面文件

在这里插入图片描述

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<!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>

<table width="80%" border="1" align="center">
    <h1 align="center">用户列表</h1>
    <tr>
        <%--<td>选择</td>--%>
        <td>编号</td>
        <td>姓名</td>
        <td>性别</td>
        <td>年龄</td>
    </tr>


    <%-- students 要与后台保持一致--%>
    <c:forEach items="${students }" var="student">
        <tr>
            <td>${student.SID }</td>
            <td>${student.sname} </td>
            <td>${student.ssex }</td>
            <td>${student.sage }</td>
        </tr>
    </c:forEach>
</table>
</body>
</html>
配置web.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
         xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <display-name>springmvc</display-name>
  <!--配置加载spring.xml文件-->
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:ssm整合/spring.xml</param-value>
  </context-param>
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>

  <!--配置前端控制器-->
  <servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!--初始化用的-->
    <init-param>
      <!--contextConfigLocation 配置处理器映射器、处理器适配器,如果不写的话,
      默认在当前的web的同级目录添加web-INF/servler名称(就是外层的servlet-name对应的值)-servlet.xml-->
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:ssm整合/springmvc4.xml</param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>

四、部署项目

前面文章写过,不在赘述,地址→https://blog.csdn.net/QQ2899349953/article/details/85397967

五、使用

启动项目,本地访问http://localhost:8080/student/springmvc2即可;
在这里插入图片描述

无法创建对象错误

我的错误是在启动项目的时候,一直报错误:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'studentController': Injection of autowired dependencies failed; nested exception is ......

我搜博客,给的解决办法是说什么注解写错了或没写、配置路径写错了、依赖包导入少了之类的,但我检查之后发现我的注解、配置、依赖都没有问题,问题出在mybatis的配置文件的约束上面,约束错了,就是mybatis.xml最前面的那几行网址错了:
在这里插入图片描述
所以结合博客,如果发现自己的项目启动之后报这个错误,无法创建bean,无法注入属性之类的,解决办法如下:

  1. 检查对应的注解是否写了,是否写正确;
  2. 检查配置文件路径是否写对;
  3. 检查对应文件的约束是否正确(如果1、2都正确,一般就是这个的问题,比较隐蔽);
  4. 检查依赖包是否导全了(一般不会是因为这个的问题);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值