J2EE:数据访问层的设计相关概念

来源:互联网 发布:淘宝不能用 编辑:程序博客网 时间:2024/05/01 13:53

什么是数据访问层?

参考:http://www.cnblogs.com/whitewolf/archive/2012/06/05/2535486.html


J2EE里面的数据访问层这么设计的:

 

附注:

图片来自:http://www.it-crazy.net/dal-design-on-game/

 

要想理解这个,我们回到JDBC的理解;

什么是JDBC?

     通俗地说:JDBC是java和关系数据库的之间的桥梁;

我们先看看我们最熟悉也是最基础的通过JDBC查询数据库数据,一般需要以下七个步骤:

(1)      加载JDBC驱动

Dirver  (是驱动程序对象的接口,指向具体数据库驱动程序对象=DriverManager.getDriver(String URL))

 

 

(2)       建立并获取数据库连接

 

Connection (是连接对象接口,指向具体数据库连接对象=Drivermanager.getConnection(String URL))

 

(3)      创建 JDBC Statements 对象

Statement (执行静态SQL语句接口,=Connection.CreateStatement())

 

(4)  设置SQL语句的传入参数

(5)  执行SQL语句并获得查询结果

       ResultSet (是指向结果集对象的接口,=Statement.excuteXXX())

 

(6)  对查询结果进行转换处理并将处理结果返回

(7)  释放相关资源(关闭Connection,关闭Statement,关闭ResultSet)

 

JDBC事务的处理(JDBC的事务处理简单,在执行多条语句后,加cn.commit()或cn.rollback()就可以)

 

 <1>.关闭Connection的自动提交

     connection.setAutoCommit(false);

 

 <2>.执行一系列sql语句:执行新sql前,以前的Statement(或PreparedStatemet)须close

     Statement sm ;

           sm = cn.createStatement(insert intouser...);

           sm.executeUpdate();

           sm.close();

           sm = cn.createStatement("insertinto corp...);

           sm.executeUpdate();

           sm.close();

 

 <3>.提交

     cn.commit();

 <4>.如果发生异常,回滚:

     cn.rollback();

 

 

可以看出来,用JDBC至少有几点大家深有体会:

1.    SQL经常要拼接,而且散布在各个文件类里面;

2.    事务管理非常不方便,还要自己去管理;有多少人写JDBC还去自己手动管理呢?

 

参考:从JDBC到mybatis原理的分析

http://www.iteye.com/blogs/subjects/mybatis_internals

 

http://blog.csdn.net/luanlouis/article/details/40422941

 

 

 

回到事务管理的话题上;

 

首先,看看Spring+hibernate怎么配置事务的:

参考:

http://www.cnblogs.com/rushoooooo/archive/2011/08/28/2155960.html

hibernate和mybatis都一样;

简单情况例如:

<tx:methodname="save*" propagation="REQUIRED"/> 

这种在service层调用saveXXX方法时候 这个方法就被事务管理,这个save方法里再调用dao层,查询数据时候开启了session ,开启了事务 。当你执行完了这个save方法(这个方法里面可能执行了多个SQL语句,其实就是对应的JDBC的事务管理) ,事务自动关闭,session也自动关闭,这些都是由spring管理的;

 

 

当然这些只是从概念层面上去分析,以后如果能深入理解具体怎么实现的,结合设计的思想会理解的更深;

0 0
原创粉丝点击