Hibernate查询语句统一配置管理

你以前所参与的项目里面,SQL、HQL,是否满天飞呢?在逻辑层,显示层那里都可以看到随手写的Hibernate查询语句?这样的做法极度的破坏了分层的架构,无论如何的XP也应该遵循一定的管理与规范,那么统一管理查询语句的重要性就凸现了。

统一管理查询语句有何优点?

1、保持系统的分层架构,管理语句是持久层的责任,由它自己管理是最适合不过。松散的耦合总是我们向往的目标。

2、统一管理方便修改,可以减小人手修改带来的低级错误。

OK,接下来要考虑如何管理这些语句来了。

1、配置文件管理

在Hibernate查询语句的mapping文件内使用<query> 

Xml代码

<query name='findUserById'>      



     from User eo where eo.id = ?      




</query>   



 



<query name='findUserById'>   




     from User eo where eo.id = ?   




</query>      <query>里面就是要使用的hql语句 属性name就是语句保存在容器里的别名。  



 


      


 



      在hibernate的mapping文件内使用<sql-query>     



 


Xml代码   



<sql-query name="findUserByName">      




     <return alias="user" class="hibernate.entity.User"/>      



               SELECT user.id AS {user.id},      


                            user.name AS {user.name}      



               FROM t_user user WHERE user.name = ?      




</sql-query>   



 



<sql-query name="findUserByName">   




     <return alias="user" class="hibernate.entity.User"/>   



               SELECT user.id AS {user.id},   


                            user.name AS {user.name}   



               FROM t_user user WHERE user.name = ?   




</sql-query> 

<sql-query>里面的语句必须是sql语句,属性name就是语句保存在容器里的别名,<reruen>里面的东东标明了返回对象的类型与别名,别名主要用于对应sql里面{}的内容。

写好mapping文件后当然要告诉hibernate将这些语句加入到容器里面咯,配置方法有很多种,这里只列了使用spring结合hibernate的配置方式,在SessionFactoryBean的配置里面加入 

Xml代码

<property name="mappingLocations">      



       <list>      




           <value>      



                classpath:hbm/name-query.hbm.xml      



           </value>      




       </list>    




</property>   



 



<property name="mappingLocations">   




       <list>   




           <value>   



                classpath:hbm/name-query.hbm.xml   



           </value>   




       </list> 




</property> 

<sql-query>的使用比较复杂,所以不是遇到复杂的跨表查询时,不推荐使用。

2、标签管理

Hibernate查询语句中,一般的习惯都是使用@NamedQueries将与自己相关的语句统一在实体里面,如查询User的语句都是放到User对象里面

Java代码

相关推荐