服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

java应用数据库:hibernate对多表关联查询

【赛迪网技术社区整理】

由于公司项目的需要,我对hibernate对多表关联查询研究了一下,现总结如下,供朋友参考。

一、 hibernate简介hibernate是一个jdo工具。它的工作原理是通过文件(一般有两种:xml文件和properties文件)把值对象和数据库表之间建立起一个映射关系。这样,我们只需要通过操作这些值对象和hibernate提供的一些基本类,就可以达到使用数据库的目的。例如,使用hibernate的查询,可以直接返回包含某个值对象的列表(list),而不必向传统的jdbc访问方式一样把结果集的数据逐个装载到一个值对象中,为编码工作节约了大量的时间。hibernate提供的hql是一种类sql语言,它和ejbql一样都是提供对象化的数据库查询方式,但hql在功能和使用方式上都非常接近于标准的sql.

二、 hibernate与jdbc的区别hibernate与jdbc的主要区别如下:

1、 hibernate是jdbc的轻量级的对象封装,它是一个独立的对象持久层框架,和app server,和ejb没有什么必然的联系。hibernate可以用在任何jdbc可以使用的场合,从某种意义上来说,hibernate在任何场合下取代jdbc.

2、 hibernate是一个和jdbc密切关联的框架,所以hibernate的兼容性和jdbc驱动,和数据库都有一定的关系,但是和使用它的java程序,和app server没有任何关系,也不存在兼容性问题。

3、 hibernate是做为jdbc的替代者出现的,不能用来直接和entity bean做对比。

三、 hibernate 进行多表关联查询hibernate对多个表进行查询时,查询结果是多个表的笛卡尔积,或者称为“交叉”连接。 例如:from student, book from student as stu, book as boo from student stu, book boo注意:让查询中的student和book均是表student和book对应的类名,它的名字一定要和类的名字相同,包括字母的大小写。别名应该服从首字母小写的规则是一个好习惯,这和java对局部变量的命名规范是一致的。

下面列举一个完整的例子来说明hibernate对多个表进行关联查询(其中粗体是我们要特别注意的地方,相应表tbookinfo和bookselection的结构和其对应的hbm.xml、class文件就不一一列举了,有需要详细了解的朋友,请联系我):

string stest = "from tbookinfo book, bookselection sel where book.id = sel.bookid";

collection result = new arraylist();

transaction tx = null;

try {

session session = hibernateutil.currentsession();

tx = session.begintransaction();

query query = session.createquery(sql);

result = query.list();

tx.commit();

} catch (exception e) {

throw e;

} finally {

hibernateutil.closesession();

}

arraylist slist = (arraylist) result;

iterator iterator1 = slist.iterator();

while (iterator1.hasnext()) {

object[] o = (object[]) iterator1.next();

tbookinfo bookinfo = (tbookinfo) o[0];

bookselection bookselect = (bookselection) o[1];

system.out.println("bookinfo-title: " + bookinfo.gettitle());

system.out.println("bookselection-bookselectionid: " + bookselect.getid());

}

扫描关注微信公众号