介绍:
顾名思义,结果转换器用于将我们的休眠查询返回的结果转换为特定格式,或者我会说是 bean 或 map。
通常,当您在 hibernate 中查询数据时,它会返回一个域对象,在这种情况下,我们可能不会发现 Result Transformers 有太多用途。但是如果我们编写一个命名查询来仅返回选定的列,那么 hibernate 将返回一个对象数组列表。此对象数组表示每行的列。让我们看一个例子
w ^ Ë有一个POJO“雇员”与像ID,name..etc属性,并将其映射到一个表。现在我需要获取所有员工的员工姓名和薪水。为此,我们将在我的 Employee.hbm.xml 中编写一个命名查询
<sql-query name="getEmployeeData">
<return-scalar type="java.lang.String" column="empname">
<返回标量类型=”java.math.BigDecimal”列=”salary”>
选择 empname 作为名称
. , 工资作为工资
. 来自员工
</sql-查询>
因此,当我们调用上面的 namedQuery 时,它实际上是在已经讨论过的对象数组列表中获取数据。为了准确地显示数据,我们必须做以下事情
列表结果= session.getNamedQuery(“getEmployeeData”).list();
获取第一个员工数据
Object[] 数据 =results.get(0);
String ename = (Long)data[0];
BigDecimal sal = (BigDecimal)data[1];
如示例所示,我们必须基于索引数据。想想如果我们可以根据我们在命名查询中提供的实际别名来获取数据会怎么样。这就是 Hibernate Result Transformer 将要做的。
结果转换器的类型
Hibernate 有一个“Transformers”类,它具有以下结果转换器(要深入了解,请参阅此转换器的实际实现)
1.变形金刚.ALIAS_TO_ENTITY_MAP
2.Transformers.TO_LIST
3.Transformers.aliasToBean
结果转换器的用途:
- 变形金刚.ALIAS_TO_ENTITY_MAP
- 顾名思义,它转换结果,即以别名为键的映射列表的对象数组列表。
- 回到我们的例子,如果我们将此转换器设置为我们的查询会发生什么,让我们看看......
列出结果=。
session.getNamedQuery (“getEmployeeData”)
.setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP).list();
现在要获得第一个员工,我们必须做这样的事情
地图数据 =(Map)results.get(0);
String ename = (Long)data.get(“empname”);
BigDecimal sal = (BigDecimal)data.get(“salary”);
这些别名是我们在命名查询中给出的(请参考本示例前面给出的命名查询)。
2. 变压器。TO_LIST
顾名思义,它会转换命名查询默认返回的 List 中的结果。我们可以设置这个变压器,
列出结果=。
session.getNamedQuery (“getEmployeeData”)
.setResultTransformer(Transformers.TO_LIST).list();
3. 变压器。别名到Bean
它将结果转换为列表。aliasToBean Transformer 允许您检索非实体 bean 中的特定信息。
此休眠 API 调用将允许您对数据库运行 sql 并填充不是休眠实体的 pojo 列表。当您需要特定信息或可能需要来自多个表的信息时,此技术非常有用。
我们可以设置这个变压器,
尝试 {
会话会话 = HibernatePlugin.getSession();
. 查询查询;
.
query = session.getNamedQuery(“getEmployeeData”)
.setResultTransformer(Transformers.aliasToBean(Employee.class);
/* 我们在 aliasToBean() 方法中传递 bean 类来反映。
. 特性
*/
ArrayList<Material> marketLists =
(ArrayList<Material>)query.list();
} 捕获(异常 e){
log.error(“发生错误:” + e);
}
有时我们有一个类,我们想根据查询返回的数据填充数据。这个类是一个简单的 POJO 而不是 Hibernate 实体,所以 Hibernate 不会识别这个类。
这可以通过使用 Transformers 在 Hibernate 中完成。让我们看一个简单的例子,展示如何使用 Transformer。首先,让我们看一个名为“XYZ”的简单 POJO 类。
这个类包含一些统计信息。我们想填充一个实例的统计信息,直接从运行一个Hibernate HQL
最佳实践和有用提示:
结果转换器应与命名或标量查询一起使用。它不应与本机查询一起使用。如果我们使用带有查询的结果转换器而不是命名查询,它将返回空值。
我们使用 aliasToBean 转换器,当我们需要从非休眠实体的表中访问值时,在使用休眠访问数据库的应用程序中,我们希望从数据库中任意数量的表中访问几列而不带回所有关联的对象。
我们使用 ALIAS_TO_ENTITY_MAP 转换器,当我们可以根据在命名查询中提供的实际别名而不是基于索引来获取数据时。
当我们需要列表中的数据时,我们使用 TO_LIST 转换器。
结论:
结果转换器有助于将域对象中的查询结果转换为 List、MAP 或 Beans。要获取更多信息,请关注 Hibernate API 七爪网七爪网-专注于分销商城,小程序定制,网站开发,定制开发,成品源码的源码交易平台