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 创建。