hibernate框架之-查询结果集返回类型

Hibernate支持HQL和SQL的查询,返回结果支持POJO类型或字段/数组的形式。

开发中用Hibernate进行数据库查询,用的是SQL。
原来需要查询一个表的几乎所有字段,所以我使用了addEntity方法,将查询结果转换为映射的对象。
后来需求变更,需要查询另外几个表的若干字段,不想继续用addEntity绑定新加的表(毕竟只有几个字段需要查询出来,将多余的字段都转换成映射对象,或只将需查询的字段转换为映射对象,从维护角度来说似乎都不太好),网上查了查:
于是在addEntity后再使用addScalar方法指定字段以指定格式返回
于是返回的List中包含Object[]数组,这样在数组中除了有addEntity的映射对象,还有指定类型的字段结果

常用的结果集:
一、使用HQL的情况:

  1. 查询字段:使用"select t.field from Sample t ",返回List包含Object对象,如果查询多个单独字段,则返回的List包含Object[]

    1. List<String> list = super.getHibernateTemplate().find("select distinct t.job from Emp t order by t.job");
      List<String> list = super.getHibernateTemplate().find("select distinct t.job from Emp t order by t.job");
  2. 查询单个整个对象:使用"from SampleTable t where t.field = :filed "的写法,默认返回封装好的SampleTable对象List
  3. 查询多个整个对象:可指定获取哪些对象,如"select t1, t2 from SampleTable t1, SampleTable t2 where ...",此时会返回List中包含Object[],Object[]中在0位置为SampleTable对象,1为SampleTable对象
  4. 查询非映射对象:还可以以构造方法的方式"select new SomeVo(t.field1, t.field2) from xxx t1",返回封装好的SampleTable对象List
  5. 既查询整个对象又查询单个字段:使用"select t, t2.field from Sample t, Sample2 t2 ",返回List包含Object[]对象,而Object[]包含Sample对象,还有为字段类型的值

二、使用SQL的情况:

  1. 查询字段跟HQL的形式类似
  2. 查询单个整个对象,由于使用的是SQL,需要程序中用addEntity方法指定SQL查得的值与映射对象的关系(addEntity指定的对象类型必须为已经注册的映射对象)
  3. 查询多个整个对象,用多个addEntity绑定
  4. 既查询整个对象又查询单个字段:在addEntity后再使用addScalar方法,返回List包含Object[]对象,而Object[]包含Sample对象,还有为字段类型的值
时间: 2024-12-20 06:53:35

hibernate框架之-查询结果集返回类型的相关文章

关于用Hibernate执行sql查询,字符字段类型只返回第一个字节的问题

关于用Hibernate执行sql查询,字符字段类型只返回第一个字节的问题 今天遇到了一个问题,就是在Hibernate中,我用sql去查询mysql数据库里面的user表里面的username字段,但是发现查出来的数据都是只有第一个字,例如:在user表里面的username字段中有一条数据是:"Chen chiwei",查询后返回的结果却是这条数据的第一个字母:"C":于是乎,我查了一下user这张表的设计,发现username这个字段的类型是'char'类型,

Mybatis全部查询遇到的返回类型的小问题

在学习Mybatis3过程中遇到一个小问题,觉得需要注意就把它写下来了 在查询所有数据的时候方法是这样的 public List<User> findAll(){ ..... } 在它的user.xml文件中的sql语句 <select id="findAll"  resultType="User"> select * from user</select> 没有参数,返回的类型不是list,而是List<User>中的

Hibernate框架对查询功能优化(1)

延迟加载 1. 延迟加载先获取到代理对象,当真正使用到该对象中的属性的时候,才会发送SQL语句,是Hibernate框架提升性能的方式 2. 类级别的延迟加载 * Session对象的load方法默认就是延迟加载 * Customer c = session.load(Customer.class, 1L);没有发送SQL语句,当使用该对象 的属性时,才发送SQL语句 * 使类级别的延迟加载失效 * 在对象映射文件中<class>标签上配置lazy="false" * Hi

Hibernate框架对查询功能优化(2)

1. 查询策略:使用Hibernate查询一个对象的时候,查询其关联对象.应该如何查询.是Hibernate的一种优化手段!!! 2. Hibernate框架的检索策略解决的问题    * 查询的时机     Customer c1 = (Customer) session.get(Customer.class, 1);     System.out.println(c1.getLinkmans().size());       * lazy属性解决查询的时机的问题,需要配置是否采用延迟加载!!

关于YMP框架JDBC查询结果集自定义处理方法

final String _sql = "SELECT u.name as name, u.age, u.type, u.birth FROM ym_user u WHERE u.age > ?, u.type = ?"; // 1. 将SQL查询的结果集采用数组的形式封装 List<Object[]> _results = JDBC.openSession(new ISessionExecutor<List<Object[]>>() { pu

Hibernate框架第二天

### Hibernate的持久化类 ### ---------- **什么是持久化类** 1. 持久化类:就是一个Java类(咱们编写的JavaBean),这个Java类与表建立了映射关系就可以成为是持久化类. * 持久化类 = JavaBean + xxx.hbm.xml ---------- **持久化类的编写规则** 1. 提供一个无参数 public访问控制符的构造器 -- 底层需要进行反射. 2. 提供一个标识属性,映射数据表主键字段 -- 唯一标识OID.数据库中通过主键.Java

Android数据库hibernate框架

说明 /** * YDL_Hibernate总结 <br/> * (一)支持功能: 1.自己主动建表,支持属性来自继承类:可依据注解自己主动完毕建表,而且对于继承类中的注解字段也支持自己主动建表. 2.自己主动支持增删改 * ,增改支持对象化操作:增删改是数据库操作的最基本单元,不用反复写这些增删改的代码,而且加入和更新支持相似于hibernate中的对象化操作. * 3.查询方式灵活:支持android框架提供的方式,也支持原生sql方式. * 4.查询结果对象化:对于查询结果可自己主动包装

Hibernate应用SQL查询返回实体类型

Hibernate应用SQL查询返回实体类型 Hibernate使用SQL查询返回实体类型 以前,使用SQL查询,结果放在 RS 结果集中,还要去转换影射到Java类中.Hibernate中,可以自动帮我们注入到Hibernate 甚至是 非 Hibernate 类型当中. String sql = "select * from T_TMP_PUBLIC_POLICY TP"; SQLQuery sqluery = session.createSQLQuery(sql).addEnti

hibernate查询数据表char类型字段只返回一个字符

在oracle或sqlServer下会遇到,查询数据表字段类型为char,如果使用Hibernate原生SQL去执行查询,往往只会返回 一个字符.原因是char在java中只有两个字节. 解决方法 1.改成 select cast(列 as varchar2(列大小)) from 表;或者改为 select trim(列) from 表 2.指定列返回的类型. SQLQuery query = session.createSQLQuery(); query.addScalar(columnAli