(一)传统数据层开发问题分析

1.分析纯粹的数据层的开发问题

2.项目中的合理数据层设计

具体内容

        Hibernate中文翻译为"冬眠",在开发商Hibernate的主要功能是进行数据层的操作实现.

1.传统开发的弊病

        在任何一个项目的开发之中,一定需要存在四个层,

                    显示层:

                            |-动态语言:jsp;如果要想合理的实现需要编写一堆Scriptlet,而后利用了EL+JSTL解决了;

                            |-静态语言:HTML,JavaScript:可以完成所有的开发,但是DOM的难度太高,使用jQuery解决;

                    控制层:核心在于数据验证,业务调用,分发处理,利用Struts可以解决控制层的问题;

                    业务层:事务控制,数据层调用;待解决问题(Spring解决)

                    数据层:数据层里面只能够编写JDBC代码,但是JDBC写了半天,发现太重复了;

        那么如果现在有一个工具可以版主能自动的根据指定的原则动态配置SQL,动态执行SQL,那么这样的数据层开发就应该很舒服了,那么这个时候我们的处理方式只能够想到反射,但是同时带来的问题是,难度太高了.

        另外一点,在开发之中,有可能会根据客户端的使用习惯选择&配置数据库.但是如果按照传统的开发,代码问题很多,至少每一个数据库支持的SQL语句形式不同,就拿一个最简单的分页操作.

        ●Oracle,DB:ROWNUM

        ●MySQL:LIMIT

        ●SQL Server:TOP

        (一)传统数据层开发问题分析_第1张图片

        这个时候聪明的开发者想出了一个"非常合理"的解决之道,他利用了更加合理的类的设计方式来解决了此类问题.它的方案就是--接口匹配标准,标准可以随意实现. 

     (一)传统数据层开发问题分析_第2张图片

        答案是:这是一个最为合理的解决问题方式,但是他可能又面临新的问题,如果说某一个项目上可能支持100种数据库,那么意味着一个数据库连接类或者是数据层实现子类,就要定义多达100种的子类.即便很多,那么也可以找一群人进行项目的开发,但是最可拍的是,有一天,你的数据库结构全特么变了.整个的设计就将变为一头饿狼.

        但是虽然可能要编写100个子类,那么实际上也可以利用反射机制的存在,帮助我们减少一部分重复代码.可以进行反射开发,又有多少人可以写出来?

        传统开发:使用的结构固定,不易于拓展操作,同时编写的代码重复,设计困难.这些都属于JDBC直接开发的完全弊病.

2.解决数据层的问题

        正如狼人害怕银弹一样,在软件行业的开发只之中,有不少的人开始去寻找这颗银弹,后来出现这样的一种解决方案,

        如果现在要进行数据库的开发,那么一定使用的只能够是JDBC,但是如果直接使用JDBC其结果就是:代码重复,设计性差,那么可以想办法针对于JDBC的操作做一个装饰,让其变得可以更加容易一些.

(一)传统数据层开发问题分析_第3张图片

         也就是说解决的问题关键就在于数据层不要直接与JDBC耦合,数据层不应该关心JDBC的存在,中间的工具类帮助用户关心JDBC,

        随着开发历史的加长,出现了许多的数据层工具类

1.JDO(Java Data Object,Java数据对象):是最早提供数据库操作的工具类,但是这个工具类也只是简单的利用了反射进行了操作的自动生成而已,支持的操作很有限,现在已经不再使用了

2.EJB 2.x Entity Java Bean(实体企业JavaBean):是真正的第一款官方提供的"ORMapping"框架(Object-Relation Mapping,对象关系映射),在EJB上真正实现了数据库间的完全可移植性.可是最早的EJB2.x不支持分页,所有的数据库的数据如果加载到内存,就一直保存着,于是造成一个最大的问题--没人用得起.

        |-它来到了世间,给世界留下了宝贵的财富--理论价值,EJB使用了实体对象(简单Java类),直接进行操作,调用类中的setter()方法时会自动的进行数据库的更新操作.同时第一次官方强调了数据层的开发标准;用户完全不需要知道JDBC的存在,操作对象的时候自动进行数据库操作.

3.Hibernate框架:是真正的第一款在世界流行的实体层开发框架,在EJB2.x的完美熏陶下,解决了EJB2.x中的种种性能问题以及使用局限(EJB必须有EJB容器支持,而Hibrnate只需WEB),很多的大型项目都需要Hibernate开发,并且一直延续到今天,可是它的问题只有一个:Hibernate起源于EJB技术,所以其性能的处理上不高(考虑太多了).

4.EJB 3.x:此技术解决之前所有EJB的缺点,并且加强了优点,但是缺点依然需要EJB容器的支持,所以也没人使用了,EJB3.x的设计者就是Hibernate设计者;

5.MyBatis(前身:Ibatis):EJB和Hibernate考虑了数据库的可移植性, 封装了所有可能见到的数据库操作,但是大部分情况下,我们可能需要的只是简单的框架(自动设置内容,数据转型,并且不需要数据库可移植性);

        以上的技术都属于ORMaooing技术,但是千万要记住一点,JDBC也是一个ORMapping的开发框架,ORMappring的特点:对象1改变可以引起数据库的变化.(随着发展,也不这么明显)

总结

        Hibernate可以解决的是数据层的开发问题以及数据库的可移植性操作问题

你可能感兴趣的:(Hibernate)