问题描述
在hibernate中命名查询,想要查询全部字段可以,但要查询某两个字段就不行了,能否解决呢。<sql-queryname="select_5"><![CDATA[selectname,agefrompersonlimit3]]><returnalias="s"class="cn.itcast.bean.Person"/></sql-query>下面是构造函数packagecn.itcast.bean;publicclassPerson{privateIntegerid;privateStringname;privateIntegerage;publicPerson(){}publicPerson(Stringname,Integerage){this.name=name;this.age=age;}//publicPerson(Integerid){this.id=id;}publicPerson(Stringname){this.name=name;}//publicPerson(Integerage){this.age=age;}publicIntegergetId(){returnid;}publicvoidsetId(Integerid){this.id=id;}publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.name=name;}publicIntegergetage(){returnage;}publicvoidsetage(Integerage){this.age=age;}}
解决方案
解决方案二:
selectname,agefrompersonlimit3其中person最好是类名,首字母大写。。。你既然全部可以查询出来的话,你在显示页面中控制下,把要显示的字段输出来不就可以了吗??
解决方案三:
哈哈,楼上有所不知哦,如果返回所有字段的,数据量一大,查询的速度就慢了,哈哈,所以要只查某一两个字段,是有道理的请高手帮忙
解决方案四:
使用数组Object[],如下:SessionFactorysessionfactory=HSF.getSessionFactory();Sessionsession=sessionfactory.openSession();Queryquery=session.createQuery("selectid,name,passfromHaha");List<Object[]>list=query.list();for(Object[]user:list){System.out.print(user[0]);System.out.print(user[1]);System.out.print(user[2]);System.out.println();}session.close();sessionfactory.close();
解决方案五:
谢谢,这个方法我知道,但这个方法实际使用起来真是麻烦哦,想来想去还是喜欢SQL多一点。谁能告诉我,在xml里,我该怎么多呢
解决方案六:
查询对象某几个属性,像楼上说的一样,用Object数组接收即可:SessionFactorysessionfactory=HibernateSessionFactory.getSessionFactory();Sessionsession=sessionfactory.openSession();Queryquery=session.createQuery("selectp.age,p.namefromPersonp");//注意HQL查询是查询对象,所以Person是大写开头的List<Object[]>list=query.list();for(Object[]attribute:list){System.out.print(attribute[0]);System.out.print(attribute[1]);System.out.print(attribute[2]);}
解决方案七:
谢谢,这个方法我知道,但这个方法实际使用起来真是麻烦哦,如果是做大型的项目的话,这样的查询方法显然是行不通的,想来想去还是喜欢在XML里写SQL,或者是存储过程好一点。谁能告诉我,在xml里,我该怎么多呢
解决方案八:
哈哈,忙了半天终于自己搞定了
解决方案九:
???怎末搞定的?分享下
解决方案十:
爱用sql,还非要在hibernate里用,无语了。