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管理的;
当然这些只是从概念层面上去分析,以后如果能深入理解具体怎么实现的,结合设计的思想会理解的更深;
参考: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管理的;
当然这些只是从概念层面上去分析,以后如果能深入理解具体怎么实现的,结合设计的思想会理解的更深;
相关文章推荐
- hdu 5294 Tricks Device(最短路 + 最大流)
- 基于JQ的Lightbox插件视频教程
- Canvas文本绘制
- ftw.h
- Php-fpm
- 创建两个线程模拟火车站两个窗口售票程序
- 阿里云win2008企业版镜像搭建ftp服务
- 1017 乘积最大
- 使input框的宽度随输入的字符的长度变化而变化
- 新增线程删除文件夹下的文件
- hadoop2.2.0集群的HA高可靠的最简单配置
- ios-KeyboardNotification
- 多校第一场 1006 hdu 5293 Tree chain problem(离线LCA+时间戳+树形dp)
- EditText设置可以编辑和不可编辑状态
- js拖拽进度条
- memcache安装及php的memcache支持
- ssh免密码登陆
- 备忘篇——jquery实现将左边的元素添加到右边后,在右边点击添加的元素却没反应
- 获取数据库的连接
- [LeetCode]Same Tree