MyEclipse下Hibernate入门级应用

    技术2022-05-11  95

    所谓的对象-关系映射模式(ORM),在单个组件中负责所有实体域对象的持久化封装数据访问细节。由于目前常用的是关系数据库系统,欲将面向对象编程思想里的“对象”(常指实体域对象)永久保存到数据库中,就需要使用到对象持久化。对象持久化的模式除ORM以外,还有主动域对象模式、JDO模式、CMP模式(J2EE中常用)等等。而Hibernate就是最常用的ORM中间件之一。应用程序可以直接通过Hibernate API访问数据库。Hibernate API中的装口可分为以下几类:·  提供访问数据库的操作的接口。这些接口包括:Session、Transaction和Qurey接口。·  用于配置Hibernate的接口:Configuration·  回调接口,使应用程序接受Hibernate内部发生的事件并做出相关的回应。包括:Interceptor、Liftcyclte和Validateble接口。·  用于扩展hibernate的功能的接口。如UserType、CompositeUserType和IdentifierGenerator接口。Hibernate内部封装了JDBC、JTA(Java Transaction API)和JNDI(Java Naming and Directory Interface)。JDBC提供底层的数据访问操作,只要用户提供了相应的JDBC驱动程序,Hibernate可以访问任何一个数据库系统。JNDI和JTA使Hibernate能够和J2EE应用服务器集成。下面是一个自己在学Hibernate时的第一个简单应用,直接在myeclipse下完成的:目的:学习简单的使用Hibernate将对象持久化到数据库.过程如下:建立数据库和相关的表。在myeclipse database explorer下配置好数据库设置(非必须但是事先配置好的话,后面的数据映射就会方便很多)在elipse下建立了一个web project,在项目上add Hibernate Capabilites..在由myeclipse自动生成好的hibernate.cfg.xml里配置好。这里我的hibernate.cfg.xml配置文件如下:[qutoe]<?xml version='1.0' encoding='UTF-8'?><!DOCTYPE hibernate-configuration PUBLIC          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><!-- Generated by MyEclipse Hibernate Tools.                   --><hibernate-configuration>        <session-factory>                <property name="connection.username">root</property>                <property name="connection.url">                        jdbc:mysql://localhost:3306/hibernate_test                </property>                <property name="dialect">                        org.hibernate.dialect.MySQLDialect                </property>                <property name="myeclipse.connection.profile">                        Mysql JDBC                </property>                <property name="connection.driver_class">                        com.mysql.jdbc.Driver                </property>                <property name="show_sql">true</property>                <mapping resource="Customer.hbm.xml" /><!--这一行后来加上的-->        </session-factory></hibernate-configuration>[/quote]创建欲持久化的类Customer在这个类里面包含与数据库相应表直接相关的一些属性,以及相应的getXXXX()和setXXXX()方法(很类似于javabean)。生成与Customer映射的Customer.hbm.xml。在这里可以在myeclipse database explorer(Hibernate Reverse Engineering...)下去创建生成。写一个处理方法就可以将Customer持久化到数据库里了~比如已经初始化了一个Customer对象,就可以使用以下代码将它持久化到数据库:SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();Session session = sessionFactory.openSession();Transaction tx = session.beginTransaction();session.save(c);tx.commit();session.close(); 

     

    Hibernate的初始化:1)创建一个Configuration类的实例。他的构造方法的把默认文件路径下的配置文件中的配置信息读入到内存。2)调用Configuration类的configure()把配置文件中的确良Customer.hbm.xml文件映射信息读入到内存中。3)调用Configuration类的buildSessionFactory()创建一个SessionFactory实例并把Configuration对象包含的所有配置信息拷贝到SessionFactory对象缓存中。SessionFactory代表一个数据存储源。然后,就可以调用SessionFactory实例的openSession()来获得Session实例,再通过它执行访问数据库的操作。Session接口提供了操纵数据库的各种方法,如:save():把对象保存数据库中。update():更新数据库中的java对象delete():把Java对象中数据库中删除load():从数据库中加载Java对象find():从数据库中查询java对象通常将每一个Session实例和一个数据库事务绑定。 

    myeclipse+struts+hibernate的简单应用~1)首先创建一个web project,为其加上struts组件。2)创建一个struts form、action和jsp页面。设置配置文件。可以直接在无hibernate的环境下运行此web应用。3)为了实现表现层、业务层、持久层的分离,建立一个欲持久化的BusinessBean,包含一系列属性和相应的getter和setter。4)引入hibernate组件,配置好数据映射文件。(这里要注意配置文件里的类路径,记得加上包的名字)5)建立一个用于处理数据库操作的类6)在Action里处理业务逻辑并将处理结果返回到web browse 

     

    Hibernate对象关系映射详解持久化类使用JavaBean风格,为需要被访问的属性提供getXXXX()和setXXXX()方法。Java应用程序不能访问持久化类的private类型的getXXXX()和setXXXX()方法,而Hibernate没有这个限制。可以在持久化类的访问方法中加入程序逻辑。比如说:...private String firstName;private String lastName;public String getName(){return firstName+ "" +lastName;}public void setName(String name){StringTokenizer t = new StringTokenizer(name);firstName = t.nextToken();lastName = t.nextToken();}...在相应映射文件中无需映射该类的firstName和lastName属性而是映射name属性。它和相应数据表的NAME字段对应:<property name="name" column="NAME" /><property>元素有一个access属性,如果将这个属性设置为field,则Hibernate可以运用java反射机制直接访问类的属性。例如如果设置<property name="name" access="field">,则Hibernate可以直接访问Customer.name属性,而不用调用setName()和getName()。可以在setXXXX()中加入数据验证逻辑。不过更好的方法是在表示层或业务逻辑层进行验证。<property>的formula属性,用来设置一个sql表达式,Hibernate将根据它来计算出派生属性的值。例如:<property name="totalPrice" formula="(select sum(o.PRICE) from ORDERS o where o.CUSTOMER_ID=ID)">,这里totalPrice的取值为与Customer对象关联的所有Order对象的price属性值的和。当Hibernate从数据库中查询Customer对象时,在select语句中会包含以上用于计算totalPrice派生属性的子查询语句。可以控制insert和update语句,例如:<property name="price" update="false" column="PRICE"/>以上代码把<property>元素的update属性设为false,这表明在update语句中不会包含PRICE字段。同理可以设置<property>的insert属性等等.<hibernate-mapping>可以设置default-schema属性,比如:<hibernate-mapping default-schema="NE"><class name="mypack.Customer" table="CUSTOMERS"></hibernate-mapping>以上代码对于映射文件中的Customer类,Hibernate会把它映射成为表NE_CUSTOMERS。另外也可以为单独的类设定命名Schenma<class name="mypack.Customer" table="CUSTOMERS" schema="NE">同样可以得到上面的功能.<hibernate-mapping>设置package属性时,比如:<hibernate-mapping package="mypack"><class name="Customer" table="CUSTOMERS" /><class name="Order" table="ORDERS" /></hibernate-mapping>这样等同于:<hibernate-mapping><class name="mypack.Customer" table="CUSTOMERS" /><class name="mypack.Order" table="ORDERS" /></hibernate-mapping>   

     

    HIBERNATE - 符合Java习惯的关系数据库持久化  chs

    http://www.hibernate.org/hib_docs/reference/zh-cn/html/quickstart.html


    最新回复(0)