欢迎登陆真网站,您的到来是我们的荣幸。 登陆 注册 忘记密码? ☆设为首页 △加入收藏
欢迎加入真幸福QQ群
电脑知识: 基础知识 网络技术 操作系统 办公软件 电脑维修 电脑安全 windows7 windows8 windows10 服务器教程 平板电脑 视频播放教程 网络应用 互联网 工具软件 浏览器教程 QQ技巧 输入法教程 影视制作 YY教程 wps教程 word教程 Excel教程 PowerPoint
云南西双版纳特产小花糯玉米真空包装


Cult3D 基础教程之打造3D虚拟世界
在windows中注册dll文件的方法
如何拦截或屏蔽网页广告
如何使HIFI音响的寿命更长?
打印机显示脱机无法打印的解决办法
解决USB键盘和鼠标无法识别故障
打印机后台程序服务没有运行的解决
快压小技巧 让你轻松创建“分卷压缩”
安装电脑软件出现部分软件无法安装
win XP虚拟模式失效的原因
Hibernate上手指南
【 来源:网络 】【 点击:1 】 【 发布时间:2017_03_03 08:59:59 】

  本文着重讲述了为什么要使用Hibernate,此外也简单的介绍了如何使用Hibernate,以及Hibernate中的一些基本概念。借这篇文章来向还没有接触过Hibernate的开发者推荐款优秀的开源ORM产品。

  一、WhyHibernate?

  现在流行“测试驱动开发”,相似的我觉得“目的驱动学习”是一种比较好的接受新技术,新知识的途径。在学习一样新的技术之前,首先得明确到底有没有必要学习,已有的技术是否已经工作的很好,学习这个新的技术是为了解决什么问题。如果您明确了以上问题,那么寻找并学习新的技术将会事半功倍,并且能快速应用到实际的开发当中来提高效益。

  要说Hibernate,就得先介绍一下Object/RelationMapper(ORM),中文翻译为对象关系映射。之所以会产生这样的概念是源于目前软件开发中的一些不协调的思想。目前流行的编程模型是OOP(ObjectOrientedProgramming),面向对象的编程,而目前流行的数据库模型是RelationalDatabase,这两者思考的方式不一样,这必然产生了开发过程中的不协调。ORM框架(也称为持久层框架,)的出现就是为了解决这样的问题,屏蔽底层数据库的操作,以面向对象的方式提供给开发者操作数据库中数据的接口。目前流行的ORM框架有 ApachOJB,Hibernate,iBatis等等,当然最完善,最好用的是Hibernate,至少我这样认为。或许您对“持久层”感到迷惑,其实说白了很简单,把数据放到数据库中叫做持久化(内存种的数据当然不是持久的),那么负责这一操作的结构层面就叫做持久层。您以前应该听说过表现层,业务层,数据层,那么持久层是在业务层和数据层之间的一层,或者说持久层是数据层的一部分。

  接下来,我想通过一个实际开发中的例子来说明ORM带给我们的好处。先来讲一下我们的需求,数据库中有三张表,一张student,一张course,另外一张course_slection。其中student用来保存学生信息,course用来表示课程信息,course_selection用来表示学生的选课信息。(表的详细结构这里我就省略了,因为这并不重要)现在要求编写一个程序,用来选出指定学号学生所选的课程名字,那么可能会出现以下几种程序编写的方式:

  1.菜鸟级

  代码片段1:

  publicListselectCourses(StringstudentId)

  {

  Connectioncon=null;

  Statementsta=null;

  try

  {

  Class.forName("oracle.jdbc.driver.OracleDriver");

  con=DriverManager.getConnection(

  "jdbc:oracle:thin:@10.85.33.199:1521:glee",

  "test","test");

  Stringsql="select*fromcourse_selection";

  Stringsql2="selectnamefromcoursewhereid='";

  sta=con.createStatement();

  ResultSetrs=sta.executeQuery(sql);

  Listlist=newLinkedList();

  while(rs.next())

  {

  ResultSetrs2=sta.executeQuery(sql2+

  rs.getString("course_id")+"'");

  if(rs2.next())

  {

  list.add(rs2.getString("name"));

  }

  }

  returnlist;

  }

  catch(Exceptione)

  {

  e.printStackTrace();

  }

  returnnull;

  }

  这段程序您一定看的很晕吧,什么乱七八糟的都搞在一起,那么接下来看一段改进过的程序。

  2.改进后的代码

  代码片段2:

  classDBHelper

  {

  publicstaticConnectiongetConnection()

  {

  try

  {

  Class.forName(Constants.DB_DRIVER);

  returnDriverManager.getConnection(Constants.DB_URL,

  Constants.DB_USER,Constants.DB_PWD);

  }

  catch(Exceptione)

  {

  e.printStackTrace();

  }

  returnnull;

  }

  }

  publicListselectCourses(StringstudentId)

  {

  Connectioncon=null;

  Statementsta=null;

  try

  {

  con=DBHelper.getConnection();

  Stringsql="select*fromcourse_selection";

  Stringsql2="selectnamefromcoursewhereid='";

  sta=con.createStatement();

  ResultSetrs=sta.executeQuery(sql);

  Listlist=newLinkedList();

  while(rs.next())

  {

  ResultSetrs2=sta.executeQuery(sql2+rs.getString("course_id")+"'");

  if(rs2.next())

  {

  list.add(rs2.getString("name"));

  }

  }

  returnlist;

  }

  catch(Exceptione)

  {

  e.printStackTrace();

  }

  returnnull;

  }

  这段代码的形式是一种被广泛采用的形式,相对第一段代码来说,应该已经有所进步,分离了数据库连接操作,并把数据库连接信息交给单独的类完成(一般放在配置文件里面),往往在开发中还会引入数据库连接池(ConnectionPool)来提高性能,我这里都尽量简化了。但这些并不能从根本上改善程序的结构,在业务代码中仍然混杂了很多数据库操作,结构不清晰。下面来看一段彻底分离数据库操作的代码:

  3.DAO模式

  代码片段3:

  publicListselectCourses(StringstudentId)

  {

  StudentDAOsd=newStudentDAO();

  Studentstudent=sd.findById(studentId);

  Setset=student.getCourseSelections();

  ListcourseNames=newLinkedList();

  for(Iteratoriter=set.iterator();iter.hasNext();)

  {

  CourseSelectionelement=(CourseSelection)iter.next();

  courseNames.add(element.getCourse()。getName());

  }

  returncourseNames;

  }

  是不是感觉代码少了很多?或许您对这段代码有点迷惑,没关系,后文会详细解释。我想先解释一下DAO。其实DAO和Hibernate没有必然联系,只不过一般用Hibernate的程序都用DAO模式。DAO的全称是DataAccessObject,程序要访问数据库中的数据(包括获取,更新,删除)都通过DAO来访问,实际上DAO才是真正屏蔽了所有数据库操作的东西,这样在业务代码中就可以完全隔离数据层的代码。如果我告诉您,在真正用 Hibernate开发的时候,要完成上文提到的功能,需要手写的代码就是“代码片段3”这么多,甚至更少,您是不是有很大的动力去学习 Hibernate?那么好吧,让我们开始Hibernate之旅。

本网站由川南居提供技术支持,fkzxf版权所有 浙ICP备12031891号