Java程序员从笨鸟到菜鸟之(五十一)细谈Hibernate(二)开发第一个hibernate基本详解

在上篇博客中,我们介绍了《hibernate基本概念和体系结构》,也对hibernate框架有了一个初步的了解,本文我将向大家简单介绍Hibernate的核心API调用库,并讲解一下它的基本配置。核心API的底层实现和源码解析将在以后的博客中一一为大家讲解。

首先我们一起来看一下开发一个hibernate应用程序的大体流程是什么样的(流程顺序可以颠倒):

•创建Hibernate的配置文件

•创建持久化类

•创建对象-关系映射文件

•通过Hibernate API编写访问数据库的代码

关于配置文件推荐阅读:细谈Hibernate(四)Hibernate常用配置文件详解

     知道了开发流程,那么我们就开始我们的第一hibernate应用程序,首先我们以一个简单的学生管理应用程序来作为我们第一hibernate应用程序的开发,让大家熟悉一下hibernate的开发流程,以及对相对应功能的API有初步的认识,Hibernate应用程序定义了一些持久类,并且定义了这些类与数据库表格的映射关系。在我们这个简单的学生管理应用程序中包含了一个类和一个映射文件。让我们看看这个简单的持久类包含有一些什么?映射文件是怎样定义的?另外,我们该怎样用Hibernate来操作这个持久类。

Hibernate开发全面流程和开发配置

首先创建一个项目。然后创建配置开发环境,主要步骤如下:

MyEclipse-->ProjectCapabilities-->add Hibernate Capabilities,视图如下:

复选框选中第二个copychecke。。。。那一个。然后点击next;

为了锻炼能力,配置文件第一次手写,不用图形界面自动生成,所以把: Open configurationfile after wizard completion 选中的点掉;点击next

Specify database connection details把这也点掉;点击next;

全部都用手写,所以把create sessionFactry class此处也点掉;点击Finish;然后lib里面会自动增加一系列jar包

并且src里面也生成了hibernate.cfg.xml,:

由于本人此次练习的是整合Struts与Hibernate进行应用的开发

所以还要进行struts相关文件的配置,由于struts相关文件配置比较简单,所以此处省略;

首先编写一个持久化类:本人创建的是person类:模型类即为javabean,很简单;

注:持久化类符合JavaBean的规范,包含一些属性,以及与之对应的getXXX()和setXXX()方法。

•持久化类有一个id属性,用来惟一标识Person类的每个对象。在面向对象术语中,这个id属性被称为对象标识符(OID,Object Identifier)

•Hibernate要求持久化类必须提供一个不带参数的默认构造方法

下一步即写一个提交到数据库内容的表单,简单的表单不在此处写了。然后写一个action,获得表单的内容:此处action中的处理方法:execute()里面主要是把表单所要提交的信息调用模型类封装成一个类

下一步即将和hibernate的API打交道了。。。编写工具类HibernateUtil这个类主要是获得和数据库打交道的Session类

[java] view plain copy

print?

  1. 主要代码:
  2. privatestatic SessionFactory sessionFactory;
  3. //由于一共只有一个SessionFactory所以把创建SessionFactory的代码放到static代码块里面,让他只创建一次
  4. static {
  5. try {
  6. /**
  7. * 创建SessionFactory过程:
  8. * 1.new Configuration().configure()获得一个configuration的实例
  9. * 2.configuration.buildSessionFactory()获得创建session的工厂sessionFactory的实例
  10. 注:Configuration类用来管理我们的配置文件的信息的,通过它,我们可以通过创建一个configuration实例来管理相应的配置文档,但是通常我们只创建一个configuration实例。
  11. * */
  12. sessionFactory = new Configuration().configure()
  13. .buildSessionFactory();
  14. } catch (Exception e) {
  15. e.printStackTrace();
  16. }
  17. }
  18. publicstatic Session openSession(){
  19. //获得与数据库打交道的实例session
  20. Session session=sessionFactory.openSession();
  21. //把工具session返回给调用者
  22. return session;
  23. }

注意:此Session非彼Session(HttpSession)

一个SessionFactory实例对应一个数据存储源,应用从SessionFactory中获得Session实例。

SessionFactory有以下特点:

–它是线程安全的,这意味着它的同一个实例可以被应用的多个线程共享。

–它是重量级的,这意味着不能随意创建或销毁它的实例。如果应用只访问一个数据库,只需要创建一个SessionFactory实例,在应用初始化的时候创建该实例。如果应用同时访问多个数据库,则需要为每个数据库创建一个单独的SessionFactory实例。

Session接口是Hibernate应用使用最广泛的接口。

•Session也被称为持久化管理器,它提供了和持久化相关的操作,如添加、更新、删除、加载和查询对象。

•Session有以下特点:

–不是线程安全的,因此在设计软件架构时,应该避免多个线程共享同一个Session实例。

–Session实例是轻量级的,所谓轻量级是指它的创建和销毁不需要消耗太多的资源。这意味着在程序中可以经常创建或销毁Session对象,例如为每个客户请求分配单独的Session实例,或者为每个工作单元分配单独的Session实例。

Session接口提供了操纵数据库的各种方法,如:

–save()方法:把Java对象保存数据库中。

–update()方法:更新数据库中的Java对象。

–delete()方法:把Java对象从数据库中删除。

–get()方法:从数据库中加载Java对象。

然后在编写用session处理数据类DAO类,先编写有关接口然后编写实现类personDaoImpl,这个类主要用session处理数据执行事务的类:

示例代码:

[java] view plain copy

print?

  1. //调用工具类获得session
  2. Session session = factory.openSession();
  3. Transaction tx;
  4. try {
  5. //开始一个事务
  6. tx = session.beginTransaction();
  7. //执行事务
  8. Student stu=new Student(“李华”,”男”,”山东”);
  9. Session.save(stu);
  10. //提交事务
  11. tx.commit();
  12. }
  13. catch (Exception e) {
  14. //如果出现异常,就撤销事务
  15. if (tx!=null) tx.rollback();
  16. throwe;
  17. }
  18. finally {
  19. //不管事务执行成功与否,最后都关闭Session
  20. session.close();
  21. }

然后编写逻辑处理类(服务类):先写有关接口,然后写实现类.这个类主要用于处理一些逻辑处理,在这个地方主要用于调用数据处理类DAO进行数据处理

[java] view plain copy

print?

  1. publicclass PersonServiceImpl implements PersonService {
  2. publicvoid savePerson(Person person)
  3. {
  4. PersonDAO personDAO = new PersonDAOImpl();
  5. personDAO.savePerson(person);
  6. }
  7. }

然后直接在action里面写出PersonServiceImpl实例进行调用其方法进行就可以了。Action里面主要处理方法代码示例

[java] view plain copy

print?

  1. <span xmlns="http://www.w3.org/1999/xhtml">public String execute() throws Exception
  2. {
  3. Person person = new Person();
  4. person.setUsername(username);
  5. person.setPassword(password);
  6. person.setAge(age);
  7. java.sql.Date registerDate = new java.sql.Date(new                  java.util.Date().getTime());
  8. System.out.println("222222");
  9. person.setRegisterDate(registerDate);
  10. PersonServiceImpl personService = new PersonServiceImpl();
  11. personService.savePerson(person);
  12. returnSUCCESS;
  13. }
  14. </span>

写到这,一个hibernate主要的逻辑层就差不多了,现在就主要看怎样写配置文件了:先配置hibernate.cfg.xml.主要配置示例:

[html] view plain copy

print?

  1. <span xmlns="http://www.w3.org/1999/xhtml"><?xml version=‘1.0‘ encoding=‘UTF-8‘?>
  2. <!DOCTYPE hibernate-configuration PUBLIC
  3. "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
  4. "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
  5. <hibernate-configuration>
  6. <session-factory>
  7. <property name="connection.url">jdbc:sqlserver://localhost:1433; DatabaseName=Hibernate</property>
  8. <property name="connection.username">sa</property>
  9. <property name="connection.password">123456</property>
  10. <property    name="connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriver</property>
  11. <property name="dialect">org.hibernate.dialect.SQLServerDialect</property>
  12. <property name="show_sql">true</property>
  13. <mapping resource="Person.hbm.xml"/>//映射到具体person表的配置文件
  14. </session-factory>
  15. </hibernate-configuration></span>

注意:

Hibernate的描述文件中存放数据库连接驱动程序类,登陆数据库的用户名/密码,映射实体类配置文件的位置等信息。

•将该配置文件存放在src目录下

描述文件相关属性描述含义:

                                

最后一步:

对持久化(实体)类Person.java文件创建一个Hibernate映射文件Person.hbm.xml

Java的实体类是通过配置文件与数据表中的字段相关联。Hibernate在运行时解析配置文件,根据其中的字段名生成相应的SQL语句

•将该文件存放在src目录下

具体代码示例:

[html] view plain copy

print?

  1. <span xmlns="http://www.w3.org/1999/xhtml"><?xml version="1.0"?>
  2. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
  3. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
  4. <hibernate-mapping>
  5. <class name="com.csh.model.Person" table="person">
  6. <id name="id" column="id"  type="int">
  7. <generator class="increment"></generator>
  8. </id>
  9. <property name="username" column="username" type="string"></property>
  10. <property name="password" column="password" type="string"></property>
  11. <property name="age" column="age" type="int"></property>
  12. <property name="registerDate" column="registerDate" type="date"></property>
  13. </class>
  14. </hibernate-mapping></span>

注:id元素对应的一定是数据库的主键列;class="increment"意为自增

<property>元素映射值   类型属性

•name属性:指定持久化类的属性的名字。

•type属性:指定Hibernate或Java映射类型。Hibernate映射类型是Java类型与SQL类型的桥梁。

•column属性:指定与类的属性映射的表的字段名。

至此,hibernate开发过程和相关配置就此完毕

from: http://blog.csdn.net/csh624366188/article/details/7559676

时间: 2024-10-25 18:34:22

Java程序员从笨鸟到菜鸟之(五十一)细谈Hibernate(二)开发第一个hibernate基本详解的相关文章

Java程序员从笨鸟到菜鸟之(十三)java网络通信编程

本文来自:曹胜欢博客专栏.转载请注明出处:http://blog.csdn.net/csh624366188 首先声明一下,刚开始学习java网络通信编程就对他有一种畏惧感,因为自己对网络一窍不通,所以...呵呵..你懂得,昨天又仔细的学习了一遍,感觉其实java网络编程也没想象的那么难,不信,咱一起看看...呵呵.. 网络编程就是在两个或两个以上的设备(例如计算机)之间传输数据.程序员所作的事情就是把数据发送到指定的位置,或者接收到指定的数据,这个就是狭义的网络编程范畴.在发送和接收数据时,大

Java程序员从笨鸟到菜鸟之(一百零三)java操作office和pdf文件(一)java读取word,excel和pd

在平常应用程序中,对office和pdf文档进行读取数据是比较常见的功能,尤其在很多web应用程序中.所以今天我们就简单来看一下java对word.excel.pdf文件的读取.本篇博客只是讲解简单应用.如果想深入了解原理.请读者自行研究一些相关源码. 首先我们来认识一下读取相关文档的jar包: 1. 引用POI包读取word文档内容 poi.jar 下载地址 http://apache.freelamp.com/poi/release/bin/poi-bin-3.6-20091214.ziph

Java程序员从笨鸟到菜鸟之(一百)sql注入攻击详解(一)sql注入原理详解

前段时间,在很多博客和微博中暴漏出了12306铁道部网站的一些漏洞,作为这么大的一个项目,要说有漏洞也不是没可能,但其漏洞确是一些菜鸟级程序员才会犯的错误.其实sql注入漏洞就是一个.作为一个菜鸟小程序员,我对sql注入的东西了解的也不深入,所以抽出时间专门学习了一下.现在把学习成果分享给大家,希望可以帮助大家学习.下面我们就来看一下. 一.什么是sql注入呢?         所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的

Java程序员从笨鸟到菜鸟之(一百零一)sql注入攻击详解(二)sql注入过程详解

在上篇博客中我们分析了sql注入的原理,今天我们就来看一下sql注入的整体过程,也就是说如何进行sql注入,由于本人数据库和网络方面知识有限,此文章是对网上大量同类文章的分析与总结,其中有不少直接引用,参考文章太多,没有注意出处,请原作者见谅) SQL注入攻击的总体思路是: 1.发现SQL注入位置: 2.判断后台数据库类型: 3.确定XP_CMDSHELL可执行情况 4.发现WEB虚拟目录 5. 上传ASP木马: 6.得到管理员权限: 一.SQL注入漏洞的判断 一般来说,SQL注入一般存在于形如

[转]Java程序员从笨鸟到菜鸟之(八十三)细谈Spring(十二)OpenSessionInView详解及用法

首先我们来看一下什么是OpenSessionInView?    在hibernate中使用load方法时,并未把数据真正获取时就关闭了session,当我们真正想获取数据时会迫使load加载数据,而此时session已关闭,所以就会出现异常. 比较典型的是在MVC模式中,我们在M层调用持久层获取数据时(持久层用的是load方法加载数据),当这一调用结束时,session随之关闭,而我们希望在V层使用这些数据,这时才会迫使load加载数据,我们就希望这时的session是open着得,这就是所谓

java程序员从笨鸟到菜鸟之(七)一—java数据库操作

 本文来自:曹胜欢博客专栏.转载请注明出处:http://blog.csdn.net/csh624366188 数据库访问几乎每一个稍微成型的程序都要用到的知识,怎么高效的访问数据库也是我们学习的一个重点,今天的任务就是总结java访问数据库的方法和有关API,java访问数据库主要用的方法是JDBC,它是java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法,下面我们就具体来总结一下JDBC 一:Java访问数据库的具体步骤: 1 加载(注册)数

(转载)Java程序员应当知道的10个面向对象设计原则

面向对象设计原则是OOPS编程的核心, 但我见过的大多数Java程序员热心于像Singleton (单例) . Decorator(装饰器).Observer(观察者) 等设计模式,而没有把足够多的注意力放在学习面向对象的分析和设计上面.学习面向对象编程像"抽象"."封装"."多态"."继承" 等基础知识是重要的,但同时为了创建简洁.模块化的设计,了解这些设计原则也同等重要.我经常看到不同经验水平的java程序员,他们有的不知

Java程序员应当知道的10个面向对象设计原则

面向对象设计原则是OOPS编程的核心, 但我见过的大多数Java程序员热心于像Singleton (单例) . Decorator(装饰器).Observer(观察者) 等设计模式,而没有把足够多的注意力放在学习面向对象的分析和设计上面.学习面向对象编程像"抽象"."封装"."多态"."继承" 等基础知识是重要的,但同时为了创建简洁.模块化的设计,了解这些设计原则也同等重要.我经常看到不同经验水平的java程序员,他们有的不知

Java程序员修炼之路(一)我们为什么选择Java

我们为什么选择Java大多数人选择Java可能只是因为听说Java前景好.Java比较好找工作.Java语言在TIOBE排行榜上一直位于前三等等之类的原因,但是Java具体好在哪里,心里却是没有什么概念的.其实我选择Java也是出于以上的原因,但是现在确实真正地爱上了Java.那么现在我们来分析下Java的好处究竟在哪里.创一个小群,供大家学习交流聊天如果有对学JAVA方面有什么疑惑问题的,或者有什么想说的想聊的大家可以一起交流学习一起进步也希望大家对学JAVA能够持之以恒JAVA爱好群,如果你