hibernate 查询语句统一配置管理
????? 你以前所参与的项目里面,SQL、HQL,是否满天飞呢?在逻辑层,显示层那里都可以看到随手写的查询语句?这样的做法极度的破坏了分层的架构,无论如何的XP也应该遵循一定的管理与规范,那么统一管理查询语句的重要性就凸现了。
??????统一管理查询语句有何优点?
????? 1、保持系统的分层架构,管理语句是持久层的责任,由它自己管理是最适合不过。松散的耦合总是我们向往的目标。
????? 2、统一管理方便修改,可以减小人手修改带来的低级错误。
?????
????? OK,接下来要考虑如何管理这些语句来了。
????? 1、配置文件管理
??????在hibernate的mapping文件内使用<query>?????
<query name='findUserById'> from User eo where eo.id = ? </query>
????? <query>里面就是要使用的hql语句 属性name就是语句保存在容器里的别名。
????
????? 在hibernate的mapping文件内使用<sql-query>????
<sql-query name="findUserByName"> <return alias="user" name="code"><property name="mappingLocations"> <list> <value> classpath:hbm/name-query.hbm.xml </value> </list></property>
??? <sql-query>的使用比较复杂,所以不是遇到复杂的跨表查询时,不推荐使用。
?????
?
?????2、标签管理
?????? 一般的习惯都是使用@NamedQueries将与自己相关的语句统一在实体里面,如查询User的语句都是放到User对象里面
@Entity@Table(name = "t_user") @Cache(usage = CacheConcurrencyStrategy.READ_WRITE) @NamedQueries( { @NamedQuery(name = "User.findById", query = "FROM User eo where eo.id=? ") }) public class User implements java.io.Serializable { private int id; private String name;???? 使用标签管理可以比较好的分类查询语句,也不用搞麻烦的配置文件,虽然说修改配置文件的查询语句可以不用重新编译就能生效,但是查询语句修改也不会十分频繁,所以标签管理是一个不错的选择。
?
????? 或者以上的方式都不喜欢,你甚至可以自己写统一管理查询语句的文件,手工注入到你的系统容器内,在DAO层写一套自己的NamQuery也是可以的。萝卜青菜,各有所爱,每个人都会有自己习惯的管理方式,但无论方式是什么,起码有这种想法都是好的。
?
?
?
?
1 楼 laiseeme 2008-08-01 还是习惯在dao曾弄 你这个也不能集成啥的 比如大家公用基类的crud 2 楼 daquan198163 2008-08-01 于是当你要看一个DAO的查询逻辑时,还得打开配置文件