系统架构选型你需要知道什么

来源:互联网 发布:董洁长相分析知乎 编辑:程序博客网 时间:2024/05/15 23:34

 对于持久层的操作hibernate固然是如所周知的首选工具,Hibernate从出生的那天起就致力于数据模型的OO化,让使用者最少的使用sql操作数据库,为此深受大伙喜欢(本人也是 ),但是如果深入的研究你会发现,其实Hibernate本非是为节省sql而做,其延迟加载、数据缓存才是其精华所在,特别是数据对象的延迟加载,是Hibernate出生以前没有一个框架引入的(我是菜鸟,知道的框架很少)。
   学会获取其session并使用API进行数据层处理,以为这样就了解Hibernate,那么Hibernate可能就是一个jdbc封装的工具,这样的东西,有时觉得其实自己也可以做出来,何必还需要一个团队来研究呢?
   如果你是这么了解Hibernate的,那我告诉你,赶快多去看看论坛,和大伙多几次乱谈,多做project,这样你可能才能真正的知道什么是Hibernate,何谓延迟加载。
ibatis相对于Hibernate可谓是轻量级的ORM,或者说它根本不是ORM,但是它的灵活性是Hibernate所不能比的,ibatis的sqlMap使用的是原生的sql语句,让开发人员可以自由地编写自己需要的sqlMap,并且在sqlMap里面可以使用类似标签(<isEmpty></isEqual>等)的逻辑判断。
学习ibatis你可能需要1-3天即可掌握,技术门槛低,你可以不了解OO思想,可以不了解数据模型,你只要会写sql即可。
作为一个系统的构架者,除了熟悉常用的技术框架实现外,更多你可能需要了解系统的开发周期、项目规模、团队成员的技术力量、业务知识的掌握程度,做一个系统架构不能一味的追求新的技术、框架、实现方式,毕竟系统的架构不是系统的实现,不是一两个人就可以完成的。
今天我们又开始做一个新的项目,我提出使用ibatis,有几个人不能理解,可悲中。。。。。
那么为什么我要选择ibatis而不用Hibernate呢?
技术比对:学习简单、可控性好
1.系统开发周期短(几个月左右),所以要求开发人员能快速上手;
2  Ibatis学习的周期短(1-2天即可掌握),Hiernate1-2年都只可能对其API了解,对开发人员的要求高;
3  Hiernate最大的亮点在于延迟加载和数据对象的缓存技术,就目前我们的v1.0涉及这两方面的技术可能性小
4.使用ibatis更容易进行sql的优化,因为hiernate使用的Bo对象保存和hql数据检索,开发人员根本不能直接接触真正的执行sql;
5  Ibatissql语句可以直接在数据库里面调试,hiernatehql则只能借助插接在myeclipse调试;
6  API方面查询数据方面,使用hiernate可能是全部的load其字段,但是实际上有很多是我们不需要的信息(当然我们知道这种情况可以使用map/object[] 的方式解决,但是麻烦啊L);若使用ibatis则直接定义原生的sql,数据库直接提取所需的字段信息,这样有效的减少拉数据库的数据检索和服务器的IO大小;
7  update数据库时也存在类似的问题,使用 hibernate,需要先把对象 select 出来,然后再做 update。这对数据库来说就是两条 sql(虽然使用hql可以解决,但是定义麻烦L)。而 ibatis 只需要一条 update sql 就可以了。减少一次与数据库的交互,对于性能的
提升是非常重要。
8.涉及1对多的表关联,当删除子表中数据时使用hqldelete会出错,(本人经验,不知道大伙试过没?)

性能、维护方面
1.       Ibatissql语句全部保存在已xml为格式的sqlmap文件里面,可控性好;而hiernatehql语句可能留转在各个java类里面,查找麻烦。
2.       在不加用数据缓存cache的相同环境下ibatishiernate速度快
3.       要做好一个成熟的hiernate框架不当当是可以获得session、会使用HibernateAPI这个简单,其实Hibernate最终的目标是把数据进行OO化、数据对象的延迟加载、Cache,如果不能完全理解这些东西,最好不要用。


项目规模:中小项目用ibatis、大项目用Hibernate
1.       ibatis不同数据库类型的支持不好,如果你要开发的系统是要在对中数据间移植,那可能用 hibernate 比较好。
2.       需要用好hibernate缺省的 cache可能对开发人员的要求很高(没个3-5年的研究最好别用),而且很复杂。尤其是对于大并发量的应用。个人倾向于自己管理 cache
3.       项目规模大,开发人员多时不适合用ibatis,毕竟sqlmap写的多拉,个性化的东西更多,sql的统一、优化将是很费劲的事情。
4.       对于业务把握已经成熟的project,极力推荐使用Hibernate,因为数据模型改动行很小,对HibernateBo改动也不是很频繁;但是对于业务处理不是很成熟或开发人员不是很全面彻底的了解其业务知识的系统,还是强烈建议使用ibatis,毕竟灵活,易修改