日期:2014-05-19  浏览次数:20763 次

初学者的一个疑问
刚学JAVA,看一段代码:
public List<Users> findAllUsers() {
String hql = "from Users users order by users.id desc";
return (List<Users>)this.getHibernateTemplate().find(hql);

为什么hql这个sql语句可以省略select *,如果我只想列某几个字段呢?这个在哪里定义的?

另外,find函数应该是两个参数,为什么第二个参数可以省略掉?

谢谢?

------解决方案--------------------
这是hibernate的知识,hql语句和sql语句是有区别的,sql语句操作的是表,hql语句是数据库表对应的类。
如果你要查某几个字段也可以,要先起别名,
例如:String hql = "select u.id,u.name,u.password from Users u ";但是这样查出来是数组,你要在service里面重新封装一下才可以。。。
------解决方案--------------------
1,hql查找的是对象不是字段,对象查找出来了,对象的属性就都知道了。
2,运行时根据xxx.hbm.xml配置,把数据库中的表映射到对象、表的字段映射到对象的属性。
------解决方案--------------------
引用:
感谢上面的兄弟真诚帮忙!
由于分用完了,还有几个问题麻烦也解答下,呵呵
1、有个文档提到调用hibernate的原理,通过Configuration().configure();读取并解析hibernate.cfg.xml配置文件
   我在下载的例子中查找这个configure()函数,找不到,是不是没必要关心这个
2、文档还提到,在hibernate的启动过程……

hibernate 在调用到configure()这个函数的时候,才开始加载hibernate.hbm.xml这个文件,然后创建会话,以及后面的操作。hibernate.properties 这个文件是hibernate另一种配置文件形式 ,这样就不需要读取之前的那个文件
------解决方案--------------------
hibernate的配置文件是hibernate.cfg.xml,不好意思记错名字了。。。
Configuration().configure();这个函数是不需要写的吧,我使用hibernate时没有写过。。。
还有就是使用hibernate工程里面应该是没有hibernate.properties这个文件,你写的实体类对应的.xml文件都要注入到hibernate.cfg.xml文件里面,当工程操作数据库时会自动读取并解析hibernate.cfg.xml配置文件,就是你说的系统执行的。。。