初学者的一个疑问
刚学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配置,把数据库中的表映射到对象、表的字段映射到对象的属性。
------解决方案--------------------
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配置文件,就是你说的系统执行的。。。