Java中Mybatis,SpringMVC,Spring的介绍及联系

目录
  • 一、Mybatis
    • 1、简介
    • 2、工作原理:
    • 3、工作流程图:
  • 二、SpringMVC
    • 1、MVC工作原理:
      • 1.1、MVC工作原理图:
    • 2.1、SpringMVC工作原理
      • 2.2、SpringMVC中的组件:
      • 2.3、SpringMvc工作原理图
      • 2.4、 SpringMvc工作流程
      • 2.5、 SpringMVC重点
  • 三、Spring
    • 1、简介:
    • 2、Spring原理:
    • 3、Spring AOP与IOC
      • 3.1、 IoC(Inversion of control): 控制反转
      • 3.2、AOP(Aspect-Oriented Programming): 面向方面编程
      • 3.3、spring的几个阶段:
  • 总结

一、Mybatis

1、简介

MyBatis 是一个基于 Java 的持久层框架,是对 jdbc 的封装,它让数据库底层操作变的透明。Mybatis 的操作都是围绕一个 sqlSessionFactory 实例展开的。Mybatis 通过配置文件关联到各实体类的 Mapper 文件,Mapper 文件中配置了每个类对数据库所需进行的 sql 语句映射。在每次与数据库交互时,通过 sqlSessionFactory 拿到一个sqlSession,再执行 sql 命令。在 Mybatis 中,sqlSessionFactory 可以看为一个数据库连接池,并使用的单例模式;sqlSession 就相当于一个数据库连接,它存活在某个具体的业务请求中。 创建映射器 映射器是 Mybatis 中最重要、最复杂的组件,它由一个接口和对应的 XML 文件(或注解组成)。

2、工作原理:

mybatis通过sqlSessionFactoryBuilder从mybatis-config.xml配置文件(如上图第一步)中构建出sqlSessionFactory(线程安全);然后调用sqlSessionFactory的openSession()方法直接开启一个sqlSession,在通过sqlSession实例获得Mapper.xml对象并运行Mapper.xml映射的sql语句,完成对数据库的CRUD和事务提交,每完成一次操作之后sqlSession都需要关闭.

3、工作流程图:

二、SpringMVC

1、MVC工作原理:

M:Model(完成业务逻辑 Service/dao/entity/)

V:View(完成界面渲染 jsp/html)

C:Controller(控制器->类似于CPU 接受请求->调用M->返回V)

1.1、MVC工作原理图:

2.1、SpringMVC工作原理

SpringMVC是一个MVC的开源框架,SpringMVC是Spring的一个后续产品,其实就是Spring在原有基础上,又提供了web应用的MVC模块,可以简单的把SpringMVC理解为是spring的一个模块(类似AOP,IOC这样的模块),网络上经常会说SpringMVC和Spring无缝集成,其实SpringMVC就是Spring的一个子模块,所以根本不需要同spring进行整合。

2.2、SpringMVC中的组件:

前端控制器(DispatcherServlet):接收请求,响应结果,相当于电脑的CPU。

处理器映射器(HandlerMapping):根据URL去查找处理器

处理器(Handler):(需要程序员去写代码处理逻辑的)

处理器适配器(HandlerAdapter):会把处理器包装成适配器,这样就可以支持多种类型的处理器,类比笔记本的适配器(适配器模式的应用)

视图解析器(ViewResovler):进行视图解析,多返回的字符串,进行处理,可以解析成对应的页面

2.3、SpringMvc工作原理图

2.4、 SpringMvc工作流程

第一步:用户发起请求到前端控制器(DispatcherServlet)

第二步:前端控制器请求处理器映射器(HandlerMapping)去查找处理器(Handler):通过xml配置或者注解进行查找

第三步:找到以后处理器映射器(HandlerMappping)像前端控制器返回执行链(HandlerExecutionChain)

第四步:前端控制器(DispatcherServlet)调用处理器适配器(HandlerAdapter)去执行处理器(Handler)

第五步:处理器适配器去执行Handler

第六步:Handler执行完给处理器适配器返回ModelAndView

第七步:处理器适配器向前端控制器返回ModelAndView

第八步:前端控制器请求视图解析器(ViewResolver)去进行视图解析

第九步:视图解析器像前端控制器返回View

第十步:前端控制器对视图进行渲染

第十一步:前端控制器向用户响应结果

2.5、 SpringMVC重点

在于它的流程和注解,包括控制器、视图解析器、视图等内容;

三、Spring

1、简介:

Spring是一种多层的J2EE应用程序框架,其核心就是提供一种新的机制管理业务对象及其依赖关系。它是一种容器框架,用于创建bean,维护bean之间的关系,它可以管理web层,持久层,业务层等,可以配置各个层的组件并且维护各个层的关系

2、Spring原理:

内部最核心的就是IOC了,动态注入,让一个对象的创建不用new了,可以自动的生产,这其实就是利用java里的反射,反射其实就是在运行时动态的去创建、调用对象,Spring就是在运行时,跟xml Spring的配置文件来动态的创建对象,和调用对象里的方法的 。

Spring还有一个核心就是AOP这个就是面向切面编程,可以为某一类对象 进行监督和控制(也就是 在调用这类对象的具体方法的前后去调用你指定的 模块)从而达到对一个模块扩充的功能。这些都是通过 配置类达到的。

Spring目的:就是让对象与对象(模块与模块)之间的关系没有通过代码来关联,都是通过配置类说明管理的(Spring根据这些配置 内部通过反射去动态的组装对象)

要记住:Spring是一个容器,凡是在容器里的对象才会有Spring所提供的这些服务和功能。

Spring里用的最经典的一个设计模式就是:模板方法模式。(这里我都不介绍了,是一个很常用的设计模式), Spring里的配置是很多的,很难都记住,但是Spring里的精华也无非就是以上的两点,把以上两点跟理解了 也就基本上掌握了Spring.

3、Spring AOP与IOC

3.1、 IoC(Inversion of control): 控制反转

1、IoC:

概念:控制权由对象本身转向容器;由容器根据配置文件去创建实例并创建各个实例之间的依赖关系

核心:bean工厂;在Spring中,bean工厂创建的各个实例称作bean

3.2、AOP(Aspect-Oriented Programming): 面向方面编程

1、 代理的两种方式:

静态代理:

  • 针对每个具体类分别编写代理类;
  • 针对一个接口编写一个代理类;

动态代理:

针对一个方面编写一个InvocationHandler,然后借用JDK反射包中的Proxy类为各种接口动态生成相应的代理类

动态代理知识补充:

不用写代理类,虚拟机根据真实对象实现的接口产生一个类,通过类实例化一个动态代理,在实例化动态代理时将真实对象及装备注入到动态代理中,向客户端公开的是动态代理,当客户端调用动态代理方法时,动态代理根据类的反射得到真实对象的Method,调用装备的invoke方法,将动态代理、

Method、方法参数传与装备的invoke方法,invoke方法在唤起method方法前或后做一些处理。

         1、产生动态代理的类:

                        java.lang.refect.Proxy

         2、装备必须实现InvocationHandler接口实现invoke方法

3.3、spring的几个阶段:

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注我们的更多内容!

(0)

相关推荐

  • Java框架---Spring详解

    目录 一 技术发展 二 框架设计 Spring Framework 6大模块 三 Spring AOP详解 AOP两种方式 四 Spring Bean核心原理 Bean的加载过程 五 Spring XML配置原理 六 Spring Messaging相关技术 七 总结 一 技术发展 技术的创新和发展都是为了解决一类问题 二 框架设计 Spring Framework 6大模块 三 Spring AOP详解 循环依赖问题如何处理? 打破依赖 / 超时推出机制 AOP两种方式 字节码增强技术 四 S

  • java SpringMVC学习使用详解

    Controller学习(Spring官网) SpringMVC 标记 某些java代码使其成为Controller,从而这些代码具有和前端网页 交互数据的功能了. 在学习controller之前先把SpringMVC大致捋一下: 一.简介 在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ,然后再把该Model 返回给对应的View 进行展示.在SpringMVC 中提供

  • 一篇文章带你学习JAVA MyBatis底层原理

    目录 一.传统JDBC的弊端 二.mybatis介绍 三.MyBatis架构图 核心类解释 工作流程 四.自己通过加载xml配置走mybais流程实现例子 总结 一.传统JDBC的弊端 jdbc没有连接池.操作数据库需要频繁创建和关联链接,消耗资源很大. 在java中,写原生jdbc代码,硬编码不易维护(比如修改sql.或传递参数类型时.解析结果). 二.mybatis介绍 MyBatis是一款优秀的持久层框架,它支持自定义SQL.存储过程以及高级映射.MyBatis免除了几乎所有的JDBC代码

  • Java经典面试题汇总:Mybatis

    目录 1. MyBatis 中 #{}和 ${}的区别是什么? 2. MyBatis 有几种分页方式? 3. MyBatis 逻辑分页和物理分页的区别是什么? 4. MyBatis 是否支持延迟加载?延迟加载的原理是什么? 5. 说一下 MyBatis 的一级缓存和二级缓存? 6. MyBatis 有哪些执行器(Executor)? 7. MyBatis 分页插件的实现原理是什么? 8. MyBatis如何返回主键? 9. Xml映射文件中,除了常见的select|insert|update|d

  • Java中Mybatis,SpringMVC,Spring的介绍及联系

    目录 一.Mybatis 1.简介 2.工作原理: 3.工作流程图: 二.SpringMVC 1.MVC工作原理: 1.1.MVC工作原理图: 2.1.SpringMVC工作原理 2.2.SpringMVC中的组件: 2.3.SpringMvc工作原理图 2.4. SpringMvc工作流程 2.5. SpringMVC重点 三.Spring 1.简介: 2.Spring原理: 3.Spring AOP与IOC 3.1. IoC(Inversion of control): 控制反转 3.2.A

  • Java中批处理框架spring batch详细介绍

    spring batch简介 spring batch是spring提供的一个数据处理框架.企业域中的许多应用程序需要批量处理才能在关键任务环境中执行业务操作. 这些业务运营包括: 无需用户交互即可最有效地处理大量信息的自动化,复杂处理. 这些操作通常包括基于时间的事件(例如月末计算,通知或通信). 在非常大的数据集中重复处理复杂业务规则的定期应用(例如,保险利益确定或费率调整). 集成从内部和外部系统接收的信息,这些信息通常需要以事务方式格式化,验证和处理到记录系统中. 批处理用于每天为企业处

  • Java中mybatis关于example类的使用详解

    这几天刚接触example,很多内容都是破碎的,写一篇博文加深理解. 一.什么是example类 mybatis-generator会为每个字段产生如上的Criterion,如果表的字段比较多,产生的Example类会十分庞大.理论上通过example类可以构造你想到的任何筛选条件.在mybatis-generator中加以配置,配置数据表的生成操作就可以自动生成example了.具体配置可以参考MBG有关配置.      下面是mybatis自动生成example的使用. 二.了解exampl

  • java中mybatis和hibernate的用法总结

    在项目开发上,hibernate提供的经验简化了不少工作量和兼容性,但这些绝对需要有经验后才能明白,对于新手来说使用起来很困难.hibernate比mybatis掌握难度要高一些,对sql的控制弱一些.下面我们就三个方面带来mybatis和hibernate的总结分析,一起来看看二者的比较吧. 1.开发效率 如果是做一些简单的CMS类似的只有简单的增删改查的项目,那么使用Hibernate更有优势,不需要掌握太多的Hibernate知识,只需要会一些基本的查询和一些配置(Hibernate真正要

  • Java中mybatis的三种分页方式

    目录 前言 一.Limit分页 二.RowBounds分页(不推荐使用) 三.Mybatis_PageHelper分页插件 前言 分页是我们在开发中绕不过去的一个坎!当你的数据量大了的时候,一次性将所有数据查出来不现实,所以我们一般都是分页查询的,减轻服务端的压力,提升了速度和效率!也减轻了前端渲染的压力! 注意:由于 java 允许的最大整数为 2147483647,所以 limit 能使用的最大整数也是 2147483647,一次性取出大量数据可能引起内存溢出,所以在大数据查询场合慎重使用!

  • java 中MyBatis注解映射的实例详解

    java  中MyBatis注解映射的实例详解 1.普通映射 @Select("select * from mybatis_Student where id=#{id}") public Student getStudent(int id); @Insert("insert into mybatis_Student (name, age, remark, pic,grade_id,address_id) values (#{name},#{age},#{remark}, #{

  • Java中的FileInputStream 和 FileOutputStream 介绍_动力节点Java学院整理

    FileInputStream 和 FileOutputStream 介绍 FileInputStream 是文件输入流,它继承于InputStream. 通常,我们使用FileInputStream从某个文件中获得输入字节. FileOutputStream 是文件输出流,它继承于OutputStream. 通常,我们使用FileOutputStream 将数据写入 File 或 FileDescriptor 的输出流. FileInputStream 函数接口 FileInputStream

  • java中的自增问题介绍

    运行下面这段代码,其结果是什么呢? package com.test; public class Inc { public static void main(String[] args) { Inc inc = new Inc(); int i = 0; inc.fermin(i); i = i++; System.out.println(i); } void fermin(int i) { i++; } } 结果是:0 上述类似代码在C/C++中运行结果是:1,这是为什么呢? 这是因为Java

  • Java中的方法内联介绍

    目录 1. 什么是方法内联 2. 方法内联的重要性 3. Java中方法内联的困难 继承类型关系分析 CHA 总结 1. 什么是方法内联 例如有下面的原始代码: static class B { int value; final int get() { return value; } } public void foo() { y = b.get(); // ...do stuff... z = b.get(); sum = y + z; } 我们首先要进行的就是方法内联,主要有下面两个目的:

  • Java中&和&&的区别简单介绍

    & 按位运算符,逻辑运算符 && 逻辑运算符 相同点:只要有一端为假,则语句不成立 假设有三个参数 int x = 1; int y = 2; int q = 1; 作为逻辑运算符时,&左右两端条件式有一个为假就会不成立,但是两端都会运行 if((x+y)==4 & q++>0) {} System.out.println(q); //q=2 &&也叫做短路运算符,因为只要左端条件式为假直接不成立,不会去判断右端条件式. if((x+y)==4

随机推荐