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后,感觉这个方法还挺管用的. ...
随机推荐
- C语言 · 最长字符串
算法训练 最长字符串 时间限制:1.0s 内存限制:512.0MB 求出5个字符串中最长的字符串.每个字符串长度在100以内,且全为小写字母. 样例输入 one two three ...
- android 开发第三库
http://blog.daimajia.com/android-library-collection/ http://www.apkbus.com/android-180062-1-1.html h ...
- face alignment---各种算法框架
[深度学习]最新的一些开源face alignment及评价 转载 2017年01月12日 11:33:39 2047 dlib :https://github.com/davisking/dlib ...
- oracle快速创建可用用户
执行语句 create user utaptest identified by utaptest; create tablespace utaptestspace datafile 'd:\data. ...
- linux 网络安全不完全笔记
一.安装Centos二.Linux网络网络环境设置 a.配置linux与客户机相连通 b.配置linux上网三.Yum详解 yum 的基本操作 a.使用 yum 安装新软件 yum install – ...
- EF5.x Code First 一对多关联条件查询,Contains,Any,All
背景 通过多个部门id获取所有用户,部门和用户是多对多. 已知部门id,获取该部门包括该部门下的所有子部门的所有用户. 关系如下: public class Entity:IEntity { publ ...
- linq操作符:聚合操作符
一.Aggregate操作符 Aggregate操作符对集合值执行自定义聚合运算.来看看Aggregate的定义: public static TSource Aggregate<TSource ...
- PHP中“==”运算符的安全问题
前言 PHP是一种通用的开源脚本语言,它的语法混合了C,Java,以及Perl等优秀语言的语法.除此之外,它还提供了大量的函数库可供开发人员使用.但是,如果使用不当,PHP也会给应用程序带来非常大的安 ...
- 【转】WPF查找子控件和父控件方法
一.查找某种类型的子控件,并返回一个List集合 public List<T> GetChildObjects<T>(DependencyObject obj, Type ty ...
- Spring JDBC RowMapper接口示例
JdbcTemplate类使用org.springframework.jdbc.core.RowMapper <T>接口在每行的基础上映射ResultSet的行.该接口的实现执行将每行映射 ...