iBATIS之父:iBATIS框架的成功蜕变

作为软件开发人员,我已经在许多不同的环境中工作过。即使是在同一家公司中,软件开发的方式也往往是迥然不同的。开发人员每天都要面对各种各样的挑战、面对不同的人和工具,考虑到这一点,你就会迅速了解他们的世界是多么的变化多端。我永远也不知道下一个项目又会有怎样惊人的挑战,因此我总是在工具箱中保留着各种各样的工具。在很长一段时间内,iBATIS只不过是这个工具箱中的一种普通工具。当我不得不手写JDBC代码时,它可以帮我节省很多时间。

那么,iBATIS是如何从我的工具箱中的普通工具转变为一个为成千上万的人使用的Apache项目的呢?其实原本我从没打算过使iBATIS成为一个完全成熟的开源项目。所以尽管它的源代码就在那儿,但我从没想过把它推向市场,也从没主动地和任何人分享过它,直到JPetStore。

故事发生在2002年7月1日,我针对网上流传的关于Pet Store的讨论发了一个帖子。当时位于Redmond的一家大型软件公司宣称其C#语言和.NET平台的生产率要比Java高出好几个数量级。我在技术上持中立态度,虽然我承认C#和.NET的确相当之好,但是我仍然不能接受上述这种论断。因此连续几个星期,我用晚上的时间编写了JPetStore,以之反驳他们的论断。JPetStore发布后,在Java社区引起了广泛的讨论。其中讨论得最为热烈的话题就是JPetStore没有使用Enterprise JavaBeans(EJB)的持久化层,而是用了一个称为iBATIS的小型框架。

经常有人问我:“为什么不用其他开源工具?”实际上,当时根本没有像iBATIS那样的工具。代码生成器倒是有很多,有开发时(development-time)代码生成工具,有构建时(build-time)代码生成工具,在此我就不对它们过多赘述了。我只强调一点:任何能够被生成的代码在经过适当的泛化(generalized)后都应该可以被抽取出来,成为一个框架或者某个框架的一部分。而这正是iBATIS的本质:一个用于加快JDBC编程的经过泛化的框架。

另一个被经常问到的问题就是,“为什么不用对象/关系映射(O/RM)工具?”只要环境合适,你当然可以使用O/RM工具。例如,当你可以完全控制数据库和对象模型时,O/RM工具就非常有效:你可以毫不费力地得到理想的对象关系映射;反之,如果你无法同时控制它们,那么当两者之间存在不匹配时(这几乎是肯定的),使用O/RM就会成为一场噩梦,因为它们必须匹配。但是,要为我经常处理的数据库类型建立与对象模型之间的映射几乎是不可想象的。当然,使用一个好的O/RM工具,如Hibernate或者TopLink,也许可以做到。但问题是:真的应该去建立这种映射吗?

曾经有人给我讲过一个故事,故事中那个拿着锤子的人总是把所有东西都看作是钉子——哈哈,是否觉得似曾相识!回到我们的话题,O/RM工具实际上是一种框架。而框架总是构建于约束和假设之上。这些约束和假设在某些环境中是理想的,但并不适用于所有的环境——不要因为拿着锤子就把所有的东西都看作钉子J。作为软件开发人员,我们的工作就是用那些理想的解决方案去匹配我们遇到的实际问题,并非只能使用那些我们知道的方案或者最流行的方案,或者网上最热门的方案,而应该使用那些能够最好地解决我们所面对的问题的方案。总之,不同的环境需要不同的工具——iBATIS就是这众多不同工具中的一种。

到目前为止,iBATIS已经在3种语言中得到了实现:Java、C#和Ruby。并且有一个由十几个开发人员组成的小组在专门维护它,同时它还拥有一个由成千上万的开发人员组成的社区。你可以在图书和文章中,甚至在Web上的博客中学习它。虽然iBATIS算不上(也似乎根本不可能成为)持久化框架的翘楚,但它仍然是一个巨大的成功。另外,回答关于iBATIS的各种问题这个任务现在已经由社区全面接管了,如果你们不满意以上问题的答案或者仍然有什么其他问题,欢迎到社区提问。

有一个能够完全“独立自主、自力更生”的社区是一个开源项目取得成功的真正标志。如果你早就读到过这句话,我猜你一定是该社区的一份子。因此让我们一同庆祝iBATIS这个小小框架的巨大成功吧。

Clinton Begin

iBATIS持久化框架的创始人

JPetStore应用程序的缔造者

iBATIS之父的大作——《iBATIS 实战》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/18159.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

设计模式学习之开闭原则

学习内容均来自抖音号 【it楠老师教java】课程。 1、原理概述 开闭原则的英文全称是 Open Closed Principle,简写为 OCP。它的英文描述是:software entities (modules, classes, functions, etc.) should be open for extension , but closed for modi…

windows基础命令

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 一.目录和文件的操作 1.cd 命令 切换到d盘 2.目录分为相对路径和绝对路径 3. dir命令 用于显示目录和文件列表 4. md 或 mkdir 创建目录 5. rd 用于删…

数据结构——AVL树

文章目录 一.AVL树的定义二.AVL树的插入三.插入后更新平衡因子四.AVL树的旋转1.左单旋2.右单旋3.先左单旋再右单旋4.先右单旋再左单旋 五.检查是否满足AVL树六.源码 一.AVL树的定义 二叉搜索树虽可以缩短查找的效率,但如果数据有序或接近有序二叉搜索树将退化为单支…

智慧水务和物联网智能水表在农村供水工程中的应用

摘 要:随着社会的进步和各项事业的飞速发展,人民生活水平的逐步提升,国家对农村饮水安全有了更高的要求,为了进一步提升农村供水服务的质量,利用现代化、信息化科学技术提升农村供水服务质量,提高用水管理效…

基于高通QCC5171的对讲机音频数据传输系统设计

一 研发资料准备 二 设计方法 蓝牙连接与配对:使用QCC5171的蓝牙功能,实现设备之间的蓝牙连接和配对。确保设备能够相互识别并建立起稳定的蓝牙连接。 音频采集与处理:将麦克风采集到的音频数据通过QCC5171的ADC(模数转换器&…

upload-labs详解------持续更新

目录 注: 搭建: pass-01(前端绕过) pass-02(后缀绕过) pass-03(黑名单绕过) pass-04(Apache解析漏洞\.htaccess文件绕过) 注: 本项目提供的…

Vc - Qt - Qt::KeepAspectRatio及Qt.SmoothTransformation

Qt::KeepAspectRatio是一个枚举值,用于指定图像的缩放行为。设置Qt::KeepAspectRatio属性后,图像将按比例缩放以适应目标矩形,并保持其长宽比。如果目标矩形的宽高比与图像的宽高比不一致,则图像的一部分会被剪裁掉。 Qt::SmoothT…

如祺出行冲刺自动驾驶商业化,人少的地方机会多?

网约车,正在迎来让人“不明觉厉”的新一轮竞赛。 网约车监管信息交互系统的数据显示,截至今年6月30日,全国共有318家网约车平台公司取得网约车平台经营许可,环比增加5家;网约车监管信息交互系统6月份共收到订单信息7.…

记一道有趣的sql题

有一张运单表:dwd_biz_waybill_td,该表的主键是way_bill_id,并且有如下字段: way_bill_id(运单表主键),shiping_date(下单日期,时间格式为yyyy-MM-dd)&#…

爬虫原理详解及requests抓包工具用法介绍

文章目录 一、什么是爬虫?二、爬虫的分类三、网址的构成四、爬虫的基本步骤五、动态页面和静态页面六、伪装请求头七、requests库介绍1. 概念:2. 安装方式(使用镜像源):3. 基本使用:4. response对象对应的方…

使用Express部署Vue项目

使用Express部署Vue项目 目录 1. 背景 2. 配置Vue CLI 1.1 安装nodejs 1.2 创建vue-cli 1.3 创建vue项目 1.4 构建vue项目3. 配置Express 2.1 安装express 2.2 创建项目4. 使用express部署vue项目 1,背景 我们想要做一个前后端分离的课程项目,前端…

eclipse版本与jdk版本对应关系

官网:Eclipse/Installation - Eclipsepedia eclipse历史版本(2007-):Older Versions Of Eclipse - Eclipsepedia Eclipse Packaging Project (EPP) Releases | Eclipse Packages

ARM裸机-10

1、X210开发板和光盘资料 1.1、配置信息 CPU:三星S5PV210 内存:512M DDR2 SDRAM Flash:4GB iBand LCD:7寸,分辨率800x480 触摸屏:电容触摸屏 2、X210开发板硬件手册 3、X210开发板刷系统 3.1、什么是刷…

记一次centos 磁盘挂载过程

前言 最近买了云服务器磁盘,需要挂载,一下就由大猿来记录这次过程。 挂载过程 查看磁盘挂载情况 查看物理硬盘 lsblkfdisk -l标记分区 fdisk /dev/vdb格式化分区 xfs mkfs.xfs /dev/vdb mkfs.xfs -f /dev/vdbext4 mkfs.ext4 /dev/vdbxfs 和 ex…

一起学算法(顺序表篇)

概念: 1.顺序表的定义 用一段地址连续的存储单元依次存储数据的线性表被称为数据表,在Java中顺序表一般是数组或者是ArrayList实现的 先把代码放这里,接下来一一给大家进行讲解: public class SeqList {private Object[] data;…

网络基础-认识每层的设备和每层的特点用途

目录 网络层次常见设备各层介绍数据链路层网络层传输层应用层 网络层次 常见设备 各层介绍 数据链路层 有了MAC地址。数据链路层工作在局域网中的,以帧为单位进行传输和处理数据。 网络层 网络层有了IP。不同的网络通过路由器连接成为互联网 路由器的功能:   …

如何用C#实现上位机与下位机之间的Wi-Fi通信?

有IP协议支持的话用UDP报文或者TCP直接发IP地址和端口不行么?你说的WiFi难道是2.4GHz频率模块那种东东? 你既然用了wifi,那么只要上位机和下位机的对应wifi网卡都具有ip地址以及其协议支持,那么和网络编程没啥子明显区别的吧………

pycharm制作柱状图

Bar - Bar_rotate_xaxis_label 解决标签名字过长的问题 from pyecharts import options as opts from pyecharts.charts import Barc (Bar().add_xaxis(["高等数学1,2","C语言程序设计","python程序设计","大数据导论",…

【13】STM32·HAL库-正点原子SYSTEM文件夹 | SysTick工作原理、寄存器介绍 | printf函数使用、重定向

目录 1.sys文件夹介绍(掌握)2.deley文件夹介绍(掌握)2.1deley文件夹函数简介2.2SysTick工作原理2.3SysTick寄存器介绍2.4delay_init()函数(F1)2.5delay_us()函数(F1)2.6delay_ms()函…

十大排序|十大排序

稳定排序&#xff1a;冒泡排序、插入排序、归并排序、基数排序、桶排序 不稳定排序&#xff1a;选择排序、快速排序、希尔排序、堆排序 二、插入排序&#xff1a; 代码&#xff1a; #include<iostream> #include<cstdio> #include<stdlib.h> #include<ve…