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 映射文件
如果以前没这么做过,那么请 下载这篇文章的源代码。把源 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
相关文章
