zoukankan      html  css  js  c++  java
  • mybatis初步理解

    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一样。
     
  • 相关阅读:
    JMXRemote Source Downloads? Circular? 规格严格
    Java Heap Dump3 规格严格
    Java Heap Dump2 规格严格
    Java 时区总结 规格严格
    Java HeapDump 规格严格
    JDK 动态代理 规格严格
    常用日语100句
    Wine 1.0发布日期已定!
    细节的感动
    Blog正式改名
  • 原文地址:https://www.cnblogs.com/Seeasunnyday/p/7729631.html
Copyright © 2011-2022 走看看