`

使用Hibernate实现多表查询

阅读更多

项目中使用的是Hibernate框架,对于表查询一直只针对一张表,原码:

// 搜索员工
 public List searchUseraccount(String username, String deptid, String cid,
                                          String groupid) throws Exception {
     List accountList = new ArrayList();
     try {
              session = HibernateSessionFactory.getSession();
              t = session.beginTransaction();
              StringBuffer hql = new StringBuffer();
              hql.append("from Account where cid ='" + cid
                              + "' and username like '%" + username + "%'");
              if (null!=deptid&&!"0".equals(deptid)) {
                     hql.append(" and deptid='" + deptid + "'");
              }
              if (null!=groupid&&!"0".equals(groupid)) {
                     hql.append(" and gid='" + groupid + "'");
              }
              Query query = session.createQuery(hql.toString());
              accountList = query.list();
              t.commit();
     } catch (Exception e) {
              System.out.println("searchUseraccount fail!");
              e.printStackTrace();
     } finally {
              HibernateSessionFactory.closeSession();
     }
     return accountList;
 }

但需求变化--->表结构变化,查询的结果必须通过两张表,通过搜索(http://zjsoft.iteye.com/blog/152328)得到了解决办法,写法如下:

// 搜索员工
 public List searchUseraccount(String username, String deptid, String cid,
                                           String groupid) throws Exception {
     List accountList = new ArrayList();
     try {
             session = HibernateSessionFactory.getSession();
             t = session.beginTransaction();
             StringBuffer hql = new StringBuffer();
             hql.append("select * from account where cid ='" + cid
                             + "' and username like '%" + username + "%'");
             if (null != deptid && !"0".equals(deptid) && !"".equals(deptid)) {
                     hql.append(" and deptid='" + deptid + "'");
             }
             if (null != groupid && !"0".equals(groupid) && !"".equals(groupid)) {
                     hql.append(" and (aid in (select aid from Agmapping where "

                                     +" gid = '" + groupid + "')))");
             }
            Query query = session.createSQLQuery(hql.toString())

                                                       .addEntity(Account.class);
            accountList = query.list();
            t.commit();
     } catch (Exception e) {
            System.out.println("searchUseraccount fail!");
            e.printStackTrace();
     } finally {
            HibernateSessionFactory.closeSession();
     }
     return accountList;
 }

不同于我以前的写法在于红色区域,createSQLQuery方法的参数是纯sql语句,关于createSQLQuery的用法参见:http://jihongbin12329.iteye.com/blog/88678

分享到:
评论

相关推荐

    hibernate多表联合查询

    在Hibernate中,可以使用以下几种方式来实现多表联合查询: - **HQL (Hibernate Query Language)** - **Criteria API** - **Native SQL** 本文将重点介绍如何使用HQL和Native SQL来实现多表联合查询。 #### 三、...

    Hibernate连表查询 Hibernate连表查询

    如果查询结果包含多个字段,并且希望将这些字段封装成一个对象,则可以使用Hibernate的投影列表功能,或者手动创建一个新的类来存储查询结果。 ### 总结 本文主要介绍了Hibernate中的连表查询方法及其在实际开发中...

    hibernate 多表查询

    hibernate 多表查询 hibernate 多表不同于一般的sql嵌套查询,嵌套查询是不支持的,所以必须要配置好才能实现多表!只要配置好了,还是特别好用的

    Hibernate 多表连接分页查询示范项目

    总结,"Hibernate 多表连接分页查询示范项目"是一个实用的示例,它展示了如何在实际应用中利用 Hibernate Criteria API 实现复杂查询和分页,对于学习和掌握 Hibernate 的高级特性和数据库操作技巧非常有帮助。...

    hibernate实现动态表查询的多种解决方案

    本文介绍了三种利用Hibernate实现动态表查询的方法:自定义命名策略、使用拦截器以及利用Session的开放性。每种方法都有其适用场景,开发者可以根据实际需求选择最合适的一种。例如,在需要频繁更改表名的情况下,...

    hibernate 进行多表查询每个表中各取几个字段

    本篇文章将探讨如何在Hibernate中进行多表查询,并从每个表中选取特定的字段。 一、Hibernate的多表查询基础 在Hibernate中,多表查询通常涉及到关联关系的映射,包括一对一(OneToOne)、一对多(OneToMany)、多...

    hibernate实现动态SQL查询

    本篇文章主要探讨如何利用Hibernate实现动态SQL查询,结合XML配置和FREEMARKER模板引擎来生成执行的SQL语句。 一、Hibernate简介 Hibernate作为一款强大的持久层框架,它简化了Java应用程序与数据库之间的交互。...

    hibernate实现递归查询

    本文将深入探讨如何使用Hibernate实现递归查询,以解决在数据层次结构中涉及父节点与子节点关系时的问题。递归查询通常用于处理树形结构的数据,例如组织结构、菜单系统或者文件目录等。 首先,我们需要了解递归的...

    Hibernate各种查询:联表查询 分页查询 位置参数查询(?) 占位符查询(冒号查询) 统计查询

    在Hibernate中,可以使用`Criteria` API或者`HQL`(Hibernate Query Language)来实现多表联查。`Criteria` API提供了更加面向对象的查询方式,通过`createCriteria()`方法指定主表,然后使用`createAlias()`方法...

    Hibernate查询练习小例子

    利用MYSQL数据库提供的样例数据库world建立的查询小例子。已经建立好了数据库对应的...本项目主要是为了练习使用Hibernate查询数据库。如果有什么问题可以发站内信或者邮件asddf14@hotmail.com。我会尽量解答一下~~~

    hibernate代码优化基于配置的多表查询

    本文将深入探讨如何通过配置优化Hibernate的多表查询,以提高应用的性能。 1. **联合查询优化**: 在进行多表查询时,Hibernate默认可能会生成多个单表查询,这会导致大量的数据库往返,降低效率。通过配置`@Join...

    Spring+Hibernate实现用户登录

    本项目"Spring+Hibernate实现用户登录"旨在演示如何整合这两个框架,构建一个能够处理用户登录功能的Web应用程序。下面将详细介绍这个项目涉及的关键知识点。 1. **Spring框架**:Spring是一个全面的Java应用开发...

    JSP+Hibernate实现留言板

    **JSP+Hibernate实现留言板详解** 在Web开发中,创建一个功能完善的留言板系统是一项常见的任务。这个系统通常涉及用户交互、数据存储以及后端逻辑处理。在这个案例中,我们使用了Java服务器页面(JSP)作为视图层...

    Hibernate实现原理模拟

    **Hibernate实现原理模拟** 在Java开发中,Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作。本教程将通过模拟Hibernate的实现原理,帮助开发者深入理解其工作方式,以便更好地运用到实际...

    Struts2+Hibernate实现一对多联表查询

    本项目利用这两个框架实现了一对多关联关系的联表查询,即部门表与员工表之间的关系。 首先,部门表可以包含多个员工,而每个员工只属于一个部门,这就是典型的一对多关系。在Hibernate中,这种关系可以通过在实体...

    hibernate多对多关联映射

    本文将深入探讨Hibernate如何实现多对多关联映射,并通过实际例子解析相关配置和操作。 一、多对多关联概述 在数据库设计中,多对多关联表示两个表之间的关系,如学生和课程的关系,一个学生可以选修多门课程,而...

    Hibernate多表查询.txt

    本文将深入探讨Hibernate中的多表查询技术,解析其背后的原理与实践方法,帮助开发者更好地掌握这一核心技能。 ### Hibernate多表查询概述 在现实世界的应用场景中,数据往往不会孤立存在,而是通过关联分布在多个...

    Hibernate-基础联表模板

    "Hibernate-基础联表模板"是针对Hibernate中联表查询的一个实用工具,旨在帮助开发者快速地进行多表关联查询,而不必记住复杂的SQL语句。 1. **Hibernate简介** Hibernate是一种开源的ORM框架,它允许开发者将Java...

    使用Hibernate实现任务管理系统

    总结,这个“使用Hibernate实现任务管理系统”项目涵盖了ORM的使用、数据库设计、用户权限管理、分页排序等多个关键点,是学习和实践Java Web开发以及Hibernate技术的良好实例。通过这个项目,开发者能够深入了解...

    ExtJs4.2+Mysql+Struts2+Hibernate3实现分页查询

    ExtJs4.2+Mysql+Struts2+Hibernate3实现分页查询 1.libs目录缺少hibernate核心jar包 2.libs目录缺少struts jar 3.WebRoot目录缺少ExtJs4.2核心类库 以上信息我都在项目里面注明了,因为这些内容的文件太大了,CSDN不...

Global site tag (gtag.js) - Google Analytics