在十五年前,我记得公司刚开始接触java并在公司作项目时,那时候并没有市面上的mybatis,hibernate等流行的访问数据库的框架,我们对jdbc进行了封装实现了一个工具类,大家通过这个工具类库提供的方法对数据库进行操作,并且所有的SQL语句只能在程序里拼接,最终工程里导出都是拼装SQL的逻辑耦合,显得非常的拙劣,并且不好维护,后面我们使用了hibernate,但我们发现hibernate有自己的HQL语言,有自己的一套规则,增加了技术债务,由于好SQL很相似,非常容易出错,随着我们大量在项目中使用hibernate,我们发现hibernate在简单表的增删改查非常方便,但涉及到复杂SQL语句时,显得非常的低效,而且是当数据库表结构的更改,我们必须设法同步所对应JavaBean的更改,这涉及到xml配置或类注解的改动,当项目变得非常庞大,数据库表非常多而且关系复杂的时候,同步更改这些面临巨大的挑战,
后来我们使用了ibatis,mybatis的前身,ibatis让SQL语句放在外部xml配置(xml Mapper)里,这显然灵活性增加很多,我们可以灵活在在xml里配置我们所需要的SQL逻辑,这些都让我们变得轻松,然而我们慢慢发现ibatis没有像hibernate对单表对象的增删改的方便,在ibatis里为了对一个表的增删改查我们也得在xml里定SQL语句,我们发现其实我们开发中这样的数据库操作有时候会占据70%,这真的非常的不方便,同时ibatis对分页查询的不友好,它并没有提供对数据库按实际分页的查询,而是利用结果集去分页,这非常低效,为了解决分页问题,我们不得不自己在xml里编写分页SQL的逻辑,又或者通过对ibatis进行二次开发来实现,现在已经有针对ibatis的分页开源方案PageHelper。
虽然mybatis现已经非常成熟,即使对单对象的增删改,也可以通过mybatis-plus来解决,即使分页可以通过PageHelper方案来解决,但对于一个有着十几年的java程序员来说,mybatis并不是非常好用,我们需要在xml里定义SQL语句,要知道xml的编写并不轻松,同时mybatis功能非常的多,似乎有点臃肿,我们需要记住大量的用法和规则,甚至我们需要学习好长时间才能好好掌握mybatis里用法,而不至于出错。其实,作为一个常年一线打拼的java程序员,我所需要的就是如何编写访问数据库的代码更简单和高效,如果我又一个访问数据库的工具类更好,我只需要看几个例子就知道如何使用,这让我想到了apache的commons-dbutils,对的,就是它,但它的功能太弱了,我们还是需要在程序里拼接SQL,这不能接受!
好在我一直没有放弃希望,还记得刚开始讲的哪个jdbc的工具类吗?我们通过十几年的演化迭代,通过无数个项目的实践,它终于变成了现在的样子—aka-dbutils。是的它非常的稳定和可靠,因为它经历了无数个项目的洗礼,不管从企业应用,互联网项目,还是金融项目它都表现出色。它非常的高效,开发高效和运行高效,因为它不需要写xml,md文件的编写非常的简单,语法就是java,md文件最终会变成java代码编译成class,就和工程其它的class一样享用同一个虚拟机,这样md方法可以和工程里的其它类方法相互调用,不受任何阻碍,这是它强大和灵活的地方,你甚至可以轻松把md方法里调用工程里其它类的方法,这个方法可以从网络获取SQL语句。其实md文件的最终目的是把以往拼装SQL的逻辑搬运到了md文件,实现了拼装SQL与访问数据库的代码解耦,并且由于拼装SQL其实是java方法的运行,这非常的高效,不需要像mybatis那样需要解析xml。aka-dbutils开发的高效体现在所有访问数据库的操作都可以通过MDbUtils工具类来实现,每个方法都是简单和明了。
aka-dbutis使用很简单,但它非常的强大,它自带分页的方法,你只需要传入查询的SQL语句,它会帮你实现分页的逻辑,并且适用于多种数据库,它天然提供对对象的增删改查的方法,你不需要继承任何插件,对于aka-dbutils的使用,我们设计的时候,并不想搞太多的语法糖,这样让你会记住太多规则,我们也没有任何注解需要去使用,虽然这实现起来并不复杂,我们尽量不让注解侵入到你的JavaBean(对应到数据库的表)。
总之,aka-dbutils是到来就是让事情更简单,强大而简单就是它来到这个世界的目的,开启你的aka-dbutils使用之旅吧!