写点什么

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

作者:fake smile by
  • 2022 年 9 月 20 日
    辽宁
  • 本文字数:5065 字

    阅读完需:约 17 分钟


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

步骤一:创建 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.Driverjdbc.url=jdbc:mysql://localhost:3306/ssm_dbjdbc.username=rootjdbc.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")@EnableWebMvcpublic 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

发布于: 16 小时前阅读数: 20
用户头像

fake smile by

关注

还未添加个人签名 2022.07.31 加入

还未添加个人简介

评论

发布
暂无评论
[SSM]SSM整合①(整合配置)_Java_fake smile by_InfoQ写作社区