`
witcheryne
  • 浏览: 1099700 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

使用addScala将SQLQuery自定义查询映射到pojo中

阅读更多

在平时开发中Hibernate提供的hql基本能够满足我们的日常需求。但是在有些特殊的情况下,还是需要使用原生的sql,并且希望sql查询出来的结果能够绑定到pojo上。

 

Hibernate中由SQLQuery对象提供对原生sql语句的支持,例如如下语句在查询分析器中编写好后可直接使用

 

-- 查询采集设备及正在执行的任务 --
select d.guidID as deviceId, d.strName as deviceName, 
	p.guidID as portId, p.strName as portName, 
	t.guidTaskID as taskId, t.strName as taskName, t.enumRunStatus as runStatus, 
	t.odtTaskStartDate as taskStartDate, t.odtTaskStopDate as taskStopDate
from ULCDevice as d 
	inner join ULCDevicePort as p on p.guidBelongDeviceID = d.guidID
	left outer join ULCTaskInfo as t on t.guidRecordPortID = p.guidID and t.enumRunStatus = 2
where d.enumType = 3
order by d.guidID;

 

HibernateCallback中,使用Session创建SQLQuery对象:

 

StringBuffer b = new StringBuffer();

//... 省略SQL拼接代码
String sql = b.toString();
				
SQLQuery query = session.createSQLQuery(sql);

 

最后的重点是如何将查询结果映射到pojo:

SQLQuery接口addScalar方法,可用于设置查询结果到Pojo的映射

 

SQLQuery addScalar(String columnAlias, Type type) 

-- 参数中的Type为Hibernate中提供的数据库类型.

 

如何使用见如下代码:

 

 

	public List<WorkStations> getWorkStations() {
		List<WorkStations> retList = this.getHibernateTemplate().executeFind(new HibernateCallback() {

			@Override
			public Object doInHibernate(Session session)
					throws HibernateException, SQLException {
				
				StringBuffer b = new StringBuffer()
					.append("select d.guidID as deviceId, d.strName as deviceName, ")
						.append("p.guidID as portId, p.strName as portName, ")
						.append("t.guidTaskID as taskId, t.strName as taskName, t.enumRunStatus as runStatus, ")
						.append("t.odtTaskStartDate as taskStartDate, t.odtTaskStopDate as taskStopDate ")
					.append("from ULCDevice as d ")
						.append("inner join ULCDevicePort as p on p.guidBelongDeviceID = d.guidID ")
						.append("left outer join ULCTaskInfo as t on t.guidRecordPortID = p.guidID and t.enumRunStatus = 2 ")
					.append("where d.enumType = 3 ")
					.append("order by d.guidID");
				
				String sql = b.toString();
				
				SQLQuery query = session.createSQLQuery(sql);
				query.addScalar("deviceId", Hibernate.STRING);
				query.addScalar("deviceName", Hibernate.STRING);
				
				query.addScalar("portId", Hibernate.STRING);
				query.addScalar("portName", Hibernate.STRING);
				
				query.addScalar("taskId", Hibernate.STRING);
				query.addScalar("taskName", Hibernate.STRING);
				query.addScalar("runStatus", Hibernate.INTEGER);
				
				query.addScalar("taskStartDate", Hibernate.TIMESTAMP);
				query.addScalar("taskStopDate", Hibernate.TIMESTAMP);
				
				query.setResultTransformer(Transformers.aliasToBean(WorkStations.class));
				
				List<WorkStations> list = query.list();
				System.out.println(list.size());
				
				return list;
			}
			
		});
		
		return retList;
	}
 

 

WorkStations.java

 

 

public class WorkStations implements Serializable {
	private String deviceId = null;
	private String deviceName = null;
	
	private String portId = null;
	private String portName = null;
	
	private String taskId = null;
	private String taskName = null;
	private Integer runStatus = null;
	
	private Date taskStartDate = null;
	private Date taskStopDate = null;
	
	public WorkStations() {
		
	}

        //... 省略 getter/sette r方法
}

 

 

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    TaggedModularConfigurationJava配置库读取并将配置文件映射到POJO

    4. **配置解析**:使用TMC库提供的API读取配置文件,并将其内容映射到之前定义的POJO类。TMC库会自动处理类型转换,例如将字符串转换为整数或日期等。 5. **加载和使用配置**:在应用程序启动时,通过TMC库加载配置...

    MyBatis执行SQL并将结果映射成Java对象.docx

    MyBatis是一个流行的Java持久层框架,它简化了与数据库之间的交互,允许开发者将SQL查询直接映射到Java对象。这个文档主要介绍了MyBatis框架的核心概念和基本使用步骤。 首先,MyBatis的配置文件分为两个部分:全局...

    xlsbeans:Java库,用于将Excel工作表映射到POJO

    XLSBeans XLSBeans是一个Java库,用于将Excel工作表映射到POJO。设置要使用XLSBeans,请将... 使用@HorizontalRecords和@LabelledCell将此Excel工作表映射到POJO。 @Sheet ( name = " Users " )public class UserList

    数据表生成pojo

    "数据表生成POJO"这个主题涉及到将数据库中的表结构映射到Java世界中的类,使得我们可以方便地操作数据库中的数据。这通常在ORM(Object-Relational Mapping)框架中进行,例如Hibernate、MyBatis等。 1. **什么是...

    使用MyEclipse工具生成POJO类和映射文件.hbm.xml

    在本篇文章中,我们将学习如何使用 MyEclipse 工具生成 POJO 类和映射文件 .hbm.xml。 POJO(Plain Old Java Object)是一种简单的 Java 对象,它是 Java 语言中的一种基本组件。POJO 类是指不继承自任何特殊的类...

    java6string源码-JdbcMapper:JdbcMapper是一个ORM,可以快速轻松地将普通SQL查询映射到各种POJO(Plai

    查询,并使用它们从不同类型集合的数据库中快速轻松地选择 POJO(Plain Old Java 对象)。 类型安全贯穿始终,因此不需要强制转换或忽略警告。 有两种不同的方法可以实现这一点。 JdbcMapper 在编译时生成代码,...

    mysql表映射成java实体类

    这些文件可以被编译并加入到项目的类路径中,以便在实际应用中使用。 总结,通过上述步骤,你可以实现一个自动化工具,从MySQL数据库中获取所有表的信息,然后根据这些信息自动生成Java实体类。这种方式可以显著...

    hibernate生成的订单信息映射文件以及pojo类

    在这个场景中,我们讨论的是如何使用MyEclipse工具来生成Hibernate的映射文件以及对应的POJO(Plain Old Java Object)类,这些类是数据库表的Java表示形式。 首先,映射文件是Hibernate的核心组成部分,它是XML...

    mybatis_02 输入输出映射 动态sql 对象关系映射 整合

    在MyBatis中,输入映射主要指如何将Java对象中的数据映射到SQL语句中。这包括基本类型和复杂类型(POJOs)。对于简单的数据类型如`int`, `String`等,可以直接作为参数传递给SQL语句。而对于复杂的POJO对象,则需要...

    hibernate tools 生成pojo

    4. **执行生成操作**:在IDE中使用Hibernate Tools的代码生成功能,选择对应的HBM文件,工具会根据文件中的映射信息自动生成对应的POJO类,包括属性、getter和setter方法,以及可能的构造函数。 5. **检查和修改**:...

    Mybatis-03 SQL映射文件

    MyBatis支持在XML映射文件中使用条件标签实现动态SQL,如`&lt;if&gt;`, `&lt;choose&gt;`, `&lt;when&gt;`, `&lt;otherwise&gt;`, `&lt;where&gt;`, `&lt;trim&gt;`, `&lt;set&gt;`等。这些标签允许根据特定条件拼接SQL语句,极大地提高了代码的灵活性。 7. *...

    自动生成mybatis映射文件,mapper接口和pojo实体类

    例如,`selectByExample`方法会在XML文件中有一个对应的`&lt;select&gt;`标签,里面包含根据条件查询的SQL语句。实体类(POJO)则封装了数据库表的字段,提供getter和setter方法,方便操作数据。 纯接口开发是MyBatis的一...

    SSM笔记-POJO

    本笔记主要探讨了如何在SpringMVC中使用POJO来处理请求参数,以及SpringMVC如何自动将请求参数填充到对应的POJO对象中。 首先,理解POJO的概念。POJO是一个简单的Java对象,没有特定的约束或依赖于任何框架。在SSM...

    ssm框架自动生成pojo,mapper

    5. **整合到项目中**:将生成的文件导入到你的SSM项目中,更新相关的配置文件,如Spring的配置文件、MyBatis的配置文件等。 6. **测试**:运行项目,测试生成的代码是否能正常工作。 通过这种方式,即使在不支持...

    Mybatis生成pojo插件

    Mybatis是一款广受欢迎的Java持久层框架,它简化了数据库操作与对象模型之间的映射,提供了灵活的SQL映射和基于XML或注解的配置方式。在开发过程中,经常需要手动创建POJO(Plain Old Java Object)类来作为数据表的...

    java Pojo转Map

    本文将详细介绍如何实现Java中的Pojo到Map的转换,并通过具体的示例来演示这一过程。 首先,我们需要一个Pojo类,例如: ```java public class User { private String name; private int age; // getters and ...

    mybatis最终工具+pojo+dao+mapper一键生成

    MyBatis是一个强大的Java持久层框架,它简化了数据库操作,允许开发者将SQL语句直接映射到Java方法。在本项目中,"mybatis最终工具+pojo+dao+mapper一键生成" 提供了一个自动化工具,能够快速生成MyBatis相关的实体...

    java反射封装结果集内容到pojo

    当我们从数据库读出数据得到ResultSet或RowSet的时候,我们的做法是遍历结果集,然后封装到pojo里面,再封装到List,那么,每次封装是不是很麻烦呢,前段时间小弟看了下反射的东西,试着写了个类,目的在于方便封装...

    SSM项目实战pojo类

    7. **ORM映射**:在MyBatis中,XML配置文件或注解会将POJO类与SQL语句关联起来,使得数据库操作更加直观。例如,通过`&lt;select&gt;`、`&lt;insert&gt;`、`&lt;update&gt;`和`&lt;delete&gt;`标签,我们可以定义查询、插入、更新和删除操作...

    MyBatis SQL映射器框架的Java.zip

    它可以使用预编译的PreparedStatement来防止SQL注入,通过`#{}`占位符将Java对象的属性值绑定到SQL语句中。此外,还可以使用Map或POJO类作为参数,方便传递复杂的数据结构。 在结果处理上,MyBatis提供了灵活的结果...

Global site tag (gtag.js) - Google Analytics