hibernate -- hibernate笔记4
hibernate笔记4
2016年1月29日
9:34
hql语言(hibernate query language)hibernate查询语言:
那么为什么我们有了sql语句还要去用hql语句呢:
1.sql语句在对不同是数据库时有一些差异,那么如果我们完成的项目要更换数据库时再去重写sql语句显然是很不方便的,而hql语句对所有数据库都是一致的。
2.hql语句是面向对象的操作,虽然它最终也是转换为sql语言,但是它明显更符合我们的思维
一下为hql语句的一些具体应用:
from table;与sql的 select * from table;是一致的,当我们在查询该条数据的所有内容时省略select *,并且是必须省略,但也可以写成这样: select t from table as t; as 是同义词关键字,可以省略,也就是说刚才的语句可以写成 select t from table t ; 这种写法在下面会大量出现。
1 2 3 4 5 6 |
String hql =”select u from User u”; Query query = session.createQuery(hql); List<User> list = query.list(); for(User u: list){ System.out.println(u); } |
用uniqueResult修饰query表示查询的结果只有一个,为什么会有这个方法的出现呢,明显在上一个查询中我们用的是list来接收结果,但是当我们很明确我们要的结果只有一个时还用list就会导致,我们要先装进去再拿出来,这是很不明智的。
1 2 3 4 |
String hql =”from User u where u.id=1”; Query query = session.createQuery(hql); User u = (User)query.uniqueResult(); System.out.println(u); |
以上代码可格式化的简写为(每调用一个方法时就退行,方便阅读):
1 2 3 4 |
User u = (User) session.createQuery( “from User u where u.id=1” ).uniqueResult(); System.out.println(u); |
设置有参数的查询:
1 2 3 4 5 |
User u = (User) session.createQuery( “from User u where u.id=?” ).setParameter(0, 1) .uniqueResult(); System.out.println(u); |
我们也可以通过hql语句直接对数据库进行更改和删除操作,与sql语句一样,这样它不会通知session
已使用 Microsoft OneNote 2016 创建。
