技术开发 频道

Spring系列--当Hibernate遇上Spring

    分析这个!

    如果以前没这么做过,那么请 下载这篇文章的源代码。把源 zip 文件释放到计算机中的任何位置上,例如 c:\。会创建一个叫作 SpringProjectPart2 的文件夹。src\spring 文件夹包含示例应用程序的 Hibernate 映射文件和 Spring 配置文件。src\springexample\hibernate 文件包含应用程序的源代码。

    在这里会发现两个类,即 Customer 和 Account,它们用 Hibernate 映射文件映射到两个表。Customer 类代表客户信息,Account 代表客户的帐户信息。正如前面提到的,我把这两个类按照 1: N 关系进行建模,即一个 Customer 可以拥有多个 Account。清单 3 显示了 Customer 对象的 Hibernate 映射文件。

    清单 3. Customer 对象的 Hibernate 映射文件
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 2.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd"> <hibernate-mapping> <class name="springexample.hibernate.Customer" table="TBL_CUSTOMER" dynamic-update="false" dynamic-insert="false"> <id name="id" column="CUSTOMER_ID" type="java.lang.Long" unsaved-value="-1" > <generator class="native"> </generator> </id> <set name ="accounts" inverse = "true" cascade="all-delete-orphan"> <key column ="CUSTOMER_ID"/> <one-to-many class="springexample.hibernate.Account"/> </set> <property name="email" type="string" update="false" insert="true" column="CUSTOMER_EMAIL" length="82" not-null="true" /> <property name="password" type="string" update="false" insert="true" column="CUSTOMER_PASSWORD" length="10" not-null="true" /> <property name="userId" type="string" update="false" insert="true" column="CUSTOMER_USERID" length="12" not-null="true" unique="true" /> <property name="firstName" type="string" update="false" insert="true" column="CUSTOMER_FIRSTNAME" length="25" not-null="true" /> <property name="lastName" type="string" update="false" insert="true" column="CUSTOMER_LASTTNAME" length="25" not-null="true" /> </class> </hibernate-mapping>

    set name="accounts" 和一对多类标签指定了 Customer 和 Account 之间的关系。我还在 Account.hbm.xml 文件中定义了 Account 对象的映射。

    CustomerDAOImpl.java 代表应用程序的 DAO,它在应用程序数据库中插入客户和帐户信息。CustomerDAOImpl 扩展了 Spring 的 HibernateDaoSupport,它用 Spring HibernateTemplate 简化了会话管理。这样,可以通过 getHibernateTemplate() 方法保存或检索数据。下面显示的 getCustomerAccountInfo() 对 Customer 进行 查找,通过 getHibernateTemplate().find 方法用 HQL 得到客户的帐户信息,如清单 4 所示。

    清单 4. DAO 实现

public class CustomerDAOImpl extends HibernateDaoSupport implements CustomerDAO{ public void addCustomer(Customer customer) { getHibernateTemplate().save(customer); // TODO Auto-generated method stub } public Customer getCustomerAccountInfo(Customer customer) { Customer cust = null; List list = getHibernateTemplate().find("from Customer customer " + "where customer.userId = ?" , customer.getUserId(),Hibernate.STRING); if(list.size() > 0){ cust = (Customer) list.get(0); } return cust; } 所有这些都应当很容易掌握。现在来看代码的实际应用!
所有这些都应当很容易掌握。现在来看代码的实际应用!
0
相关文章