hibernate hql
HQL
EJBQL
在使用HQL语句的时候,一般都是session.createQuery(String str)的方式进行设置,括号中的str是指要进行操作的QL语句,返回的是一个Query对象。因为是面向对象的操作,所以在QL语句中不能直接写操作的表名,而是要写类的名字。然后再根据具体的情况,如果返回的是一个list集合的话,就有list集合进行接收,要注意因为没有使用泛型,所以要自己进行强转,再循环取出需要的对象的值。
- Is empty测试集合属性是否为空、is not empty测试对象是否为空
- %是代表出现0或者多个,_是代表出现1次,’_0’指的是10、20…100…101..109
- Left join:左外连接,把连接右边多余的字段取出来
Righr join:右外连接,把连接左边多余的字段取出来
- In和exist二选一的话选exist,因为exist执行效率高。In可以实现exist的功能。
- 执行更新语句的时候用q.excuteUpdate()。
- 在练习中有用到查到current_date、current_time等,是为了查出数据库的当前时间,作用是当多台电脑继承使用同一台服务器上的数据库时,为了使获取的时间一致,故不获取电脑当前时间,而是获取同一数据库的当前时间,便于统一。
- 使用naviteSQL语句的时候,具体的sql语句写的是自带的sql,故这里改写的是表名,而且如果想以list集合的形式查找出全部,查找的时候要把表的全部属性找出来。
QBC
QBC的全称是Query By Criteria,即用一个Criteria对象来进行操作,把QL语句写到Criteria对象中。Criteria的意思是标准的意思,即创建一个标准。
查看session的api文档(查文档能力很重要)会发现session有如下这么一个方法createCriteria(class arg0),用面向对象的方法去理解是要传递一个对象进行,但是该对象要通过表进行了映射了。继续调用add()方法,里面可以传递Restriction对象的具体方法,可以说传统sql语句都可以在Restriction中找到具体的对应方法。如果想对进行表的关联,可以在调用add方法之后继续调用createCritical(“”),不过此时进行传递的参数就是之前指定的类的关联属性了。如上面arg0写了Topic,下面就可以写“category”,前提是Topic对像中要有这么一个属性。
QBE
QBE是Query By Example。其实QBE和QBC的用法是差不多的。在QBE中会创建一个Example对象,用来存放一个对象的引用,而对象的引用可以设置值进行,根据设置进去的值与Example属性的设置,实现查询等的功能。
如果创建一个Topic对象,存进了一个name属性,为”T_”,然后再创建Example的时候不是开辟一个新的Example对象,而是用Example.create()的方式进行开辟,括号中间传递进去了对象的引用。然后Example对象可以调用其余的方法,如ignoreCase().enableLike();表示的是用Example对象设置的参数”T_”忽略大小写进行查询。当然这样设置还不够,还是要创建Criteria对象,调用add方法把Example对象的引用添加进去。