`
编程足球
  • 浏览: 257866 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

Hibernate 原生SQL查询反射到POJO

 
阅读更多
在使用hibernate过程中有许多查询需要用到sql原生语句进行查询。同时又希望查询结果可以直接保存到POJO对象中。下面给出hibernate的实现方式。

需求: 查询如下表:



查询结果的同时判断该节点是否是叶子节点(树形结构),可以通过以下查询语句来实现:

select 
	id ,
    element_value as 'text',
    parent as 'pid',
	CASE (
          select 
              count(child.id) 
          from 
              element_value_set child 
          where 
              child.parent = par.id
        ) 
    when 0 then 1 
    else 0 
    END as leaf 
from 
    element_value_set par 
where 
	par.parent = ?

1. 对应的树形结构POJO
package com.ruijie.db.hibernate.mapping;
/**
 * @author Ext 树结构
 *
 */
public class Tree {
	private int id;
	private int pid;
	private String text;
	private boolean leaf;
       // TODO : 对应的get和set方法
}


2. 在查询的过程中注意查询结果列明要和pojo中的元素名相同.如果不一样可以通过as 来进行别名。

@SuppressWarnings("unchecked")
	public List<Tree> getTreeValueByQueryBean(int pid) {
		final String sql = "select id ,parent as 'pid',element_value as 'text',case (select count(child.id) from element_value_set child where child.parent = par.id) when 0 then 1 else 0 end as leaf  from element_value_set par where par.parent = " + pid;
		// 要进行强制转换
		List<Tree> tree = (List<Tree>)hibernateTemplate.execute(new HibernateCallback(){
			@Override
			public Object doInHibernate(Session session)
					throws HibernateException, SQLException {
				SQLQuery query = session.createSQLQuery(sql);
				// 指定查询结果属性类型
				query.addScalar("id",Hibernate.INTEGER);
				query.addScalar("text", Hibernate.STRING);
				query.addScalar("leaf",Hibernate.BOOLEAN);
				query.addScalar("pid", Hibernate.INTEGER);
				// 进行结果集的转换
				query.setResultTransformer(Transformers.aliasToBean(Tree.class));
				// 查询结果并且放回
				return query.list();
			}});
		return tree;
	}
  • 大小: 11 KB
分享到:
评论

相关推荐

    Hibernate3教程

    - 直接编写原生SQL语句进行查询。 - **3.2.2 条件查询** - 使用WHERE子句添加过滤条件。 - **3.2.3 新增** - 编写INSERT语句来插入新的记录。 - **3.2.4 修改** - 使用UPDATE语句来修改现有的记录。 - **...

    Hibernate

    - **执行方式**:通过`createSQLQuery()`方法执行原生SQL查询。 #### 关联关系映射 - **双向单联**:两个实体之间存在一对一的关系,且双方都维护着这段关系。 - **单向双联**:一方维护关系,另一方不维护,常见于...

    maven+hibernate

    另外,还可以使用原生的SQL查询并通过`@NamedNativeQuery`进行配置。 在这个"Spring4Hibernate5MVC"项目中,开发者可能会创建一个简单的CRUD应用,展示如何在Spring MVC的环境中使用Hibernate进行数据库交互。这...

    BeetlSQL 2.10中文文档

    BeetSql是一个全面而强大的DAO工具,它融合了Hibernate与Mybatis的优点,特别适合那些认为SQL语言处于核心地位,同时也希望利用工具自动生成大量常用SQL的应用程序。 - **开发效率**: 使用BeetSql时,开发者无需...

    hibernate基础 入门/ hibernate basic

    4. **灵活的查询方式**:Hibernate提供了多种查询方式,包括Criteria API、Query By Example (QBE)、Hibernate Query Language (HQL)以及原生SQL等。 #### 三、Hibernate架构概览 **Hibernate架构**是围绕着几个...

    Hibernate开发指南.rar

    使用HQL(Hibernate Query Language)或Criteria API替代原生SQL,可以使查询更加面向对象,便于维护。 实战示例是学习Hibernate最直接有效的方法。这个压缩包中可能包含了各种应用场景的代码示例,如CRUD操作...

    Hibernate学习指南pdf

    - **Native SQL**: 直接执行原生SQL语句,当HQL或Criteria无法满足需求时,提供了一种后备方案。 #### 持久层设计与ORM 持久层设计是软件架构中不可或缺的一部分,其核心在于如何高效、安全地与数据库进行交互。...

    hibernate

    3. **Native SQL**: 直接使用原生SQL进行查询,适用于Hibernate无法满足的复杂查询。 综上所述,Hibernate 是Java开发中不可或缺的工具,通过对象关系映射技术极大地简化了数据库操作,提升了开发效率。深入了解并...

    J2EE企业级项目开发-1期 06 hibernate映射视图的使用经验.doc

    本篇文档主要讨论了如何在Hibernate中使用映射视图来处理这种情况,特别是在面对无法直接使用原生SQL(native SQL)的情况下。 Hibernate是一个强大的Java对象关系映射(ORM)框架,它允许开发者将数据库操作转化为...

    10Hibernate 程序设计

    此外,还可以使用原生SQL查询。 9. Hibernate事务管理: Hibernate提供了事务管理的接口,允许在操作数据库时确保原子性和一致性。通过SessionFactory的openSession()方法获取Session,然后在Session中进行开始、...

    Hibernate实战(第2版 中文高清版)

     15.2.3 Java Persistence中的原生SQL   15.3 过滤集合   15.4 高速缓存查询结果   15.4.1 启用查询结果高速缓存   15.4.2 理解查询高速缓存   15.4.3 什么时候使用查询高速缓存   15.4.4 自然标识符...

    hibernate的详细学习笔记

    4. **Query接口**:用于执行查询操作,可以使用HQL(Hibernate Query Language)或原生SQL语句来查询数据库。 #### 六、Hibernate的使用示例 - **配置Hibernate**:首先需要配置`hibernate.cfg.xml`文件,指定...

    springMVC+hibernate项目整合

    5. **查询**:Hibernate支持HQL(Hibernate Query Language)和Criteria API进行查询,也可以使用原生SQL。 **整合SpringMVC与Hibernate** 在SpringMVC项目中整合Hibernate,可以借助Spring的数据访问/集成模块,...

    Hibernate+中文文档

    10.4.4. 使用原生SQL的查询 10.5. 修改持久对象 10.6. 修改脱管(Detached)对象 10.7. 自动状态检测 10.8. 删除持久对象 10.9. 在两个不同数据库间复制对象 10.10. Session刷出(flush) 10.11. 传播性持久化...

    Hibernate 文档.doc

    Query和Criteria接口用于执行数据库查询,支持HQL(Hibernate Query Language)和原生SQL两种方式。HQL是一种面向对象的查询语言,允许开发者以面向对象的方式编写查询语句,而无需直接操作SQL,从而提高了代码的...

    hibernate_reference_anotation 3.5.0-final pdf

    - **原生 SQL 查询映射**:使用 `@NamedNativeQuery` 定义原生 SQL 查询,通过 `@SqlResultSetMapping` 注解映射查询结果。 #### 五、元数据覆盖 ##### 5.1 原则 - **全局级别元数据**:通过 persistence.xml 文件...

    hibernate3.6 文档(pdf 格式)

    - **使用 SQLQuery**:介绍如何使用 SQLQuery 接口执行原生 SQL 查询。 - **标量查询**:解释如何查询并返回标量值。 - **实体查询**:展示如何查询并返回实体对象。 - **处理关联和集合**:说明如何在原生 SQL 查询...

    hibernate3.2中文文档(chm格式)

    10.4.4. 使用原生SQL的查询 10.5. 修改持久对象 10.6. 修改脱管(Detached)对象 10.7. 自动状态检测 10.8. 删除持久对象 10.9. 在两个不同数据库间复制对象 10.10. Session刷出(flush) 10.11. 传播性持久化...

    HibernateAPI中文版.chm

    10.4.4. 使用原生SQL的查询 10.5. 修改持久对象 10.6. 修改脱管(Detached)对象 10.7. 自动状态检测 10.8. 删除持久对象 10.9. 在两个不同数据库间复制对象 10.10. Session刷出(flush) 10.11. 传播性持久化...

Global site tag (gtag.js) - Google Analytics