mybatis概念
   mybatis 是一款轻量级的orm的数据持久框架,封装jdbc 对开发提供了便利,但是性能会比jdbc低,从开发的角度来说,现在是比较流行的 掌握上比较容易,也支持缓存,级联关系。几乎避免了与jdbc设值和返回结果集映射的代码,将接口和java的实体类映射成数据库中的记录。
 
传统jdbc的缺点
  1.工作量相对比较大(我们需要先连接,然后处理jdbc底层事务,处理数据类型,还需要操作connection,statement对象和resultSet对象去拿到数据 然后解析 最后关闭他们)
  2.jdbc编程可能产生的异常进行捕获并正常关闭资源,如果是简单的还好,如果是复杂的操作更复杂。
 
ORM框架的产生
  由于jdbc的存在的缺陷,在实际开发工作中我们很少使用jdbc进行编程,于是提出了object relational mapping 简称orm ,简单来说orm就是数据库表和java对象的映射关系模型于是就有了hibernate目前比较流行的orm框架,hibernate是建立在若干pojo通过xml映射文件或者注解提供的规则映射到数据库表上。hibernate对jdbc的封装程度比较高,hibernate中不需要写sql了 只需要使用hql语言来就可以了。并且还可以屏蔽数据库之间的差异。框架的设计意味着框架的应用范围。由于封装程度比较高,对sql的优化方面限制很大。在当今互联网中 减少数据传递是最基本的优化方法。显然hibernate无法满足所有的要求,在要求数据传递效率上如果无法做到sql优化的要求,那这一款框架是无法满足这类需求的,所有产生了myabtias这款框架,他提供了更灵活,更方便的方法,弥补了hibernate这些缺陷。
 
mybatis的优势
  为了解决hibernate的不足,一个半自动映射框架mybatis应运而生,之所以称它为半自动,是因为他需要手动匹配POJO,sql和映射关系,而全表映射的hibernate只需要提供pojo和映射关系即可。
历史上mybatis是apache的一个开源项目ibaits 后迁入google code改为mybatis,而和hibernate不同的是,不仅要提供映射文件,还需要我们提供sql语句,这个sql就是动态配置,也就是他最大的特点。
 
mybatis的基本组成
  1.sqlsessionfactoryBuilder
  2.sqlsessionfactory
  3.sqlsession
  4.sqlmapper
 
流程关系如图所示:
 
为了方便使用mybatis,我们创建一个configuration单例对象存储在内存中,因为在内存中是计算机系统中读取速度最快的,我们通过解析一个xml文件配置信息保存在configuration类对象中,达到重复使用,而且占用空间小,在mybatis中提供了两个sqlsessionfactory的实现类 defaultSqlSessionFactory和sqlsessionManager,不过sqlsessionManager目前还没有使用,mybatis中目前使用的是defaultSqlSessionFactory 他们的关系如下图。
 
 
在configuration中mapper接口是简化了复杂的sqlsession实现,然后mapper只是一个接口,而且没有实现类并不能完成操作sqlsession,这里运用了jdk的动态代理,通过分析代码可以看出Java 动态代理,具体有如下四步骤:
   1. 通过实现 InvocationHandler 接口创建自己的调用处理器;
   2. 通过为 Proxy 类指定 ClassLoader 对象和一组 interface 来创建动态代理类;
     3. 通过反射机制获得动态代理类的构造函数,其唯一参数类型是调用处理器接口类型;
     4. 通过构造函数创建动态代理类实例,构造时调用处理器对象作为参数被传入。
 
生命周期
sqlsessionFactoryBuilder:
  它的作用是创建sqlsessionFactory,通过他可以创建多个SqlSessionFactory。它的作用就是一个构造器,一旦我们创建了sqlSessionFactory,它的作用就已经完结,这个时候我们就应该毫不犹豫废弃它。
SqlSessionFactory:
  SqlSessionFactory的作用是创建SqlSession,而sqlSession就是一个会话,在实际生产环境中如果创建多个sqlSessionFactory 会打开更多的数据库连接资源,那么数据库的连接资源很快就会耗尽,因此他的职责是创建sqlsession,所以我们采用单例模式,一个数据库都只对应一个SqlSessionFactory管理好数据库资源的分配,避免过多的connection被消耗。
SqlSession:
  它的生命周期是请求数据库事务的过程中,而且是一个线程不安全的对象,在操作数据库需要注意隔离级别,数据库锁等高级特性。每次创建的sqlsession 都必须及时关闭它,它的长期存在会使数据库连接池的活动资源减少。
mapper:
  它的作用是发送sql,然后返回我们需要的结果,大多数情况下开发只需要操作这个对象,剩下的在xml配置和sqlsession已经完成了,这就符合面向对象开发。它的生命周期和sqlSession一样。
 

mybatis初步理解的更多相关文章

  1. 初步理解@Transactional注解

    在SSM项目中,经常在业务层的类或者方法上看到@Transactional注解,只是知道这个注解的作用是进行事务管理,但是具体有哪些属性,在什么情况下进行回滚,确是不那么清楚.所以在网上看了一些视频和 ...

  2. javascript 原型及原型链的初步理解

    最近折腾了好久,终于是把js里面的原型和原型链做了个初步的理解: 在这里,我打个比喻: 我(child),我妈constructor(构造函数)生了我:别人问我老妈跟谁生的我,于是此时我妈会指向我爸爸 ...

  3. Spring学习笔记--环境搭建和初步理解IOC

    Spring框架是一个轻量级的框架,不依赖容器就能够运行,像重量级的框架EJB框架就必须运行在JBoss等支持EJB的容器中,核心思想是IOC,AOP,Spring能够协同Struts,hiberna ...

  4. Graph Cuts初步理解

    一些知识点的初步理解_8(Graph Cuts,ing...) Graph cuts是一种十分有用和流行的能量优化算法,在计算机视觉领域普遍应用于前背景分割(Image segmentation).立 ...

  5. 非常易于理解‘类'与'对象’ 间 属性 引用关系,暨《Python 中的引用和类属性的初步理解》读后感

    关键字:名称,名称空间,引用,指针,指针类型的指针(即指向指针的指针) 我读完后的理解总结: 1. 我们知道,python中的变量的赋值操作,变量其实就是一个名称name,赋值就是将name引用到一个 ...

  6. springBoot(1)---springboot初步理解

    springboot初步理解 在没有用SpringBoot之前,我们用spring和springMVC框架,但是你要做很多比如: (1)配置web.xml,加载spring和spring mvc 2) ...

  7. Mysql加锁过程详解(7)-初步理解MySQL的gap锁

    Mysql加锁过程详解(1)-基本知识 Mysql加锁过程详解(2)-关于mysql 幻读理解 Mysql加锁过程详解(3)-关于mysql 幻读理解 Mysql加锁过程详解(4)-select fo ...

  8. 关于THINKPHP5模型关联的初步理解

    初步理解的意思是,使用最常用的关联模型,然后可以正常运行 还是打个比方 文章表  和文章分类表 一个文章分类可以有多个文章  所以  文章分类模型和文章建立 hasMany的关联 而文章和文章分类表则 ...

  9. spfa+差分约束系统(C - House Man HDU - 3440 )+对差分约束系统的初步理解

    题目链接:https://cn.vjudge.net/contest/276233#problem/C 题目大意:有n层楼,给你每个楼的高度,和这个人单次的最大跳跃距离m,两个楼之间的距离最小是1,但 ...

随机推荐

  1. linux 防止误操作 mysql 数据库技巧

    mysql 帮助说明 1[oldboy_c64 ~]# mysql --help|grep dummy 2 -U, --i-am-a-dummy Synonym for option --safe-u ...

  2. Linux--用户与用户组--03

    用户管理: 1.useradd 创建用户 -c 指定用户描述 -d 指定家目录 -g 指定主组 -G 指定附加组 附加组可以有多个 -s 指定shell程序 特殊的/sbin/nologin--> ...

  3. 几个有关FPGA的概念

    <数字设计——原理和实践>(John F.Wakerly)的书 FPGA同步时钟设计 简单说就是 一个系统中(或系统中的一部分)都采用同一个时钟触发.系统中的(D)触发器全部都连接到一个时 ...

  4. 【转】UBOOT——启动内核

    转自:https://www.cnblogs.com/biaohc/p/6403863.html 1:什么是UBOOT,为什么要有UBOOT? UBOOT的主要作用是用来启动linux内核,因为CPU ...

  5. PAT Advanced 1019 General Palindromic Number (20 分)

    A number that will be the same when it is written forwards or backwards is known as a Palindromic Nu ...

  6. P4315 月下“毛景树” (树链剖分+边剖分+区间覆盖+区间加+区间最大值)

    题目链接:https://www.luogu.org/problem/P4315 题目大意: 有N个节点和N-1条树枝,但节点上是没有毛毛果的,毛毛果都是长在树枝上的.但是这棵“毛景树”有着神奇的魔力 ...

  7. 2019 蓝桥杯国赛 B 组模拟赛 D. 程序设计:公约数

    蒜头君有n个数,他想要从中选出k个数,使得它们的最大公约数最大.请你求出这个最大的最大公约数. 输入格式第一行输入两个整数 .第二行输入 个整数 . 输出格式输出一个整数. 数据范围 样例输入14 3 ...

  8. R语言 eval(quote(x)) 和 eval(x)

    eval() 's first argument is an expression. So if you only provide one argument, it will evaluate the ...

  9. js中的 与和或 , && ,||

    || 1.只要"||"前面为false,不管"||"后面是true还是false,都返回"||"后面的值. 2.只要"||&quo ...

  10. 【leetcode】1170. Compare Strings by Frequency of the Smallest Character

    题目如下: Let's define a function f(s) over a non-empty string s, which calculates the frequency of the ...