在hibernate使用的过程中.我们通常需要对结果进行解释.
Hibernate为我们提供了以下3种解释方法:
Transformers.ALIAS_TO_ENTITY_MAP //把输出结果转换成map Transformers.TO_LIST //把结果按顺序排进List ransformers.aliasToBean(target) //把结果通过setter方法注入到指定的对像属性中
在Hibernate中Transformers的所有转换都是需要实现ResultTransformer接口
详解ALIAS_TO_ENTITY_MAP ,太简单了就是把key和值直接转换到Map当中
public Object transformTuple(Object[] tuple, String[] aliases) { Map result = new HashMap(tuple.length); for ( int i=0; i<tuple.length; i++ ) { String alias = aliases[i]; if ( alias!=null ) { result.put( alias, tuple[i] ); } } return result; }
详解TO_LIST,转换过程很简单,就是把value转换成List对像
public Object transformTuple(Object[] tuple, String[] aliases) { return Arrays.asList( tuple ); }
详解aliasToBean,转换过程就是通过读取查询后的字段.然后通过使用setter方法注入到目标对像中
public AliasToBeanResultTransformer(Class resultClass) { if ( resultClass == null ) { throw new IllegalArgumentException( "resultClass cannot be null" ); } this.resultClass = resultClass; //定义属性访问器. propertyAccessor = new ChainedPropertyAccessor( new PropertyAccessor[] { PropertyAccessorFactory.getPropertyAccessor( resultClass, null ), PropertyAccessorFactory.getPropertyAccessor( "field" ) } ); } public Object transformTuple(Object[] tuple, String[] aliases) { Object result; try { if ( setters == null ) { setters = new Setter[aliases.length]; for ( int i = 0; i < aliases.length; i++ ) { String alias = aliases[i]; if ( alias != null ) { //初始指定的setter方法 setters[i] = propertyAccessor.getSetter( resultClass, alias ); } } } //实例实体对像 result = resultClass.newInstance(); for ( int i = 0; i < aliases.length; i++ ) { if ( setters[i] != null ) { //向setter方法中指定的属性注入值 setters[i].set( result, tuple[i], null ); } } } catch ( InstantiationException e ) { throw new HibernateException( "Could not instantiate resultclass: " + resultClass.getName() ); } catch ( IllegalAccessException e ) { throw new HibernateException( "Could not instantiate resultclass: " + resultClass.getName() ); } return result; }
相关推荐
总结起来,Hibernate的本地SQL查询功能为我们提供了一种灵活的方式来执行复杂的数据库操作,同时通过`addEntity()`、`addScalar()`和`Transformers.aliasToBean()`等方法,我们可以方便地将查询结果封装成Java对象,...
使用本地sql语句查询后,无需再使用Object对查询结果进行强制转换,而是直接将查询结果放到实体Bean里了。 PS: 其实只有一版,这里只所以叫最终版是因为该附件我上传了好几天传不上去,到最后报告说‘资源已经存在...
本篇文章将深入探讨在Hibernate3中如何通过Native SQL查询部分字段,并将其映射到具体的Java对象上。这种方式在处理一些特定的、效率较高的SQL查询时非常有用。 首先,我们需要理解Hibernate中的`SQLQuery`接口,这...
Criteria API是Hibernate提供的另一种查询方式,它允许开发者通过构建对象化的查询条件来执行数据库查询。下面是如何使用Criteria API查找特定用户的示例: ```java Session session = sessionFactory.openSession...
- Native SQL:直接执行SQL查询,适用于Hibernate无法满足的复杂场景。 - Criteria API:动态构建查询,无需预先编写查询字符串。 十、JPA支持 Hibernate 3.2增加了对Java Persistence API(JPA)的支持,使得...
虽然Hibernate提供了面向对象的查询方式,但在某些场景下,可能需要直接使用SQL进行查询。`Session.createSQLQuery()` 可以创建原生的SQL查询,返回的结果可以映射到POJOs或者使用ResultTransformer转换。 总结,...
HQL(Hibernate Query Language)是Hibernate框架提供的一种面向对象的查询语言,它是对SQL的封装,使得开发者可以使用面向对象的方式来处理数据库查询,避免了直接操作SQL带来的复杂性和对象与关系之间的转换问题。...
同时,Hibernate还提供了Criteria API作为另一种查询方式,它提供了一种更面向对象的查询方式,但底层也会被转换为HQL。 此外,HQL支持动态查询,这是一种基于参数的查询,可以避免SQL注入问题。例如: ```java ...
6. Native SQL支持:虽然Hibernate主要关注ORM,但它也允许直接执行原生的SQL查询,以满足特定需求或利用数据库特定的功能。 7. Event Listeners:Hibernate允许注册事件监听器,以便在特定的操作(如插入、更新、...
7. Native SQL:在某些场景下,可能需要直接使用SQL进行查询,Hibernate支持直接执行原生SQL查询,并能自动处理结果集。 8. 事务管理:理解事务在数据库操作中的重要性,学习如何在Hibernate中使用Transaction API...
在Hibernate中,使用原生SQL主要有以下几种方式: 1. **Session.createSQLQuery()**: 这是最常见的方法,通过SessionFactory的openSession()创建Session实例,然后调用createSQLQuery()方法,传入SQL语句。例如: ...
3. ** Criteria 查询**:提供动态构建查询的方式,无需预先编写SQL。 4. **缓存机制**:了解如何利用二级缓存提高性能。 5. **懒加载和级联操作**:理解对象之间的关联和何时加载关联数据。 6. **多对一、一对多、多...
在Hibernate中进行查询的方式有很多,包括HQL、Criteria API以及Native SQL等。本篇主要关注的是使用Criteria API来进行查询。 ### Criteria API Criteria API是Hibernate提供的一个非常强大的查询工具,它可以...
- **Query**:Hibernate 提供了多种查询方式,其中 HQL 是一种类似于 SQL 的查询语言,但它是面向对象的。 #### 五、配置与环境搭建 - **配置文件**:通常使用 `hibernate.cfg.xml` 文件来配置 Hibernate 的各种...
8. Native SQL查询:虽然Hibernate提供了面向对象的查询方式,但在某些特定场景下,可能需要使用原生的SQL查询,Hibernate也支持这种操作。 9. 事务管理:在Hibernate中,事务处理是关键部分,需要理解如何使用...
除了基本的Session和Query接口,Hibernate还提供了Criteria查询、Native SQL查询等更高级的功能,使得在数据库操作上具有更高的灵活性和便捷性。同时,Hibernate还支持二级缓存,可以缓存跨Session的对象,但二级...
Hibernate 提供了两种主要的查询方式:HQL(Hibernate 查询语言)和 Criteria 查询。HQL 类似于 SQL,但针对对象模型进行设计。Criteria 查询则提供了一种更具面向对象的查询方式,通过构建查询条件来获取数据。 ##...
4. **Query Execution**:Hibernate提供了多种查询方式,包括HQL(Hibernate Query Language)、Criteria API和Native SQL等,以满足不同场景下的查询需求。 5. **Lazy Loading**:即延迟加载,是一种优化技术,...