您的位置:首页 > 其它

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

2015-07-22 14:56 232 查看
什么是数据访问层?

参考: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

/article/1373169.html

回到事务管理的话题上;

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

参考:

/article/5204813.html

hibernate和mybatis都一样;

简单情况例如:

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

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

当然这些只是从概念层面上去分析,以后如果能深入理解具体怎么实现的,结合设计的思想会理解的更深;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: