温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Hibernate查询语句如何统一配置管理

发布时间:2021-12-06 09:20:33 来源:亿速云 阅读:151 作者:小新 栏目:编程语言

这篇文章给大家分享的是有关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代码

@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;    @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;

使用标签管理可以比较好的分类Hibernate查询语句,也不用搞麻烦的配置文件,虽然说修改配置文件的Hibernate查询语句可以不用重新编译就能生效,但是查询语句修改也不会十分频繁,所以标签管理是一个不错的选择。

感谢各位的阅读!关于“Hibernate查询语句如何统一配置管理”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI