为什么要使用ORM技术?和 JDBC 有何不一样?

       1、繁琐的代码问题:

       用JDBC的API编程访问数据库,代码量较大,特别是访问字段较多的表的时候,代码显得繁琐、累赘,容易出错,例如:

       public void addAccount(final Account account) throws DAOException {

          final Connection conn=getConnection();

          PreparedStatement pstmt=con.prepareStatment("insert into account value(?,?,?,?,?,?,?,?,?)");

          pstmt.setString(1,account.getUserName());

          pstmt.setInt(2,account.getPassWord());

          pstmt.setString(3,account.getSex());

          pstmt.setString(4,account.getQq());

          ......

          pstmt.execute();

          conn.Close();

       }

       可见,程序员需要耗费大量的时间、精力去编写具体的数据库访问的SQL语句,还要十分小心其中大量重复的源代码是否有疏漏,并不能集中精力于业务逻辑开发上面。

       ORM则建立了Java对象与数据库对象之间的影射关系,程序员不需要编写复杂的SQL语句,直接操作Java对象即可,从而大大降低了代码量,也使程序员更加专注于业务逻辑的实现。

       2、数据库对象连接问题

       关系数据对象之间,存在各种关系,包括1对1、1对多、多对1、多对多、级联等。在数据库对象更新的时候,如果采用JDBC编程,程序员必须十分小心处理这些关系,以保证维持这些关系不会出现错误,而这个过程是一个很痛苦的过程。

       ORM建立Java对象与数据库对象关系影射的同时,也自动根据数据库对象之间的关系创建Java对象的关系,并且提供了维持这些关系完整、有效的机制。

       3、系统架构问题

       现在的应用系统,一般由展示层、业务逻辑层、数据访问层、数据库层等组成,各层次功能划分非常清晰。JDBC属于数据访问层,但是使用JDBC编程时,程序员必须知道后台是用什么数据库、有哪些表、各个表有有哪些字段、各个字段的类型是什么、表与表之间什么关系、创建了什么索引等等与后台数据库相关的详细信息。相当于软件程序员兼职数据库DBA。

       使用ORM技术,可以将数据库层完全隐蔽,呈献给程序员的只有Java的对象,程序员只需要根据业务逻辑的需要调用Java对象的Getter和 Setter方法,即可实现对后台数据库的操作,程序员不必知道后台采用什么数据库、有哪些表、有什么字段、表与表之间有什么关系。

       于是,系统设计人员把ORM搭建好后,把Java对象交给程序员去实现业务逻辑,使数据访问层与数据库层清晰分界。

       4、性能问题

       采用JDBC编程,在很多时候存在效率低下的问题,如:

       pstmt =conn.prepareStatement("insert into user_info values(?,?)");

       for (int i=0; i<1000; i++) {

          pstmt.setInt(1,i);

          pstmt.setString(2,"User"+i.toString());

          pstmt.executeUpdate();

       }

       以上程序将向后台数据库发送1000次SQL语句执行请求,运行效率较低。

       如果采用ORM技术,ORM框架将根据具体数据库操作需要,会自动延迟向后台数据库发送SQL请求,如上面的程序,只会在循环完成后,一次向数据库发送操作请求,从而大大降低通讯量,提高运行效率;ORM也可以根据实际情况,将数据库访问操作合成,尽量减少不必要的数据库操作请求。

最新文章

  1. 微信Auth2.0授权的时候出现两次回调
  2. .net 第二周学习
  3. 碎片事物的提交 commitAllowingStateLoss()
  4. iOS——特殊的几个控件
  5. Java nio 笔记:系统IO、缓冲区、流IO、socket通道
  6. hdu4570Multi-bit Trie
  7. centos6.7 本地yum源配置
  8. CopyU!v2 已经收录到腾讯软件管家!
  9. java实现的一个maven多模块项目自动生成工具
  10. C# using SendMessage, problem with WM_COPYDATA z
  11. 2.1CUDA-Thread
  12. echarts 地图与时间轴混搭
  13. SRM 223 Div II Level Two: BlackAndRed,O(N)复杂度
  14. 用 eclipse 创建一个简单的 meaven spring springMvc mybatis 项目
  15. hiberation4 获取session
  16. 服务器禁止ping
  17. python语法_函数
  18. OpenMP并行程序设计——for循环并行化详解
  19. python全栈开发day45-DOM操作、对象、定时器
  20. 你应该知道的HTTP基础知识

热门文章

  1. Vue-router学习(一)- 路由匹配
  2. linux命令(6/10):find 命令
  3. java的null
  4. 【Boost】boost库asio详解5——resolver与endpoint使用说明
  5. Boot 横向布局
  6. TCP异步IO_服务端_测试
  7. ZC_02_获取Constructor
  8. LeetCode第[10]题(Java):Regular Expression Matching
  9. python学习笔记(异常处理)
  10. SpringBoot:竟然has no explicit mapping for /error