知识大全 Hibernate只查询部分/指定字段
Posted 知
篇首语:生活不是上帝的诗篇,而是凡人的欢笑和眼泪。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Hibernate只查询部分/指定字段相关的知识,希望对你有一定的参考价值。
Hibernate只查询部分/指定字段 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
公司使用
[java]
DetachedCriteria detachedCriteria = DetachedCriteria forClass(PeBulletin class)
detachedCriteria createAlias( enumConstByFlagIsvalid enumConstByFlagIsvalid )
detachedCriteria createCriteria( peSite peSite )
detachedCriteria createCriteria( peManager peManager )
detachedCriteria add(Restrictions eq( enumCode ))
detachedCriteria createAlias( enumConstByFlagIstop enumConstByFlagIstop )
detachedCriteria addOrder(Order desc( enumde )) addOrder(Order desc( publishDate ))
DetachedCriteria detachedCriteria = DetachedCriteria forClass(PeBulletin class)
detachedCriteria createAlias( enumConstByFlagIsvalid enumConstByFlagIsvalid )
detachedCriteria createCriteria( peSite peSite )
detachedCriteria createCriteria( peManager peManager )
detachedCriteria add(Restrictions eq( enumCode ))
detachedCriteria createAlias( enumConstByFlagIstop enumConstByFlagIstop )
detachedCriteria addOrder(Order desc( enumde )) addOrder(Order desc( publishDate )) 的QBC方式查询数据
这种方式的最大好处是几乎完全面向对象 是一种在HQL更上层的对象封装了 几乎让你忘记SQL是什么玩意了
但是他有一个最大的弊端就是效率问题 默认他会查询这个对象的所有字段【包括它的关联对象】 像我上面这个查询最后查出来的字段起码有 多个字段了 效率问题可想而知 实在不想去写SQL或HQL 太麻烦了 于是想到将其进行优化的最好方法
果然QBC提供了字段的部分查询 也许hibernate的作者说得对 说hibernate效率低 只能说你还不懂怎么去用 虽然这家伙在写hibernate之前不懂SQL 它的二级缓存做得不错
言归正传
Hibernate 使用查询部分/指定字段 有三种字现方式
第一种是使用高级查询DetachedCriteria实现 代码如下
[java]
String alias = user_ ; //查询时的table别名
DetachedCriteria dc = DetachedCriteria forClass(User class alias)
ProjectionList pList = Projections projectionList()
pList add(Projections property(alias + + id ) as( id ))
pList add(Projections property(alias + + name ) as( name ))
pList add(Projections property(alias + + age ) as( age ))
pList add(Projections property(alias + + sex ) as( sex ))
dc setProjection(pList)
dc setResultTransformer(Transformers aliasToBean(User class))
resultList = memberService findByDetached(dc) size()
String alias = user_ ; //查询时的table别名
DetachedCriteria dc = DetachedCriteria forClass(User class alias)
ProjectionList pList = Projections projectionList()
pList add(Projections property(alias + + id ) as( id ))
pList add(Projections property(alias + + name ) as( name ))
pList add(Projections property(alias + + age ) as( age ))
pList add(Projections property(alias + + sex ) as( sex ))
dc setProjection(pList)
dc setResultTransformer(Transformers aliasToBean(User class))
resultList = memberService findByDetached(dc) size()
第二种方式是通过HQL语句new POJO()实现 方法如下
[java]
package domain;
public class Link
private String id;
private String name;
private String url;
private Integer index;
public Link()
//因为 String hql = select new Link(id name) from Link ;
//所以必须要有接受 个参数的构造函数
public Link(String id String name)
this id = id;
this name = name;
public String getName()
return name;
public void setName(String name)
this name = name;
public String getUrl()
return url;
public void setUrl(String url)
this url = url;
package domain;
public class Link
private String id;
private String name;
private String url;
private Integer index;
public Link()
//因为 String hql = select new Link(id name) from Link ;
//所以必须要有接受 个参数的构造函数
public Link(String id String name)
this id = id;
this name = name;
public String getName()
return name;
public void setName(String name)
this name = name;
public String getUrl()
return url;
public void setUrl(String url)
this url = url;
通过HQL语句查询
[java]
String hql = select new Link(id name) from Link ;
Query query = session createQuery(hql)
//默认查询出来的list里存放的是一个Object对象 但是在这里list里存放的不再是默认的Object对象了 而是Link对象了
List<Link> links = query list()
for(Link link : links)
String id = link getId()
String name = link getName()
System out println(id + : + name)
String hql = select new Link(id name) from Link ;
Query query = session createQuery(hql)
//默认查询出来的list里存放的是一个Object对象 但是在这里list里存放的不再是默认的Object对象了 而是Link对象了
List<Link> links = query list()
for(Link link : links)
String id = link getId()
String name = link getName()
System out println(id + : + name)
第三种方式是通过HQL语句实现 类似SQL 方法如下
[java]
String hql = select id name from Link ;
Query query = session createQuery(hql)
//默认查询出来的list里存放的是一个Object数组 还需要转换成对应的javaBean
List<Object[]> links = query list()
for(Object[] link : links)
String id = link[ ];
String name = link[ ];
System out println(id + : + name)
String hql = select id name from Link ;
Query query = session createQuery(hql)
//默认查询出来的list里存放的是一个Object数组 还需要转换成对应的javaBean
List<Object[]> links = query list()
for(Object[] link : links)
String id = link[ ];
String name = link[ ];
System out println(id + : + name)
cha138/Article/program/Java/ky/201311/28800相关参考
在hibernate中是支持多条件动态查询的这种问题是非常实用的比如说你做一个项目要实现一个复合查询 例如有这么一个界面 那么要实现这个查询对于用户来说他的查询条件可能不健全有可能只填写其
下面就sql多字段求和并作为sql查询条件的方法进行了说明供您参考希望对您学习sql查询方面有所帮助 做一个字段求和的小sql查询查询一个表中字段字段和字段之和大于的结果故写了如下的SQL语句
cha138/Article/program/net/201311/14158
PHP以指定字段为索引返回数据库所取的数据数组 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 很
从pl/sql查询字段类型为number并且长度大于位的内容显示为科学计数法的计数方法 pl/sql 从pl/sql查询字段类型为number并且长度大于位的内容显示为科学计数法的计数方法后经
下面为您介绍的是查询表的字段名的sql语句写法sql语句可以实现许多的功能希望可以您在学习sql语句使用方面获得启示 selectnamefromsyscolumnswhereid=(selec
Oracle用户数据字典以及查询表字段 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 查看当前用
测试使用ADOX方便的查询表和字段 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 添加个列表
Hibernate本地SQL查询 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 本地SQL查询来
Hibernate复合主键查询 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Hibernate