hibernate sql查询 标量,实体查询

注:原创作品,分享以供交流学习,转载请注明出处

本博文实例假定:
1,student_info是数据库中的一张表的名称。

第一:sql的标量查询(使用addScalar实现)
1,
session.createSQLQuery("select * from student_info").list();

结果类型:List<Object[]>
注意:object数组中元素的顺序和类型是hibernate根据ResultSetMetadata
来判断的(当然一旦访问ResultSetMetadata性能就会大大降低)

2.
session.createSQLQuery("select * from student_info")
.addScalar("name",StandardBasicTypes.STRING)
.list();

结果类型:List<String>
注意:此时hibernate不会再去根据ResultSetMetadata来获取列信息,而是
直接从ResultSet中取出name列的值,并把name列的数据类型当成zifu
串处理,因此即使用了*作为查询的字段列表,但是hibernate查询的
结果也知识name阻断所组成的列表。

3.
session.createSQLQuery("select * from student_info")
.addScalar("name")
.list();

结果类型:List<String>
注意:此时hibernate会再去根据ResultSetMetadata来获取列信息,
从ResultSet中取出name列的值,并根据ResultSetMetadata来确定
name列的类型。因此这种效率低下,除非是在不知道列的类型,不要
使用这种类型,尽量使用2的方式。

3.
session.createSQLQuery("select * from student_info")
.addScalar("name",StandardBasicTypes.STRING)
.addScalar("student_id",StandardBasicTypes.INTEGER)
.list();

结果类型:List<Object[]>
注意:集合元素中一次存放name,id

总结:addScalar的两个作用:
1,指定查询结果包含哪些数据列(没有被addScalar选出的列不会包含在查询结果中)

1,指定查询结果数据列的数据类型。

第二:sql的实体查询
1.
session.createSQLQuery("select * from student_info")
.addEntity(Student.class)
.list();

结果类型:List<Student>
注意:要想把结果数据组装成一个对象,必须选出表中的左右的列,如果表中含有
外键,也必须选择出来,最简单的方法就是用*

2.
session.createSQLQuery("select sf.*,s.* from student_info as sf,student as s
where sf.id = s.id")
.addEntity("sf",StudentInfo.class)
.addEntity("s",Student.class)
.list();

结果类型:List<Object[]>
注意:集合中的元素是StudentInfo,Student组成的数组。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值