[SSM]SSM整合①(整合配置)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: SSM整合①(整合配置)

@[TOC]

为了尽可能的到达复习的效果,即使有些知识点前文已经讲得很详细,但是这里还是会提几句!

步骤一:创建Maven的web项目

在这里插入图片描述
此处有一个注意点:IDEA使用模板创建的Maven可能仓库以及setting文件的设置是错误的,记得覆盖成自己的路径!

步骤二:添加依赖

pom.xml添加SSM所需要的依赖jar包

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

<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/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.nefu</groupId>
  <artifactId>springmvc_try</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

  <dependencies>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.2.10.RELEASE</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>5.2.10.RELEASE</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-test</artifactId>
      <version>5.2.10.RELEASE</version>
    </dependency>

    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>3.5.6</version>
    </dependency>

    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis-spring</artifactId>
      <version>1.3.0</version>
    </dependency>

    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>5.1.47</version>
    </dependency>

    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>druid</artifactId>
      <version>1.1.16</version>
    </dependency>

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
      <scope>provided</scope>
    </dependency>

    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.9.0</version>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat7-maven-plugin</artifactId>
        <version>2.1</version>
        <configuration>
          <port>80</port>
          <path>/</path>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

添加依赖的时候记得把使用模板创建的一些多余的插件和依赖可以去掉!

在这里插入图片描述
接下来我们对这些插件进行一个简单的介绍:

  • spring-webmvc中包含了我们以前使用Spring基础框架时的依赖:spring-context
  • 被选中的这三个依赖是Spring整合Mybatis的坐标在这里插入图片描述
  • druid是我们的数据源
  • junit是我们的测试单元
  • javax-servlet是做SpringMVC开发时Web容器要用的
  • jackson用于json数据的转换

步骤三:创建项目包结构

在这里插入图片描述

  • config目录存放的是相关的配置类
  • controller编写的是Controller类
  • dao存放的是Dao接口,因为使用的是Mapper接口代理方式,所以没有实现类包
  • service存的是Service接口,impl存放的是Service实现类
  • resources:存入的是配置文件,如Jdbc.properties
  • webapp:目录可以存放静态资源
  • test/java:存放的是测试类

步骤四:创建各种配置类

首先我们创建SpringConfig

@Configuration
@ComponentScan({"com.nefu.service"})
public class SpringConfig {
}

注解翻译:

  • @Configuration设置他为一个配置类
  • 使用@ComponentScan用来加载它控制的那些bean(我们这里使用精准扫描防止扫描到不属于他的bean)

    这里其实还有很多注解,我们按照思路来,毕竟我们创建项目的时候也不可能考虑到后面的情况,一次性的全部写完所有要用的注解

写到这里已经没有什么可以写了,我们接着写Spring整合Mybatis的那些东西了:

  • JdbcConfig
  • MyBatisConfig
  • jdbc.properties

在写之前我们现在SpringConfig里面把他们进行添加:

@Configuration
@ComponentScan({"com.nefu.service"})
@PropertySource("classpath:jdbc.properties")
@Import({JdbcConfig.class,MyBatisConfig.class})
public class SpringConfig {
}
  • @PropertySource用来加载一些属性(引入一些外部文件的属性,这里的外部文件就是jdbc.properties)
  • @Import用来加载JdbcConfig、MyBatisConfig这两个配置类

    注意

@Import的使用条件分很多种可以去自行了解,并不是所有的配置文件都可以使用@Import进行加载,我们这里可以使用是因为如上的两个配置类中有bean

然后我们依次去完成这三个配置文件中的内容:

首先是jdbc.properties:

在resources下提供jdbc.properties,设置数据库连接四要素

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/ssm_db
jdbc.username=root
jdbc.password=*********
记住最好加一个前缀,例如此处的jdbc。否则会与系统变量冲突

注意我们此时使用的数据库名字叫ssm_db

JdbcConfig的配置类中我们主要配置我们的数据源,也就是那个DataSource:

我们怎么理解DataSource数据源:
由SUN制定的用于获取数据库连接的规范接口。
它存在于 javax.sql包中,用来代替 DriverManager 的方式来获取连接。
它负责建立与数据库的连接,当在应用程序中访问数据库时,不必编写连接数据库的代码,直接引用DataSource获取数据库的连接对象即可。用于获取操作数据Connection对象。
public class JdbcConfig {
    @Value("${jdbc.driver}")
    private String driver;
    @Value("${jdbc.url}")
    private String url;
    @Value("${jdbc.username}")
    private String username;
    @Value("${jdbc.password}")
    private String password;

    @Bean
    public DataSource dataSource(){
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName(driver);
        dataSource.setUrl(url);
        dataSource.setUsername(username);
        dataSource.setPassword(password);
        return dataSource;
    }
}
  • 使用@Bean将方法返回值作为bean放入容器中
  • @Value用来使用属性
什么是Druid?
Druid是Java语言中最好的数据库连接池。Druid能够提供强大的监控和扩展功能。

数据源与数据库连接池的关系?
数据源建立多个数据库连接,这些数据库连接会保存在数据库连接池中,当需要访问数据库时,只需要从数据库连接池中获取空闲的数据库连接,当程序访问数据库结束时,数据库连接会放回数据库连接池中。

MyBatisConfig配置类中核心就是两个bean:

  • 一个用来造sqlSessionFactory
  • 一个用来扫描映射(然后在容器中自动创建DAO的实现类bean)
public class MyBatisConfig {
    @Bean
    public SqlSessionFactoryBean sqlSessionFactory(DataSource dataSource){
        SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
        factoryBean.setDataSource(dataSource);
        factoryBean.setTypeAliasesPackage("com.nefu.domain");
        return factoryBean;
    }

    @Bean
    public MapperScannerConfigurer mapperScannerConfigurer(){
        MapperScannerConfigurer msc = new MapperScannerConfigurer();
        msc.setBasePackage("com.nefu.dao");
        return msc;
    }
}
SqlSessionFactory(sql会话工厂)是MyBatis的核心对象,用于初始化MyBatis,读取配置文件,创建SqlSession对象。SqlSession使用JDBC方式与数据库交互,同时提供了数据表的CRUD(增删改查)对应的api方法

setTypeAliasesPackage该属性可以给包中的类注册别名,注册后可以直接使用类名,而不用使用全限定的类名(就是不用包含包名)。一般给数据库的模型类包使用

我们使用的是SqlSessionFactoryBean去造sqlSessionFactory对象。然后我们为其设置数据源以及类别名。这里的数据源我们从方法的参数直接注入。

这两个对象都是直接通过new,再往上挂载一些属性,最后包装成bean放入容器

然后我们说说Spring整合MVC的东西,这里就涉及两个配置类:

  • web容器的配置类(我们也可以说它是Web项目入口配置类)
  • SpringMvcConfig

web容器的配置类ServletConfig:

public class ServletConfig extends AbstractAnnotationConfigDispatcherServletInitializer {
    //加载Spring配置类
    protected Class<?>[] getRootConfigClasses() {
        return new Class[]{SpringConfig.class};
    }
    //加载SpringMVC配置类
    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{SpringMvcConfig.class};
    }
    //设置SpringMVC请求地址拦截规则
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }
    //设置post请求中文乱码过滤器
    @Override
    protected Filter[] getServletFilters() {
        CharacterEncodingFilter filter = new CharacterEncodingFilter();
        filter.setEncoding("utf-8");
        return new Filter[]{filter};
    }
}

对于getRootConfigClasses我们需要加载的是Spring的核心配置。对于getServletConfigClasses我们需要加载的是SpringMVC的核心配置。getServletMappings就是定义SpringMVC(或者说Servlet)要拦截的请求。

其实完全可以把这两个配置文件都整合到getServletConfigClasses中去,把getRootConfigClasses中报空。

后面的这个过滤器,如果你有表单提交的这种需求你就可以添加,否则你可以不写这个过滤器。
对于这种json数据过来的,直接在jackson的工具中就已经做了中文的处理了,所以也不需要用到过滤器。

SpringMvcConfig配置类:

@Configuration
@ComponentScan("com.nefu.controller")
@EnableWebMvc
public class SpringMvcConfig {
}

首先我们需要注明他是一个配置类。然后我们用@ComponentScan来扫描那些Controller。@EnableWebMvc让功能更加强大。

如此我们的配置整合就已经完成了。当我们项目启动的时候,它会在Web项目入口配置类中(也就是ServletConfig)把我们SpringConfig和SpringMvcConfig都加载上(注意也只有这两个配置类有@Configuration注解)。然后SpringConfig加载它对应的bean,SpringMvcConfig加载它对应的bean。

这里我们要注意SpringConfig造出来的容器和SpringMvcConfig造出来的容器对象不是同一个,但是SpringMvc的容器能访问Spring的容器,而Spring容器不能访问SpringMvc的容器。(这是一个父子容器的概念)

总结

(1) 创建工程

  • 创建一个Maven的web工程
  • pom.xml添加SSM需要的依赖jar包
  • 编写Web项目的入口配置类,实现AbstractAnnotationConfigDispatcherServletInitializer重写以下方法

    • getRootConfigClasses() :返回Spring的配置类->需要==SpringConfig==配置类
    • getServletConfigClasses() :返回SpringMVC的配置类->需要==SpringMvcConfig==配置类
    • getServletMappings() : 设置SpringMVC请求拦截路径规则
    • getServletFilters() :设置过滤器,解决POST请求中文乱码问题

(2)SSM整合[==重点是各个配置的编写==]

  • SpringConfig

    • 标识该类为配置类 @Configuration
    • 扫描Service所在的包 @ComponentScan
    • 在Service层要管理事务 @EnableTransactionManagement
    • 读取外部的properties配置文件 @PropertySource
    • 整合Mybatis需要引入Mybatis相关配置类 @Import

      • 第三方数据源配置类 JdbcConfig

        • 构建DataSource数据源,DruidDataSouroce,需要注入数据库连接四要素, @Bean @Value
        • 构建平台事务管理器,DataSourceTransactionManager,@Bean
      • Mybatis配置类 MybatisConfig

        • 构建SqlSessionFactoryBean并设置别名扫描与数据源,@Bean
        • 构建MapperScannerConfigurer并设置DAO层的包扫描
  • SpringMvcConfig

    • 标识该类为配置类 @Configuration
    • 扫描Controller所在的包 @ComponentScan
    • 开启SpringMVC注解支持 @EnableWebMvc
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
关系型数据库 MySQL Java
SSM整合流程(整合配置、功能模块开发、接口测试)
SSM整合流程(整合配置、功能模块开发、接口测试)
81 0
|
2月前
|
Java 数据库连接 应用服务中间件
SpringMVC关于SSM的整合配置步骤
SpringMVC关于SSM的整合配置步骤
30 1
|
2月前
|
应用服务中间件
【SSM】如何在IDEA配置tomcat启动项目
【SSM】如何在IDEA配置tomcat启动项目
51 1
|
11月前
java202304java学习笔记第六十七天-ssm-动态sql-多对多配置实现2
java202304java学习笔记第六十七天-ssm-动态sql-多对多配置实现2
49 1
|
11月前
java202304java学习笔记第六十五天-ssm-声明式控制-事务参数的配置1
java202304java学习笔记第六十五天-ssm-声明式控制-事务参数的配置1
27 0
|
11月前
java202304java学习笔记第六十六天-ssm-动态sql-一对一的配置实现1
java202304java学习笔记第六十六天-ssm-动态sql-一对一的配置实现1
47 0
|
11月前
|
XML Java 数据库连接
java202304java学习笔记第六十五天-ssm-声明式控制-基于xml的声明式配置-mybatis的概述2
java202304java学习笔记第六十五天-ssm-声明式控制-基于xml的声明式配置-mybatis的概述2
46 0
|
11月前
|
XML Java 数据库连接
java202304java学习笔记第六十五天-ssm-声明式控制-基于xml的声明式配置-原始jdbc操作1
java202304java学习笔记第六十五天-ssm-声明式控制-基于xml的声明式配置-原始jdbc操作1
52 0
|
11月前
java202304java学习笔记第六十七天-ssm-动态sql-一对一的配置实现2
java202304java学习笔记第六十七天-ssm-动态sql-一对一的配置实现2
50 0
java202304java学习笔记第六十七天-ssm-动态sql-一对一的配置实现2
|
11月前
|
XML Java 数据库连接
java202304java学习笔记第六十五天-ssm-声明式控制-基于xml的声明式配置-mybatis的概述1
java202304java学习笔记第六十五天-ssm-声明式控制-基于xml的声明式配置-mybatis的概述1
46 0