- 浏览: 7253622 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (1546)
- 企业中间件 (236)
- 企业应用面临的问题 (236)
- 小布Oracle学习笔记汇总 (36)
- Spring 开发应用 (54)
- IBatis开发应用 (16)
- Oracle基础学习 (23)
- struts2.0 (41)
- JVM&ClassLoader&GC (16)
- JQuery的开发应用 (17)
- WebService的开发应用 (21)
- Java&Socket (44)
- 开源组件的应用 (254)
- 常用Javascript的开发应用 (28)
- J2EE开发技术指南 (163)
- EJB3开发应用 (11)
- GIS&Mobile&MAP (36)
- SWT-GEF-RCP (52)
- 算法&数据结构 (6)
- Apache开源组件研究 (62)
- Hibernate 学习应用 (57)
- java并发编程 (59)
- MySQL&Mongodb&MS/SQL (15)
- Oracle数据库实验室 (55)
- 搜索引擎的开发应用 (34)
- 软件工程师笔试经典 (14)
- 其他杂项 (10)
- AndroidPn& MQTT&C2DM&推技术 (29)
- ActiveMQ学习和研究 (38)
- Google技术应用开发和API分析 (11)
- flex的学习总结 (59)
- 项目中一点总结 (20)
- java疑惑 java面向对象编程 (28)
- Android 开发学习 (133)
- linux和UNIX的总结 (37)
- Titanium学习总结 (20)
- JQueryMobile学习总结 (34)
- Phonegap学习总结 (32)
- HTML5学习总结 (41)
- JeeCMS研究和理解分析 (9)
最新评论
-
lgh1992314:
[u][i][b][flash=200,200][url][i ...
看看mybatis 源代码 -
尼古拉斯.fwp:
图片根本就不出来好吧。。。。。。
Android文件图片上传的详细讲解(一)HTTP multipart/form-data 上传报文格式实现手机端上传 -
ln94223:
第一个应该用排它网关吧 怎么是并行网关, 并行网关是所有exe ...
工作流Activiti的学习总结(八)Activiti自动执行的应用 -
ZY199266:
获取不到任何消息信息,请问这是什么原因呢?
ActiveMQ 通过JMX监控Connection,Queue,Topic的信息 -
xiaoyao霄:
DestinationSourceMonitor 报错 应该导 ...
ActiveMQ 通过JMX监控Connection,Queue,Topic的信息
你以前所参与的项目里面,SQL、HQL,是否满天飞呢?在逻辑层,显示层那里都可以看到随手写的查询语句?这样的做法极度的破坏了分层的架构,无论如何的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、标签管理
一般的习惯都是使用@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;
使用标签管理可以比较好的分类查询语句,也不用搞麻烦的配置文件,虽然说修改配置文件的查询语句可以不用重新编译就能生效,但是查询语句修改也不会十分频繁,所以标签管理是一个不错的选择。
评论
如
在一些系统将SQL语句放在属性文件中。
在IBatis中一般sql放在配置的xml等进行统一管理
这样的好处方便系统的维护,SQL管理等。^_^
欢迎一起探讨哦
还有你的细粒度权限管理我感觉好像与SQL没有关系吧?
权限管理系统一般为方法级别和用户组级别的哦
我在写数据库访问类的时候,一般将SQL做为类变量,直接写在类的头部。这样开起来也比较清晰,一般不会去拼凑SQL语句。
另外,有一点表示不同意:
统一管理SQL,并不能阻止在显示层出现数据库访问代码。
我博客里面有很多细粒度权限管理讨论,欢迎做客
发表评论
-
【转】在项目中使用多个数据源-多sessionFactory方案
2013-05-10 16:30 3072适用范围:适合SSH架构访问多个数据库, ... -
Hibernate使用中从数据库到模型的加载方式研究
2010-01-28 13:19 1922在项目中数据库中账单Bill一个字段是有多个订单id的以逗 ... -
hibernate中@Transient的使用
2010-01-19 15:20 10639项目中可能有许多实体的需要辅助的属性和方法辅助,hibe ... -
关于hibernate中注解和hbm共存时的加载规律
2010-01-19 15:13 3761项目中使用Spring2.5+hibern ... -
hibernate查询的使用的点滴积累
2010-01-09 13:04 1873/** * 前台查询酒店的级别,设备,类型 * * ... -
Hibernate 的HQL中一个经典函数elements的使用
2010-01-09 12:53 10304在传递索引和元素给集合时(elements and indic ... -
Hibernate关联查询中with的经典使用
2010-01-09 12:42 2161在项目采用Hibernate关联,采用关联使用比较简单,在关 ... -
判断数据库表每条记录中时间段是否在每一个时间段中
2010-01-09 12:35 3040项目中一个成品价格表,每条记录中的价格有一个使用时间 ... -
JPA 中注解一个父类中多个子类实现查询部分子类方法解决方法
2010-01-09 12:10 2024父类: @Entity@Inheritance(stra ... -
Hibernate调用执行存储过程
2010-01-09 12:03 1991项目中需要采用存 ... -
Hibernate的一个异常的解决方案
2009-12-05 11:01 2404在项目中使用HQL时的遇有多个类的嵌套比较发生的异常: ... -
Hibernate的事件和拦截器体系
2009-12-01 13:53 2320持久层框架底层的拦截器机制是对诸如Spring等业务管理容器拦 ... -
Hibernate的拦截器和监听器
2009-12-01 13:52 1926最近项目需要,用到了Hibernate的拦截器和监听器,有些小 ... -
Hibernate的拦截器和监听器
2009-12-01 13:50 3742项目采用Spring构建,持久层技术采用的是 JPA规范 + ... -
Hibernate的注解many-to-one
2009-11-28 12:12 23235項目中一個實例: ... -
Hibernate查询语言HQL 八大要点
2009-11-18 13:15 1974本文讲述Hibernate查询语言HQL。Hibernat ... -
条件查询(Criteria Queries
2009-11-18 13:14 1728... -
Hibernate查询语言(Query Language), 即HQL
2009-11-18 13:05 2434Hibernate查询语言(Query L ... -
Hibernate中的配置属性
2009-11-15 17:40 1723hbm2ddl.auto的使用配置说明: <!-- ... -
Hibernate JPA 的索引的使用
2009-11-15 17:30 11846在Hibernate中Model中一个对象关 ...
相关推荐
Hibernate查询语句统一配置管理.doc
通用的资源管理:Spring的ApplicationContext能够管理SessionFactory,通过配置文件可以方便改写相关的配置。 有效的Session管理:Spring提供了有效、简单、安全的Hibernate Session处理。 IoC容器降低了DAO组件与...
2、能分析任一SELECT查询语句,提取查询结果的记录集字段名称、类型,生成查询的j2ee代码,以包括上述文件。 3、工具提供了一套完整的J2EE模板,您也可以对此模板做修改和配置,灵活运用。 4、这个工具同时又...
2、能分析任一SELECT查询语句,提取查询结果的记录集字段名称、类型,生成查询的j2ee代码,以包括上述文件。 3、工具提供了一套完整的J2EE模板,您也可以对此模板做修改和配置,灵活运用。 4、这个...
一种情况是因为解析器是一个语法宽松的解析器,他不象编译器一样对语法有非常严格的要求,所有有时可能一些重要的语句没有配置而无法事先发现. <![CDATA[ import java.util.List; Check.setLotteryResults...
统一资源标识符 372 默认的命名空间 372 使用命名空间 373 XML 文档规则 374 XML Schema 379 Schema和DTD的区别: 380 Schema的数据类型 380 样式表(XSL) 384 CSS样式表 384 XSL样式表 385 XSL的基本结构 386 XSL...
spring和Hibernate继承后,定义事务管理特性的时候查询为什么要定义为read-only? 答:因为添加、删除和更新都涉及到了数据库的修改,而查询并未涉及到数据库修改,所以只需要定义只读,这样可以提高效率,进行更加...
1、DML操作、自增值处理与返回、查询这些不同数据库操作差异很大的东西,都了统一的封装。 2、DDL操作、建表、删表、trunacte,Sequence创建和TABLE模拟Sequence等,都做了支持。 3、对SQL语法操作和函数的改写与...
[Pallet.java] 调色板,统一配色类 Java扫雷源码 Java生成自定义控件源代码 2个目标文件 Java实现HTTP连接与浏览,Java源码下载 1个目标文件 摘要:Java源码,网络相关,HTTP Java实现HTTP连接与浏览,Java源码...
[Pallet.java] 调色板,统一配色类 Java扫雷源码 Java生成自定义控件源代码 2个目标文件 Java实现HTTP连接与浏览,Java源码下载 1个目标文件 摘要:Java源码,网络相关,HTTP Java实现HTTP连接与浏览,Java源码...
JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...
JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...
JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...
JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...
JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...
JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...
JoSQL(SQLforJavaObjects)为Java开发者提供运用SQL语句来操作Java对象集的能力.利用JoSQL可以像操作数据库中的数据一样对任何Java对象集进行查询,排序,分组。 搜索自动提示 Autotips AutoTips是为解决应用系统对于...