`
江南白衣
  • 浏览: 549956 次
  • 来自: 广州
社区版块
存档分类
最新评论

使SQL/HQL/JDOQL更容易编写与重用(下)

阅读更多

让框架做点事情使SQL/HQL/JDOQL更容易写一些(上)

这篇讨论那个存在于普通SQL/HQL语句 与 JDBC/HIbernate之间的,一千几百行代码量的SQL处理层怎么写。

开源项目里,iBATIS这个以SQL为基础的ORM方案可以参考,另外还有它的新竞争对手ORBroker,后生可畏、后发制人,易用性方面走得更远。

1.针对SQL的换行和对齐,无非就是把它写到XML里面
   这样就可以不受Java String不能换行的鸟气了。
   这时的问题就是,饱含逻辑的SQL代码被从业务类里面分离出来了,我又不是很喜欢。
   还有一个未来的方案是用Groovy来写业务类,然后把它编译成Java类。可爱的Groovy支持
   String sql = "select *  from foo
                          where ....."

2.针对N多的?号参数,无非就是使用命名参数
    //把sql编译成PreparedStatement, 并对属性赋值
    String sql = "select * from dandy  where name=:name";
    query.setParam("name","gigix");

   做得好时,还应该支持内嵌的属性,解决属性同名的问题
   String sql = "select * from dandy,pet where dandy.name =:dandy.name and pet.name=:pet.name"
   query.setParam("dandy",gigix);
   query.setParam("pet",pet); 

    最后, 还应该支持对象里全部属性的自动绑定,简化书写
    //把gigix对象里的age,name属性自动绑定
    String sql = "update  dandy  set age=:age where name=:name "
    query.setObjectAsParams(gigix);

3. 解决拼接SQL(1)--优先使用Replace而非拼接SQL, 把SQL的概貌反映出来
    String sql = "select * from foo order by {{sortColumn}}";
     ....//条件判断语句
    query.setReplace("sortColumn","code");
 
    在整体的把握上, 要大大优于下面的迷宫阵法

    String sql="select * from foo";
    ...//条件判断
    sql+="order by code";

4.解决拼接SQL(2)--把可重用的SQL统一管理
    依然是整体把握优于局部拼接的思想
    对于可部分重用的SQL,现在的开发人员要不重用,完全Copy Paste,一旦要修改就改得山崩地裂
    要不就是把重用和不重用的部分复杂拼贴,又摆一个迷宫阵法出来。

    O/R Broker的做法值得参考:

<sql-statement id="getEmployees" result-object="Employee">
SELECT
*
FROM
Employee

<append-statement id-suffix="ById">
WHERE
EmployeeId = :id
</append-statement>

<append-statement id-suffix="BySalaryRange">
WHERE
Salary BETWEEN :lowSalary AND :highSalary
</append-statement>

</sql-statement>

然后你getEmployeesByID 和  getEmployeesBySalaryRange可以返回不同的SQL

5.拼接SQL(3)--Velocity/Freemarker永远都是文本生成的好工具

    Web页面生成也好,代码生成也好,Template Engine都被证明比pure java code好得多,否则大家怎么不个个去写Servelet呢,生成SQL当然也不例外。O/R Broker就有这个功能,聪明之处还在于,直接调用Velocity引擎就行了,不花自己一行代码。

<sql-statement id="getEmployee">	SELECT 		EmployeeId,EmployeeName,Salary,	FROM 		Employee	#if ($employee.id)		WHERE EmployeeId = :employee.id	#end</sql-statement>

  

 
                    



分享到:
评论

相关推荐

    SSh sql/hql 分页

    本文将围绕“SSh sql/hql 分页”的核心内容进行深入解析,帮助读者理解如何在SSH框架下实现分页功能。 #### 二、分页原理与实现机制 ##### 1. 分页基本概念 - **分页**:指将大量数据分成多个较小的数据集显示,...

    sql转换hql工具

    之前写好SQL,再到代码里面来写,语句复杂的看的时不时细节会忘记,用sql转换hql工具,直接贴近了就可以了;

    sql-beautify:美化SQL(HQL)的VS代码扩展

    SQL Beautify:grinning_face:格式化你杂乱无章的sql/hql代码:grinning_face: VS Code extension that beautifies SQL(HQL).:camera_with_flash: 安装 Installation:light_bulb: 注意 Attention这个插件在hql语句上...

    Hibernate_NSQL&HQL增删改操作

    ### Hibernate中的NSQL与HQL增删改操作详解 #### NSQL(Native SQL)与HQL(Hibernate Query Language) 在Hibernate框架中,进行数据库操作时,开发者可以选择使用两种不同的查询语言:NSQL(Native SQL)和HQL...

    HQL与SQL的区别

    本文将深入探讨HQL与SQL之间的区别,帮助读者更好地理解两者的特点及适用场景。 ### HQL与SQL的基本概念 **SQL** 是一种标准化的数据库查询语言,广泛用于关系型数据库管理系统(RDBMS),如MySQL、Oracle、SQL ...

    java查询源码-JNomad:扫描Java源代码以进行数据库查询(SQL/HQL),并根据查询的使用情况推荐可能的表索引

    java查询原始码Java源代码查询扫描器/索引建议 JNomad是一种用于扫描Java源代码库以进行HQL / SQL查询的实用程序,然后将其作为对PostgreSQL / MySQL数据库的解释语句来运行,以确定效率最高的查询和索引。 下载 ...

    监控sql输出-可以查看hql转成sql的结果值

    HQL是Hibernate框架提供的面向对象的查询语言,它允许开发者以Java类和对象的方式来编写查询,而不是直接写SQL。HQL将这些面向对象的查询转换为对应数据库系统的SQL语句,以实现与各种数据库的兼容。这个过程通常是...

    HQL语句 HQL语句

    HQL语句 HQL语句 HQL语句 HQL语句 HQL语句

    SQL、Hive SQL等SQL血缘解析工具

    // 测试用例如下 // 设置元数据服务 Delegate.getDelegate().setMetaColumnService(new IMetaColumnService() { @Override public List&lt;String&gt; queryMetaColumn(String dbName, String tableName) { return ...

    HQL Eclipse Plugins 配置教程

    不喜欢使用myEclipse的朋友可以尝试下 最近在项目中使用Hibernate,由于需要使用HQL,找了很多资料,大都是MyEclipse中自带的HQL工具。 由于MyEclipse是收费的,速度不是很理想。所以在网上找到了一个elipse插件 ...

    JPA--HQL查询(手动写原生查询sql,复杂查询必备).pdf

    JPA--HQL查询(手动写原生查询sql,复杂查询必备) JPA(Java Persistence API)是一种JavaEE标准,用于持久化数据,HQL(Hibernate Query Language)是 Hibernate 框架提供的一种查询语言,它允许开发者使用面向...

    HQL批量插入、更新和删除

    虽然HQL提供了方便的语法糖,但在某些情况下,直接使用原生SQL可能更加高效。特别是在复杂的批量操作中,原生SQL能够提供更多的灵活性和控制力。 1. **原生SQL的优势**:直接使用原生SQL可以更好地控制查询细节,如...

    hql开窗函数.sql

    hql开窗函数.sql

    HQL语句查询

    HQL语句查询

    HQL语句详解Select/update/deletefromwhere...

    在探讨HQL(Hibernate Query Language)时,我们首先要了解它是一种用于Hibernate框架中的查询语言,其语法结构与标准SQL查询语言非常相似,但又针对对象关系映射(ORM)进行了优化。本文将详细介绍HQL的基本用法...

    HQL与SQL的区别[文].pdf

    HQL与SQL的区别 HQL(Hibernate Query Language)是一种基于对象的查询语言,主要用于 Hibernate 框架中对数据库的查询操作。与 SQL 相比,HQL 的查询方式和语法都有所不同。 首先,HQL 的查询目标是对象,而不是...

    精通HQL(word格式)

    2. **移植性**:由于是面向对象的,HQL与具体的数据库方言解耦,使得应用更容易跨数据库迁移。 3. **自动类型转换**:HQL自动处理Java对象与数据库值之间的类型转换。 4. **对象导航**:通过对象关系,HQL可以方便地...

    Hibernate中的查询:HQL、Criteria、原生SQl

    HQL适用于大多数常规查询,其面向对象的特性使代码更易于理解。Criteria API则提供了更动态的查询构造能力。而原生SQL则在处理特定数据库特性和性能优化时不可或缺。选择哪种查询方式,应根据项目需求和实际情况进行...

    HQL语句大全HQL语句大全

    HQL语法接近于SQL但又有所不同,它允许开发者以面向对象的方式来表达查询逻辑,使得查询更加直观且易于理解。 #### 二、HQL的基本用法 1. **获取Hibernate Session** - 在执行任何HQL查询之前,首先需要通过`...

Global site tag (gtag.js) - Google Analytics