`

hibernate本地sql(native查询)查询的3种转换方式

 
阅读更多

在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查询结果封装成对象

    总结起来,Hibernate的本地SQL查询功能为我们提供了一种灵活的方式来执行复杂的数据库操作,同时通过`addEntity()`、`addScalar()`和`Transformers.aliasToBean()`等方法,我们可以方便地将查询结果封装成Java对象,...

    hibernate将本地SQL查询结果封装成对象(最终)

    使用本地sql语句查询后,无需再使用Object对查询结果进行强制转换,而是直接将查询结果放到实体Bean里了。 PS: 其实只有一版,这里只所以叫最终版是因为该附件我上传了好几天传不上去,到最后报告说‘资源已经存在...

    hibernate3中通过nativesql或取部分字段并映射为具体对象的实现

    本篇文章将深入探讨在Hibernate3中如何通过Native SQL查询部分字段,并将其映射到具体的Java对象上。这种方式在处理一些特定的、效率较高的SQL查询时非常有用。 首先,我们需要理解Hibernate中的`SQLQuery`接口,这...

    hibernate查询方法

    Criteria API是Hibernate提供的另一种查询方式,它允许开发者通过构建对象化的查询条件来执行数据库查询。下面是如何使用Criteria API查找特定用户的示例: ```java Session session = sessionFactory.openSession...

    hibernate-3.2源代码

    - Native SQL:直接执行SQL查询,适用于Hibernate无法满足的复杂场景。 - Criteria API:动态构建查询,无需预先编写查询字符串。 十、JPA支持 Hibernate 3.2增加了对Java Persistence API(JPA)的支持,使得...

    hibernate5--4.检索方式及策略

    虽然Hibernate提供了面向对象的查询方式,但在某些场景下,可能需要直接使用SQL进行查询。`Session.createSQLQuery()` 可以创建原生的SQL查询,返回的结果可以映射到POJOs或者使用ResultTransformer转换。 总结,...

    hibernate查询语言--HQL

    HQL(Hibernate Query Language)是Hibernate框架提供的一种面向对象的查询语言,它是对SQL的封装,使得开发者可以使用面向对象的方式来处理数据库查询,避免了直接操作SQL带来的复杂性和对象与关系之间的转换问题。...

    Hibernate查询语言

    同时,Hibernate还提供了Criteria API作为另一种查询方式,它提供了一种更面向对象的查询方式,但底层也会被转换为HQL。 此外,HQL支持动态查询,这是一种基于参数的查询,可以避免SQL注入问题。例如: ```java ...

    Hibernate 3.2核心包

    6. Native SQL支持:虽然Hibernate主要关注ORM,但它也允许直接执行原生的SQL查询,以满足特定需求或利用数据库特定的功能。 7. Event Listeners:Hibernate允许注册事件监听器,以便在特定的操作(如插入、更新、...

    Hibernate A Developer‘s Notebook教材

    7. Native SQL:在某些场景下,可能需要直接使用SQL进行查询,Hibernate支持直接执行原生SQL查询,并能自动处理结果集。 8. 事务管理:理解事务在数据库操作中的重要性,学习如何在Hibernate中使用Transaction API...

    Hibernat使用原生的SQL

    在Hibernate中,使用原生SQL主要有以下几种方式: 1. **Session.createSQLQuery()**: 这是最常见的方法,通过SessionFactory的openSession()创建Session实例,然后调用createSQLQuery()方法,传入SQL语句。例如: ...

    Hibernate example

    3. ** Criteria 查询**:提供动态构建查询的方式,无需预先编写SQL。 4. **缓存机制**:了解如何利用二级缓存提高性能。 5. **懒加载和级联操作**:理解对象之间的关联和何时加载关联数据。 6. **多对一、一对多、多...

    Hibernate学习资料(离线查询)

    在Hibernate中进行查询的方式有很多,包括HQL、Criteria API以及Native SQL等。本篇主要关注的是使用Criteria API来进行查询。 ### Criteria API Criteria API是Hibernate提供的一个非常强大的查询工具,它可以...

    hibernate_reference.pdf

    - **Query**:Hibernate 提供了多种查询方式,其中 HQL 是一种类似于 SQL 的查询语言,但它是面向对象的。 #### 五、配置与环境搭建 - **配置文件**:通常使用 `hibernate.cfg.xml` 文件来配置 Hibernate 的各种...

    黑马程序员_hibernate框架开发2016版讲义和笔记资料_day02

    8. Native SQL查询:虽然Hibernate提供了面向对象的查询方式,但在某些特定场景下,可能需要使用原生的SQL查询,Hibernate也支持这种操作。 9. 事务管理:在Hibernate中,事务处理是关键部分,需要理解如何使用...

    hibernate框架

    除了基本的Session和Query接口,Hibernate还提供了Criteria查询、Native SQL查询等更高级的功能,使得在数据库操作上具有更高的灵活性和便捷性。同时,Hibernate还支持二级缓存,可以缓存跨Session的对象,但二级...

    Hibernate3.2中文文档

    Hibernate 提供了两种主要的查询方式:HQL(Hibernate 查询语言)和 Criteria 查询。HQL 类似于 SQL,但针对对象模型进行设计。Criteria 查询则提供了一种更具面向对象的查询方式,通过构建查询条件来获取数据。 ##...

    Hibernate原理

    4. **Query Execution**:Hibernate提供了多种查询方式,包括HQL(Hibernate Query Language)、Criteria API和Native SQL等,以满足不同场景下的查询需求。 5. **Lazy Loading**:即延迟加载,是一种优化技术,...

Global site tag (gtag.js) - Google Analytics