在使用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实体类映射到数据库中具体的表了,只需要映射存储过程就行了。