hibernate 之 sql查询
如果用hibernate执行原生sql进行数据查询可以调用
SQLQuery query = getSession().createSQLQuery(sql);
然后再执行
query.list()
这样便可以将结果查询出来,查这样查询出来的结果。是由值数组组成的list。
可一般我们想要的结果应该是以字段名为key的map组成的list或者是表名对应的对象组成的list。
这两种结果均可通过hibernate提供的api来实现
对于第一种想要的结果:
可以通过重写AliasedTupleSubsetResultTransformer来实现,如果下面的代码
AliasedTupleSubsetResultTransformer f = new AliasedTupleSubsetResultTransformer() {
@Override
public boolean isTransformedValueATupleElement(String[] arg0, int arg1) {
return false;
}
@Override//重写这个方法是关键
public Object transformTuple(Object[] tuple/*值数组*/, String[] aliases/*字段数组*/) {
Map<String, Object> map = new HashMap<String, Object>();
for(int i = 0; i < aliases.length; i ++){
map.put(aliases[i].toLowerCase(), tuple[i]);
}
return map;
}
};
List<Map<String, Object>> resultList = query.setResultTransformer(f).list();
对于第二种想要的结果即转换成对应类的对象list,这种留给有心人去实现吧,
这种应该通过扩展SQLQuery.setResultSetMapping()去实现的。
hibernate 之 sql查询的更多相关文章
- Hibernate原生SQL查询多表关联,SQL语句要注意的问题
Hibernate原生SQL查询多表关联,SQL语句要注意的问题 @for&ever 2009-9-4 系统环境: MySQL5.1 Hibernate3.3 有如下的假定: 实体类 Ques ...
- Hibernate应用SQL查询返回实体类型
Hibernate应用SQL查询返回实体类型 Hibernate使用SQL查询返回实体类型 以前,使用SQL查询,结果放在 RS 结果集中,还要去转换影射到Java类中.Hibernate中,可以自动 ...
- Hibernate通过SQL查询常量时只能返回第一个字符的解决方法
在Hibernate中如果通过 [java] view plaincopy session.createSQLQuery("select '合计' as name from dual&quo ...
- 使用hibernate原生sql查询,结果集全为1的问题解决
问题如下: String sqlTest ="select summary,summaryno from F_Summary"; List<Map<Object, Ob ...
- Hibernate纯sql查询VO对象封装
hibernate 纯sql查询返回结果集(未关联映射)组装VO的问题//须保证别名字段与Vo字段一致 //引号中为vo对象属性需与sql查询返回字段一致.addScalar("chname ...
- Hibernate原生SQL查询
最近在做一个较为复杂的查询,hibernate基本的查询不能满足,只好使用其提供的原生sql查询.参考网上的一些资料,做一些总结. 对原生SQL查询执行的控制是通过SQLQuery接口进行的,通过执行 ...
- 使用HIBERNATE的SQL查询并将结果集自动转换成POJO
在某些场合下,我们可能想使用HIBERNATE的框架提供的SQL查询接口,但是,由于实体没有做映射,HIBERNATE不能把结果集转换成你想要的List<POJO>,本文讨论如何在这种情况 ...
- Hibernate之SQL查询
Hibernate支持使用原生的SQL语句进行查询.使用原生的SQL的好处是:可以利用某些数据库的特性(不同的数据库SQL 语法会有所差异), 将原有的使用JDBC作为持久层技术的应用 ,迁移到使用H ...
- Hibernate:SQL查询 addScalar()或addEntity()
Hibernate除了支持HQL查询外,还支持原生SQL查询. 对原生SQL查询执行的控制是通过SQLQuery接口进行的,通过执行Session.createSQLQuery()获取这个接口.该 ...
- 关于hibernate纯sql查询返回结果集的问题(hbm.xml中不写多表关联)
相信用过hibernate的兄弟们都会因为多表复杂查询后,为返回的结果如何组装到一个VO中而烦恼不已.我也不停的为此而烦恼,但是在看了hibernate的transform后,感觉这个方法还挺管用的. ...
随机推荐
- select 操作选中添加、删除操作Javascript
//添加选中项 function addItem() { var myMember = document.getElementById("myMember"); var other ...
- RavenDb学习(三)静态索引
在静态索引这块,RavenDb其实的是lucene,所以里面有很多概念,其实都是lucene本身的. .定义静态Indexes documentStore.DatabaseCommands.PutIn ...
- 【C】——itoa 函数的实现
itoa函数的实现,函数实现功能:输入一个 int 型的数据然后修改成 十六进制的字符串. 例如: 输入 100 输出 0x64 主函数: int main(void){ ]; my_atoi(v ...
- jce_policy安装【java密码扩展无限制权限策略文件安装】
下载与JDK或JRE对应版本的jce文件包,当前机器的jdk为1.8,所以下载jce_policy-8.zip. 下载地址:http://www.oracle.com/technetwork/java ...
- JavaScript世界的一等公民—— 函数
简介 在很多传统语言(C/C++/Java/C#等)中,函数都是作为一个二等公民存在,你只能用语言的关键字声明一个函数然后调用它,如果需要把函数作为参数传给另一个函数,或是赋值给一个本地变量,又或是作 ...
- loadrunner 中Error和failed transaction 的区别
Down:没有运行 Pending:挂起 Init:初始化 Ready:准备就绪 Run:正在运行 Rendezvous:正在集结 Passed:运行通过 Failed:运行失败 Error:出现故障 ...
- Visual Studio 2013新建ASP.NET项目使用Empty模板,在页面中使用验证控件出错的解决方案
Visual Studio 2013新建ASP.NET项目使用Empty模板,在页面中使用验证控件,运行页面,会出现如下的错误: 错误原因 VisualStudio 2012(或2013) WebFo ...
- Android学习之发送及接收广播
1.使用标准广播 1.1 定义广播接收器 public class MyBroadcastReceiver extends BroadcastReceiver { @Override public v ...
- qt 字体的相关问题
(一)qtconfig字体列表不全的问题? 发现界面的上的文字不能正常显示,后调用qtconfig发现里面识别的字体非常少,怀疑是编译的时候参数未能设置正确,于是经过多次试验,终于成功找到根结所在,. ...
- 自然语言交流系统 phxnet团队 创新实训 项目博客 (六)
从你进入软件开始,你就建立了和服务器的联系.这是一段和服务器的长连接,直到你退出此软件. 2D文字聊天界面大致实现了文字输入.发送消息.接收消息.你可以通过点击按钮让机器人开启聊天模式或者学习模式.又 ...