0%

使用Hibernate调用存储过程,及简单的实体映射

在使用Hibernate+Struts2进行项目开发的时候,有时需要对数据库中的多个表进行连接操作。 为了减少访问数据库的次数,可以将连接表的操作写入到procedure即存储过程当中。 通过procedure进行多个表的连接,然后返回查询结果。 查询结果中包含原本属于多个实体的多个属性。 于是可以构建一个实体类 MyEntity,在hibernate的MyEntity.hbm.xml中可以这样写:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="model.YourEntity">
<id name="yourEntityID"></id>
<property name="yourEntityProperty1"></property>
</class>
<sql-query name="callYourProcedure" callable="true">
<return class="model.YourEntity">
<return-property name="yourEntityID"
column="yourTableID">
</return-property>
<return-property name="yourEntityProperty1"
column="yourTableProperty1">
</return-property>
</return>
{call yourProcedureName}
</sql-query>
</hibernate-mapping>

而相应的Java实体类中要包含相应的属性和getter/setter。 procedure返回的查询结果的列名也要一一对应。 这样我们就不需要将Java实体类映射到数据库中具体的表了,只需要映射存储过程就行了。