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管理的;
当然这些只是从概念层面上去分析,以后如果能深入理解具体怎么实现的,结合设计的思想会理解的更深;
- J2EE:数据访问层的设计相关概念
- 数据访问层的设计
- 数据访问层的设计
- 一个数据访问层的概要设计
- 一个数据访问层的概要设计
- J2EE相关概念的学习
- J2EE项目中的数据持久层设计
- 二.数据访问层设计
- C# 数据访问层设计
- 数据访问层概要设计
- QDriver一个设计驱动的数据访问层自动化工具
- 设计.NET应用程序数据访问层的五大原则
- MMO网络游戏数据访问层的设计设想
- J2EE相关概念
- J2EE中数据对象的一些概念,比如DTO,VO,BO,ORM,POJO等相关注解
- 基于Spring4+Hibernate4的通用数据访问层+业务逻辑层(Dao层+Service层)设计与实现!
- 数据访问层设计 Disk.cs
- J2EE DAO层和业务逻辑层的设计
- 图解mapreduce原理和执行过程
- MySQL无法重启问题解决Warning: World-writable config file ‘/etc/my.cnf’ is ignored
- Android访问网络 使用HttpURLConnection还是HttpClient?
- Spring MVC 4常用的那些注解 .
- html5 绘制椭圆
- J2EE:数据访问层的设计相关概念
- LeetCode—数组(1)
- IOS开发多线程GCD的学习(二)
- windows编程--网络编程学习--winsock编程(2)
- Android手机怎么获取打印机的IP地址呢
- Android中Java和JS双向调用
- js实现分享到人人网微信和qq等等
- 使用secureCRT连接Ubuntu服务器
- poj 1789 Truck History(Prim)(中等)