zoukankan      html  css  js  c++  java
  • Mybatis架构设计和实例分析

    框架设计

     1,接口层:和数据库交互

      1.1传统的mybatis提供的API,通过SqlSession对象完成与数据库的交互,

       1.2,使用Mybatis支持接口的调用方式,Mapper接口文件和Mapper.xml文件之间存在着一一对应的关系,

      首先,接口文件的全类名和xml文件的全类名是完全一样的,然后在xml文件中,表明命名空间namespace的值就是接口的全类名,然后每个查询语句中的id就是接口中对应的方法名,然后配置文件中的每一个参数类型就是接口文件中方法的参数,配置文件的resultMap就是对应了接口文件中的返回类型

      配置规范搞定以后,通过SqlSession.getMapper(XXXMapper.class)方法,MyBatis会根据相应的信息,通过动态代理机制生成一个Mapper实例,当我们使用Mapper接口的一个方法时,根据namespace + id来确定,本质上还是通过SqlSession对象来完成的

    2,Mybatis层次结构

     3,事务管理机制:MyBatis将事务抽象为Transaction接口,有两种,我们用JDBC,

       3.1,配置

        在XML配置文件中定义,在<environment>标签中定义的<transactionManager type = "JDBC"or"MANAGED">

      3.2创建

        事务的创建是交给TransactionFactory事务工厂来创建的,当我们配置完毕后,Mybatis初始化解析节点标签时,会自动创建一个JDBCTransactionFactory

       其实在实例化的时候,针对不同的配置文件,都会生成不同的对象 ,然后彼此之间层层嵌套

       3.3,事务工厂定义了两种创建事务的办法,一是通过Connection对象创建Transaction,二是通过DataSource来创建Transaction,

        a,JdbcTransaction是使用的java.sql.Connection 上的commit和rollback功能,JdbcTransaction只是相当于对java.sql.Connection事务处理进行了一次包装(wrapper),Transaction的事务管理都是通过java.sql.Connection实现的。

    关联查询问题

        可能需要多次查询来组装对象来组装返回对象,所以Mybatis提供了一种嵌套查询语句,可以简化上述操作

     

     假设嵌套查询就一个(即resultMap 内部就一个association标签),现查询的结果集返回条数为N,那么关联查询语句将会被执行N次,加上自身返回结果集查询1次,共需要访问数据库N+1次。如果N比较大的话,这样的数据库访问消耗是非常大的!所以使用这种嵌套语句查询的使用者一定要考虑慎重考虑,确保N值不会很大。

  • 相关阅读:
    位置边框深度探索QT窗口系统几何篇2
    下载图片封装一个工具类,搞定图片批量下载
    svn判断通过svnkit,获取最新的revision以及判断某个revsion是否存在
    java路径Java开发中获得非Web项目的当前项目路径
    遍历文件Java中遍历出指定目录中的所有文件
    存储过程程序存储过程编程5
    工具设置Unity3D系列教程使用免费工具在Unity3D中开发2D游戏 第一节
    破解学习Asprise OCR v4.0 64位破解...仅供学习使用
    宽度拉伸9patch图的尺寸尽量为偶数
    nullnull用宏定义swap(x,y)
  • 原文地址:https://www.cnblogs.com/benbenzoule/p/13836274.html
Copyright © 2011-2022 走看看