说在前面的话

SSM:Spring+SpringMVC+MyBatis。

​ SSM框架组合已经是现在最热门的后端框架组合了。本篇我要说的就是使用纯注解整合这三大框架。当然了SpringMVC本身就是spring的一部分。也谈不上整合。所以SSM有时我叫SM。(其实不用在意叫法,好听就行)。

​ 当然了我们都知道现在有SpringBoot可以轻松完成这些框架整合配置。所以这篇文章是给学习中的学子们准备的,已经熟练使用SpringBoot的大佬请绕行。

tips:后面有源码下载地址。

嗨!直接开打吧

你需要准备的武器

  • 学习过Spring,SpringMVC和MyBatis框架
  • 最好使用xml的方式整合过SSM框架
  • 当然也必须知道Maven是个啥,肯定也必须会使用Mavne
  • 要有一份对技术不断追求的心
  • 要热爱我的民族,热爱我们的祖国_

不说了,开整吧

整合思路

​ 首先我们要有明确的整合思路,所谓SSM整合其实就是将MyBatis整合到Spring中。这时就要考虑MyBatis中都有什么要整的呢??

​ 经过考虑,整体思路大概如下:

  • MyBatis 需要的数据源要交给spring,也就是在spring中注册数据源。
  • MyBatis的Mapper要交给spring使用动态代理生成。嗯…SqlSessionFactory的配置…
  • spring的RootContent和WebContent要合并…嗯…

OK!动手

[1]创建项目

打开你的idea,配置好Maven,创建新的项目,创建好需要的目录和包。像下面的截图一样。

[2]配置依赖

打开POM文件,添加下面的配置

版本锁定的部分,我这里使用的spring5.2.6 你是啥打算呢?

<!-- 版本锁定 -->
<properties><!-- spring版本 --><spring.version>5.2.6.RELEASE</spring.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

添加依赖:

<dependencies><!-- spring框架的jar --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</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-web</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-aspects</artifactId><version>${spring.version}</version></dependency><!-- mysql驱动 5.1.47 --><!-- 如果你的数据库是MySQL8 请更换对应的版本 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.47</version></dependency><!-- MyBatisjar --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.4.1</version></dependency><!-- MyBatis和spring整合的第三方jar文件 --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>1.3.2</version></dependency><!-- druid连接池 --><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.10</version></dependency><!-- servlet-api --><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version><!-- 这里的scope必须是 provided --><scope>provided</scope></dependency><!-- 处理JSON的jar文件 --><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.9.8</version></dependency>
</dependencies>

再来个插件吧:

 <build><!-- 配置将main/java下的资源文件也打包 --><resources><resource><directory>src/main/java</directory><includes><include>**/*.properties</include><include>**/*.*</include></includes><filtering>false</filtering></resource><resource><directory>src/main/resources</directory><includes><include>**/*.properties</include><include>**/*.*</include></includes><filtering>false</filtering></resource></resources><plugins><!-- tomcat插件控制 --><plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.2</version><configuration><port>8080</port><path>/</path><uriEncoding>UTF-8</uriEncoding></configuration></plugin><!-- maven插件控制 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.1</version><configuration><source>1.8</source><target>1.8</target><encoding>utf-8</encoding></configuration></plugin></plugins></build>

[3]两个配置类

添加一个RootConfig配置,这个配置类主要用来创建根容器。

这个类就相当使用XML配置文件整合时的spring的配置文件applicationContext.xml

package com.qidian.config;import com.alibaba.druid.pool.DruidDataSource;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.*;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.TransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;import javax.sql.DataSource;/*** @author  戴着假发的程序员* 相当于spring的配置文件*/
@Configuration
//  配置service的扫描包
@ComponentScans({@ComponentScan("com.qidian.service")
})
// 这个配置用来扫描加载所有的mapper接口和xml文件。
// 当然也可以使用@Bean的方式注入一个扫描器MapperScannerConfigurer来扫描
@MapperScan("com.qidian.mapper")
// 加载数据库连接的配置的资源文件
@PropertySource("classpath:db.properties")
public class RootConfig {@Value("${jdbc.driver}")private String driverClass;@Value("${jdbc.url}")private String url;@Value("${jdbc.username}")private String username;@Value("${jdbc.password}")private String password;// 配置数据源@Beanpublic DataSource dataSource(){// druid数据源DruidDataSource dataSource = new DruidDataSource();dataSource.setDriverClassName(driverClass);dataSource.setPassword(password);dataSource.setUsername(username);dataSource.setUrl(url);return  dataSource;}// 注入SqlSessionFactoryBean@Beanpublic SqlSessionFactoryBean sqlSessionFactoryBean(){SqlSessionFactoryBean bean = new SqlSessionFactoryBean();bean.setDataSource(dataSource());// 实体类别名包bean.setTypeAliasesPackage("com.qidian.bank.pojo");return bean;}// 注入事务管理器@Beanpublic TransactionManager transactionManager(){DataSourceTransactionManager transactionManager = new DataSourceTransactionManager();transactionManager.setDataSource(dataSource());return transactionManager;}
}

添加配置类WebConfig 这个类可以继承WebMvcConfigurer,可以通过父类的API添加视图解析器,静态资源映射,拦截器等等。

这个配置主要用来配置web相关的内容,扫描controller等。

package com.qidian.config;import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;/*** @author  戴着假发的程序员*/
@Configuration
// 扫描所有的controller
@ComponentScan("com.qidian.controller")
// 添加SpringMVC相关配置
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry) {// 静态资源的映射registry.addResourceHandler("/**/*.html").addResourceLocations("/");registry.addResourceHandler("/**/*.css").addResourceLocations("/");registry.addResourceHandler("/**/*.js").addResourceLocations("/");registry.addResourceHandler("/**/*.png").addResourceLocations("/");registry.addResourceHandler("/**/*.jpg").addResourceLocations("/");registry.addResourceHandler("/lib/**/*.*").addResourceLocations("/lib/");registry.addResourceHandler("/**/*.json").addResourceLocations("/");}
}

当然不要忘记在resources中添加db.properties

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/bank?serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8
jdbc.username=root
jdbc.password=

看看现在情况呢:

[4]RootWebApplicationContext和DispatcherServletWebApplicationContext

​ 以下简称RootWebApplicationContext为:RootContext,DispatcherServletWebApplicationContext为:DispatcherServletContext。

​ WebApplicationContext扩展了ApplicationContext,代表的Spring Web的应用上下文,RootContext由ContextLoaderListener创建,其中存放了各种注册到Spring的非Web组件的bean(比如service)。RootContext初始化完成后将其存储到ServletContext中,便于获取。在源码中你可以看到这样的代码:servletContext.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, this.context);

 接着是DispatcherServletContext的初始化,它会以RootContext为父上下文(在DispatcherServletContext中可以引用RootContext中的非web组件,而反过来不行。),然后初始化Web相关组件,比如控制器,视图解析器等。DispatcherServletContext初始化完毕后将自身存入ServletContext.

WebApplicationContext和DispatcherServlet上下文初始化方式

在主包中添加一个初始化Web环境的类:

package com.qidian;import com.qidian.config.RootConfig;
import com.qidian.config.WebConfig;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;/*** @author 戴着假发的程序员*/
public class BankContextInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {@Overrideprotected Class<?>[] getRootConfigClasses() {// 根容器配置类return new Class[]{RootConfig.class};}@Overrideprotected Class<?>[] getServletConfigClasses() {// web容器配置类return new Class[]{WebConfig.class};}@Overrideprotected String[] getServletMappings() {// 拦截的路径return new String[]{"/*","*.action"};}
}

看看这个类的位置:

[5]添加对应的mapper,service,controller进行测试了

浏览器访问:

源码下载地址:https://gitee.com/win-dk/SSM-annotation-demo

纯注解整合SSM框架相关推荐

  1. idea 使用 maven 整合 ssm 框架 实现简单的增、删、改 和 分页查询功能

    详细请参考:   idea 使用 maven 整合 ssm 框架 文章目录 ==效果图== ==准备数据库== ==创建maven项目== ==配置文件== pom.xml jdbc.properti ...

  2. idea 使用maven 整合ssm框架

    创建 maven 项目 刚创建好的 maven 项目结构 整合 SSM 框架后的项目结构 数据库环境 创建 mybatis 数据库,在 mybatis 数据库中创建 teacher 数据库表,然后在 ...

  3. idea ssm框架 mysql_IDEA 2017 整合SSM框架(使用Maven创建工程)

    SSM框架(Spring+SpringMVC+MyBatis)是目前Java WEB开发使用较多的框架,搭建起来起来比较麻烦,之前也曾搭建成功过.这次通过结合SSM开发的相关学习视频,再一次系统性的将 ...

  4. 2023新版图文详解SpringBoot整合SSM框架(附源码)

    版权声明 本文原创作者:谷哥的小弟 作者博客地址:http://blog.csdn.net/lfdfhl 教程概述 本教程以图文形式详细讲解SpringBoot整合SSM框架的流程以及具体步骤及其注意 ...

  5. 超详细整合SSM框架--(Spring + Spring MVC + MyBatis)

    超详细整合SSM框架--(Spring + Spring MVC + MyBatis) SpringMVC框架--文章跳转 Spring框架--文章跳转 Mybatis框架--文章跳转 整合思路 设计 ...

  6. batocera中文整合包_分享一个整合 SSM 框架的高并发和商品秒杀项目

    点击上方"Java基基",选择"设为星标" 做积极的人,而不是积极废人! 源码精品专栏 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框架 ...

  7. 整合mybatis——使用纯注解整合、使用Mapper+Mapper.xml整合、使用mybatis.cfg.xml整合

    引入druid <dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-b ...

  8. springboot2整合mysql5_SpringBoot2整合SSM框架详解

    SpringBoot2整合SSM框架详解 发布时间:2019-01-15 21:33, 浏览次数:1218 , 标签: SpringBoot SSM <>开发环境 * 开发工具:Eclip ...

  9. IDEA整合SSM框架之配置日志logback(七)

    IDEA整合SSM框架 配置日志logback 引入logback相关依赖 在resources的根目录下创建logback.xml 在web.xml配置logback.xml 运行项目,查看日志打印 ...

  10. 一步步教你整合SSM框架(Spring MVC+Spring+MyBatis)详细教程重要

    前言 SSM(Spring+SpringMVC+Mybatis)是目前较为主流的企业级架构方案,不知道大家有没有留意,在我们看招聘信息的时候,经常会看到这一点,需要具备SSH框架的技能:而且在大部分教 ...

最新文章

  1. 看看是否有人用USB偷插你的电脑
  2. ubuntu下安装极点五笔
  3. if嵌套-火车站安检-检查刀的长度
  4. sublime text3安装js提示的插件
  5. 欧拉函数 - HDU1286
  6. 多线程----join插队
  7. caffe下matlab、python的配置和faster RCNN的运行
  8. 微信 php收藏功能实现,关于微信小程序收藏功能的实现
  9. 中兴通讯徐子阳:不破不立 用“加减乘除”建理想5G
  10. 如何在 Apple TV 上更快地打开您喜爱的应用?
  11. 一次荒唐的技术决策过程:排除研发总监,无技术参与
  12. 软件逆向工程的前世今生
  13. 使用nginx时候html页面乱码解决办法
  14. Ubuntu16.04桌面版pxe启动实现自动安装
  15. android 平板 吃鸡,怎么用平板玩端游,怎么用平板玩端游吃鸡
  16. 重磅丨深度解读UN报告:AI新技术革命将如何重塑就业和全球化格局?
  17. 《关键信息基础设施安全保护条例》正式发布
  18. Springboot启动后频繁打印错误日志 /null/swagger-ui.html解决方案
  19. 硬核!江西一社区干部用无人机给居民量体温:1米内测量误差仅1%
  20. GPU基本介绍与各GPU性能、价格比较

热门文章

  1. 前端+后端实现导入功能
  2. torch repeate 的用法
  3. QT 处理TCP粘包问题
  4. ESS 控制台之访问控制篇
  5. iOS非常全的第三方库
  6. MATLAB疲劳检测系统
  7. spring boot添加redis过期策略
  8. matlabWeibull概率图绘制及讲解
  9. m3u8在线播放工具 以及 开源播放方案
  10. 建筑智能化资质办理条件