`
qingzuochen
  • 浏览: 275651 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Hibernate的参数绑定

阅读更多
参数绑定:
都支持位置绑定和命名绑定,
如:
session.createQuery("from Person where id=:id").setInteger("id",1);
session.createQuery("from Person where id=?").setInteger(0,1);


基本的参数绑定:
setString()
setInteger();
等...


特殊的参数绑定
(1)setEntity()
Customer customer = new Customer();
customer.setId(1);
session.createQuery("from Order o where o.customer =:customer ").setEntity("customer", customer);

  等价于
session.createQuery("from Order o where o.customer.id =:customerid ").setInteger("customerid", 1);

(2)setParameter()
Query query = session.createQuery("from Order o where o.customer=:customer and o.orderNumber like :orderNumber");
query.setParameter("customer", customer, Hibernate.entity(Customer.class));

query.setParameter("orderNumber", orderNumber, Hibernate.STRING);
setParameter()方法的第三个参数显示指定Hibernate映射类型.以下代码用于绑定一个客户化映射类型.(关于客户化映射类型,参见:http://www.iteye.com/topic/182797)
Query query = session.createQuery("from Customer c where c.homeAddress=:homeAddress");
query.setParameter("homeAddress",homeAddress,Hibernate.custom(AddressUserType.class));

  对于某些参数,Hibernate能跟根据参数值的Java类型推断出对应的映射类型,此时不需要在setParameter()方法中显式指定映射类型,如:
Query query = session.createQuery("from Order o where o.customer=:customer and o.orderNumber like :orderNumber");
query.setParameter("customer", customer);
query.setParameter("orderNumber", orderNumber);

  对于日期类型,如java.util.Date类型,会对应多种Hibernate映射类型,如Hibernate.DATE或Hibernate.TIMESTAMP,因此必须在setParameter()方法中显式指定到底对应哪种Hibernate映射类型,如:
Query query = session.createQuery("from Customer c where c.birthday=:birthday");
query.setParameter("birthday",birthday,Hibernate.DATE);

(3)setProperties()方法:用于把命名参数与一个对象的属性值绑定,如:
Customer customer = new Customer();
customer.setName("Tom");
customer.setAge(21);
Query query = session.createQuery("from Customer as c where c.name=:name and c.age="age");
query.setProperties(customer);

  setProperties()调用setParameter()方法,setParameter()方法再根据Customer对象的属性的Java类型来推断Hibernate映射类型.如果命名参数为日期类型,不能通过setProperties()方法来绑定.
  参数绑定对null是安全的.
分享到:
评论

相关推荐

    Hibernate 参数配置详解

    ### Hibernate 参数配置详解 #### 一、概述 Hibernate 是一款流行的 Java 持久层框架,它通过提供一套丰富的 API 和配置选项来简化数据库访问。本文档将深入探讨 Hibernate 的核心配置参数及其功能,帮助开发者更...

    hibernate参数配置

    **Hibernate参数配置详解** 在Java开发中,Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作。为了使Hibernate能更好地适应不同项目的需求,开发者可以通过配置一系列参数来调整其行为。...

    springmvc入门参数绑定ssm整合

    SpringMVC入门参数绑定SSM整合 SpringMVC是一种基于MVC模式的Web应用程序框架,它是Spring框架的一个模块,用于开发Web项目。下面是SpringMVC入门参数绑定SSM整合的知识点总结: 一、SpringMVC概述 SpringMVC是...

    让hibernate输出sql语句参数配置.doc

    hibernate.session_factory_name 参数用于 SessionFactory 创建后,将自动使用这个名字绑定到 JNDI 中。其取值为 jndi/composite/name。 7. hibernate.max_fetch_depth hibernate.max_fetch_depth 参数用于设置...

    Hibernate 参数设置一览表(强烈推荐)

    在使用Hibernate进行应用程序开发时,正确配置Hibernate参数是至关重要的,因为这些参数直接影响到性能、内存使用和事务处理等关键方面。以下是对Hibernate参数设置的详细解释: 1. **hibernate.connection.driver_...

    Hibernate的JNDI绑定分析.doc

    ### Hibernate的JNDI绑定分析 #### 一、概述 Hibernate是一个开源的对象关系映射(ORM)框架,它简化了Java应用程序与数据库之间的交互过程。JNDI(Java Naming and Directory Interface)则是一种广泛使用的API,...

    hibernate 配置属性参数详情(全)

    5. **hibernate.session_factory_name**:用于在JNDI中绑定SessionFactory的名称,便于其他组件获取SessionFactory实例。 6. **hibernate.max_fetch_depth**:控制单向关联的外连接抓取深度,较高的值可能导致更多...

    2022年Hibernate的JNDI绑定分析Java教程.docx

    在构造器里面,Hibernate 会调用 `SessionFactoryObjectFactory` 的 `addInstance` 方法,并且把自身(SessionFactory 的实例)作为参数传递。 在 `addInstance` 方法中,Hibernate 会获取一个初始上下文(Initial ...

    第12章Spring MVC参数绑定的验证

    - **数组绑定**:Spring MVC支持将请求参数绑定到数组。比如,URL中的`ids[]=1&ids[]=2`会映射到`int[] ids`参数。 - **集合绑定**:同样,请求参数可以绑定到List、Set等集合类型。例如,JSON数组`["apple", ...

    Hibernate3的配置参数汇总

    - `hibernate.session_factory_name`:SessionFactory创建后,用此名称绑定到JNDI。 - `hibernate.max_fetch_depth`:控制外连接抓取的深度,默认值为0表示关闭。 - `hibernate.default_batch_fetch_size`:设置...

    hibernate 参数汇总

    - `hibernate.session_factory_name`:SessionFactory 创建后,可以将其绑定到 JNDI 中的指定名称。 - `hibernate.max_fetch_depth`:设置外连接抓取的深度,值为 0 表示关闭默认的外连接抓取。 - `hibernate....

    hibernate显示不带?的完整sql

    这些配置会捕获Hibernate执行的SQL语句及其参数绑定,从而在控制台看到完整的、参数化的SQL。 在开发环境中,这样的配置非常有用,因为它能帮助我们理解查询行为,定位潜在的性能瓶颈,或者检查数据是否按照预期...

    Hibernate各种查询:联表查询 分页查询 位置参数查询(?) 占位符查询(冒号查询) 统计查询

    总的来说,Hibernate的`Criteria`、`Query`以及QBC(Query By Criteria)提供了灵活且强大的查询手段,它们不仅支持基本的单表查询,还能处理复杂的联表、分页、参数绑定和统计需求,是Java开发者进行数据库操作的...

    hibernate 实践 Query详解

    总结来说,这个实践主要涵盖了Hibernate的Query接口的使用,包括HQL查询的编写、参数绑定以及事务管理。理解并熟练运用这些知识,对于进行基于Hibernate的数据库操作至关重要。在实际开发中,开发者需要根据业务需求...

    hibernate实现动态SQL查询

    // 设置参数绑定 query.setParameter("param1", value1); query.setParameter("param2", value2); List[]> result = query.list(); ``` 八、总结 通过XML配置SQL和FREEMARKER模板解析,Hibernate提供了实现动态SQL...

    Hibernate教程

    绑定参数 11.4.1.5. 分页 11.4.1.6. 可滚动遍历(Scrollable iteration) 11.4.1.7. 外置命名查询(Externalizing named queries) 11.4.2. 过滤集合 11.4.3. 条件查询(Criteria queries) 11.4.4. 使用原生SQL的...

    hibernate jsp 分页Demo

    10. **数据安全**: 在处理用户输入以构造查询时,必须防止SQL注入攻击,可以通过预编译语句(PreparedStatement)或者使用Hibernate的参数绑定机制来实现。 综上所述,"hibernate jsp 分页Demo"项目是一个教学实例...

    Hibernate核心配置文件对照表

    - `hibernate.current_session_context_class`: 当前Session上下文类,可以是`thread`(线程绑定)或`jta`(Java Transaction API)。 4. **日志配置** - `hibernate.show_sql`: 如果设置为`true`,Hibernate将在...

    Hibernate的查询方式

    有两种主要的参数绑定形式: - 使用问号(`?`)作为占位符,然后通过`setXXX()`方法绑定具体值。例如,按学生名及年龄查询Students对象: ```java Query query = session.createQuery("from Students s where s...

    Hibernate API

    这两个接口提供了丰富的查询功能,包括参数绑定、分页、排序等。 5. **org.hibernate.annotations package** 这个包包含了各种注解,如`@Entity`、`@Table`、`@Id`、`@GeneratedValue`等,它们用于标记Java实体类...

Global site tag (gtag.js) - Google Analytics