`

oracle 绑定变量&&hibernate应用

 
阅读更多
oracle 中,对于一个提交的sql语句,存在两种可选的解析过程, 一种叫做硬解析,一种叫做软解析.
一个硬解析需要经解析,制定执行路径,优化访问计划等许多的步骤.硬解释不仅仅耗费大量的cpu,更重要的是会占据重要的们闩(latch)资源,严重的影响系统的规模的扩大(即限制了系统的并发行),而且引起的问题不能通过增加内存条和cpu的数量来解决。
之所以这样是因为门闩是为了顺序访问以及修改一些内存区域而设置的,这些内存区域是不能被同时修改。当一个sql语句提交后,oracle会首先检查一下共享缓冲池(shared pool)里有没有与之完全相同的语句,如果有的话只须执行软分析即可,否则就得进行硬分析。
而唯一使得oracle 能够重复利用执行计划的方法就是采用绑定变量。绑定变量的实质就是用于替代sql语句中的常量的替代变量。绑定变量能够使得每次提交的sql语句都完全一样。
普通sql语句:

SELECT fname, lname, pcode FROM cust WHERE id = 674;
SELECT fname, lname, pcode FROM cust WHERE id = 234;
SELECT fname, lname, pcode FROM cust WHERE id = 332;
含绑定变量的sql 语句:
SELECT fname, lname, pcode FROM cust WHERE id = :cust_no;

Sql*plus 中使用绑定变量:
sql> variable x number;
sql> exec := 123;
sql> SELECT fname, lname, pcode FROM cust WHERE id =:x;

pl/sql
pl/sql很多时候都会自动绑定变量而无需编程人员操心,即很多你写得sql语句都会自动利用绑定变量,如下例所示:

create or replace procedure dsal(p_empno in number)
as
begin
update emp
set sal=sal*2
where empno = p_empno;
commit;
end;
/


也许此时你会想要利用绑定变量来替代p_empno,但是这是完全没有必要的,因为在pl/sql中,引用变量即是引用绑定变量。
但是在pl/sql中动态sql并不是这样。
在vb,java以及其他应用程序中都得显式地利用绑定变量。
对于绑定变量的支持不仅仅限于oracle,其他RDBMS向SQLSERVER也支持这一特性。
但是并不是任何情况下都需要使用绑定变量, 下面是两种例外情况:
1.对于隔相当一段时间才执行一次的sql语句,这是利用绑定变量的好处会被不能有效利用优化器而抵消
2.数据仓库的情况下。


####################################################

hibernate绑定参数类型
hibernate绑定参数类型

(1)使用 ? 指定参数
...
Query query = session.createQuery("from Student s where 
              s.age > ? and s.name like ? ");
query.setInteger(0,18);
query.setString(1,"%abc%");
...

(2)使用 : 后跟变量的方法设置参数
...
Query query = session.createQuery("from Student s where 
              s.age > :minAge and s.name like :likeName ");
query.setInteger("minAge",18);
query.setString("likeName","%ABC%");
...


(3)setEntity()方法

setEntity()方法把参数与一个持久类的实例绑定,例如下面的示例
...
Team team = (Team)session.get(Team.class,"5f45saf45sdf456f");
Query query = session.createQuery("from Student s where s.team = :team");
query.setEntity("team",team);  //设置参数为team实例
...

注:上述的team对象可以是持久对象也可以是脱管对象

(4)setParameter()方法

setParameter()方法的全称是setParameter(String paraName,实例,实例类型),这个方法
可以绑定任何类型的参数.其中第三个参数可以省略,hibernate要以根据实例推断出绝大部分
对应的映射类型.
下面将(3)中的代码做一下改动
query.setParameter("team",team,Hibernate.entity(Team.class)).
或者query.setparameter("team",team).

(5)setPorperties()方法

该方法的全称是setProperties(类实例).它将类实例的属性名与参数值相对应
...
Student student = new Student();
student.setAge("18");
Query query = sesion.createQuery("from Student s where s.age = :age");
query.setProperties(student);  //设置参数为student对象
...

注意:HQL语句中的变量age必须和student的属性age同名,否则会出错.

分享到:
评论

相关推荐

    oracle连接所用的oci

    6. 处理结果集,oci_fetch()函数用于获取一行数据,oci_bind_by_name()用于绑定变量。 7. 管理事务,oci_commit()用于提交事务,oci_rollback()用于回滚事务。 8. 断开连接,使用oci_logoff()函数关闭会话。 9. 错误...

    JAVA WEB 项目 Oracle数据库技术

    6. **性能优化**:Oracle提供了许多性能优化工具和技术,如 Explain Plan分析SQL执行计划,绑定变量,分区表,物化视图,以及数据库缓存策略等。 7. **安全管理**:Oracle提供了精细的权限管理机制,包括用户、角色...

    oracle,ssh总结资料

    数据库管理员(DBA)通常会进行性能优化,如使用EXPLAIN PLAN分析SQL执行计划,调整表分区,以及使用绑定变量提升查询效率。 【SQLServer数据库知识】 SQL Server是微软公司推出的一种关系型数据库管理系统,广泛...

    Oracle PlSql 存储过程

    Oracle PlSql 存储过程详解 Oracle PlSql 存储过程是 Oracle 数据库中的一种编程语言,用于实现复杂的业务逻辑和数据处理。...本地动态 SQL 可以使用 EXECUTE IMMEDIATE 语句来执行,并可以使用绑定变量来提高性能。

    Oracle笔试题.pdf

    12. PGA 组成部分:PGA (Program Global Area) 包括会话变量、分析信息和排序空间,但不包括绑定信息,绑定信息属于 SGA(System Global Area)的一部分。 13. 创建数据库所需条件:在 Oracle 10G 中,创建数据库并...

    java hibernate不同数据库之间的动态切换

    在本文中,我们将深入探讨如何在Java Hibernate应用中实现不同数据库之间的动态切换。 首先,我们需要理解Hibernate的核心配置文件`hibernate.cfg.xml`。在这个文件中,通常会指定数据库连接的信息,如URL、用户名...

    oracle数据库语句工具

    例如,Oracle提供了一种名为"SQL Trace"的功能,它可以记录SQL语句的执行细节,包括绑定变量的值。此外,还可以使用第三方工具如Toad、PL/SQL Developer或SQL Developer,它们提供了更友好的界面来查看和分析SQL执行...

    Oracle教程

    这本书可能总结了一系列SQL优化技巧,包括选择合适的索引、避免全表扫描、使用绑定变量、优化JOIN操作,以及利用Oracle的性能监控工具(如SQL Trace和 tkprof)进行问题定位。 5. "Oracle 9i DBA指南.pdf":Oracle ...

    Java Oracle 数据库开发指南

    13. 性能优化:了解Oracle的性能调优工具,如SQL*Plus、Explain Plan和SQL Tuning Advisor,以及如何通过索引、分区、绑定变量等方式提升查询性能。 14. 安全性:学习如何在Oracle中设置用户权限、角色和访问控制,...

    基于Struts2+Hibernate+Spring的公司员工管理系统

    【基于Struts2+Hibernate+Spring的公司员工管理系统】是一个典型的Java企业级应用程序,它利用了Struts2、Hibernate和Spring这三大主流框架构建。这个系统设计的主要目标是为了有效地管理和组织公司的员工信息,提高...

    Hibernate开发学习手册

    2.4章节将展示如何通过Hibernate连接不同的数据库,如SQL Server、MySQL和Oracle。这通常需要在配置文件中正确配置数据库驱动和连接参数。 2.5章节将引导读者创建持久化类和对应的映射文件。持久化类是Java对象,...

    oracle-jdbc分页实现(只需传入sql语句即可实现分页)

    记得在使用时注意SQL注入的安全问题,考虑性能优化,如使用绑定变量,避免全表扫描等。 总之,Oracle JDBC分页实现涉及SQL查询语句的设计和Java代码的配合,合理利用Oracle的特性可以有效地实现高效、灵活的分页...

    Hibernate Struts 集成的例子

    Hibernate支持多种数据库,包括MySQL、Oracle、SQL Server等。 **二、Struts框架** Struts是Apache软件基金会的一个开源项目,基于MVC设计模式,主要用于构建Java Web应用程序。它将业务逻辑、控制流程和显示逻辑...

    oracle常用命令

    在Oracle数据库操作中,可以利用`ThreadLocal`将`Session`对象与线程绑定,确保每个请求有自己的数据库会话,提高并发处理能力。 3. **超级管理员登录**: - 超级管理员通常以`sys`用户身份登录,使用`sqlplus / ...

    weblogic配置大全

    WebLogic是Oracle公司的一款企业级应用服务器,它提供了全面的Java EE(Enterprise Edition)应用服务,包括动态集群、安全管理、监控和诊断等。在本配置大全中,我们将涵盖WebLogic的安装、配置、部署以及与Oracle...

    用SSH+DWR+Oracle做的模拟Google搜索

    本实例是用SSH+DWR+Oracle10g做的模拟Goolge搜索的守完整实例 内容包括: 1、给每行绑定一个鼠标移上和移走事件 onmouseover onmouseout 2、焦点如果从文本框转移动显示的层中 设置了文本框失去焦点事件,目的是让...

    sql实例教程+课件

    这包括选择合适的索引、减少数据扫描、优化JOIN操作、避免全表扫描、使用绑定变量等策略。此外,分析和理解执行计划也是优化的关键步骤。 五、安全性与权限管理 SQL提供GRANT和REVOKE语句来控制用户对数据库对象的...

    ssh(structs,spring,hibernate)框架中的上传下载

     需要指定的是Spring 1.2.5提供了两套Hibernate的支持包,其中Hibernate 2相关的封装类位于org.springframework.orm.hibernate2.*包中,而Hibernate 3.0的封装类位于org.springframework.orm.hibernate3.*包中,...

    java学习重点总结

    Oracle是广泛使用的商业关系型数据库管理系统,其强大的性能和稳定性使其在企业级应用中占据重要地位。使用JDBC连接Oracle,需要了解如何配置数据源、建立连接、执行SQL以及处理结果集。 在Web开发领域,Struts是一...

    web-struts

    在处理完Action后,可以通过ActionForward或Result配置返回相应的视图页面,将数据绑定到JSP标签或模板变量上,展示给用户。 **7. 数据校验** Struts 2提供了强大的数据校验机制,可以对表单提交的数据进行验证。...

Global site tag (gtag.js) - Google Analytics