• MyBatis入门


         MyBatis的前身是IBatis,至于为什么从iBatis改成MyBatis以及代码为什么从Apache迁移到Google Code,大家可以参照 凤凰涅槃:从 iBatis 到 MyBatis

    这部分我们主要介绍MyBatis是什么,以及他是如何工作的。本系列的参考主要源自官方的文档《Data Mapper Guid-1.6.2》,我们将保持文档中对iBatis的叫法,英文好的可以直接上官方看哦。

    1. 介绍

    iBatis是一个数据映射框架,它使我们的Java/.Net应用程序能够更加简洁的跟数据库打交道。iBatis通过一系列的XML配置文件,解耦了对象和存储过程/SQL语句。与其他ORM工具相比,iBatis的最大优点就是简洁,包括其官方文档,也就92页。根据iBatis的宣称,其目的是使用20%的代码完成数据访问80%的功能。

    iBatis的.Net版本的官方网址是:http://www.mybatis.org/dotnet.html,

    源代码的svn路径是:http://mybatisnet.googlecode.com/svn/trunk

    2. iBatis做了什么

    iBatis所做的功能其实很简单,概括起来就是:我们提供数据库和对象,iBatis为我们提供映射关系。

    3. iBatis如何工作

    关于跟数据库打交道,我们知道每个开发平台都为我们提供了相应的方式,如Ado.Net,但是,对于开发人员来说,我们依旧发现一些比较难的问题:

    • 将程序代码和SQL代码分隔开;
    • 传递参数到程序类和解压输出结果;
    • 将数据访问类从业务逻辑类从分割开;
    • 缓存经常用到的数据直到数据源发生变化;
    • 管理实务和线程

    幸运的是,iBatis为我们解决了上述问题。

    我们首先来看一张iBatis的工作流程图:

    Image

    图片来源:官方的文档《Data Mapper Guid-1.6.2》

    从这个流程图中,我们可以看出,iBatis的工作流大概是这样的:

      1. 提供一个输入参数,可以是自定义的类或者是原始的数据类型。这个参数可以在SQL语句或存储过程中动态的设置值。当然,如果我们没有必要在运行时值,输入参数是可以省略的;
      2. 在XML配置文件中,通过传递的参数和SQL语句或存储过程中的名字,进行映射。这一步是真正发生奇迹的步骤,iBatis将准备SQL语句/存储过程,用我们提供的参数设置运行时值,执行SQL语句/存储过程,然后返回结果;
      3. 对于更新(update/insert/delete)的情况,返回受影响的行数,对于查询的情况,一个对象,或者对象的集合将被返回,跟输入参数一样,返回值也可以是自定义的类,或者原始的类型。

    4. iBatis是你项目的最佳选择吗?

    对于项目中使用的任何技术,我们都会有个问题,这种技术适合我们的项目吗?它是不是最佳的选择呢?有没有更好的选择呢?对于iBatis,我们同样会有这样的问题,为了搞清这个问题,我们需要将iBatis跟具有同类功能的产品进行对比。

    首先,iBatis是一个数据映射工具,他的功能是将数据库中查询出来的列映射到对象的属性(Property)中,如果你的项目是基于业务对象(business objects)的,那么iBatis应该是一个不错的选择;如果你的项目是基于多层架构的,那么iBatis甚至是一个更好的选择,因为这样业务层和UI层将很轻易的分割开。

    基于上面的情况,另外一个好的选择方案是OR/M(Object/Relational Mapping Tool)工具,像NHibernate。OR/M为我们生成了大部分的SQL,这类工具之所以叫OR/M,是因为他们试图将一个对象图映射到关系模式中。

    iBatis并不是一个OR/M工具,它所做的只是帮我们将对象映射到SQL语句/存储过程。如果我们的对象和表示对应的,那么OR/M将是一个不错的选择,但是,如果我们的对象存储的是关系视图,而不是简单的数据库表,那么OR/M就不一定是一个好的选择方案了。

    总之,iBatsi是一个很好的选择方案,如果你:

    1. 不能够完全掌控数据库的实现,或者你想要访问一个被重构过的数据库的原始数据库;
    2. 组里面有数据库管理员或SQL专家
    3. 数据库是用来模型化问题域的,并且应用程序是首要职责是帮助客户端使用数据库模型

    待续……

  • 相关阅读:
    adb稳定性monkey测试(转载)
    Cookie、sessionStorage、localStorage的异同
    Vue-eBookReader 学习笔记(初始化部分)
    ValueError: Max value is 14 解决方案
    Chrome 报错: Unchecked runtime.lastError: Could not establish connection. Receiving end does not exist.
    Bootstrap使用方法
    Vue笔记
    3D相册 复仇者联盟
    奔跑的少年
    钟表练习 html+css实现
  • 原文地址:https://www.cnblogs.com/tian2010/p/2494913.html
Copyright © 2020-2023  润新知