hibernate多表关联查询

本文详细介绍了如何在项目中实现多表查询并显示数据,包括实体类的配置、映射文件的设置以及多表查询的HQL语句拼装与分页返回。通过实例演示了如何在列表页面中展示关联的两表数据。

     项目接触到多表查询并显示,在这里总结一下。

      实训学生表中有classId,但没有年级和班级,实训班级表中有年级和班级。两表通过实训班级ID(classId)关联。首先,实训学生表中有实训班级ID这一列,在实训学生类中,实训班级ID不用写,只需用实训班级对象代替即可
private TraClass traClass;//实训班级对象

   在实体类添加完后,在类的映射文件中同样添加。
        <!-- 实训班级对象 -->
        <many-to-one name="traClass" column="classId"
        class="com.dh.stu.traclass.pojos.TraClass" insert="false" update="false">
        </many-to-one>

在这里,添加多对一关系,配置文件所在类为“多”,即学生表;实训班级表为“一”。这里注意,many-to-one中,name对应实训学生表中的属性,即班级对象。column对应实训学生表的列名。class对应“一”所在类的路径名。

这样,关联关系就配好了,下面就是在页面中获得属性值。

列表页面中,${item.traClass.className }。即可显示出两表的数据。

    其次,考虑到多表查询,使用拼装hql语句分页,并返回list。

public String list() {
        // 从请求参数中获取pageNumber
        String[] str = ActionContextUtils.getParameters(Globals.PAGE_NUMBER);
        int pageNo = NumberUtils.toInt(str[0], 1);
        StringBuffer hql = new StringBuffer();
        hql.append(" from TrainStudent t where 1=1 ");
        List<Object> params = new ArrayList<Object>(0);
        if (!StringUtils.isEmpty(this.grade)) {
            hql.append(" and t.traClass.grade like ?");
            params.add("%" + this.grade + "%");
        }
        if (!StringUtils.isEmpty(this.className1)) {
            hql.append(" and t.traClass.className like ?");
            params.add("%" + this.className1 + "%");
        }
        if (!StringUtils.isEmpty(this.studentName)) {
            hql.append(" and t.studentName like ?");
            params.add("%" + this.studentName + "%");
        }
        if (!StringUtils.isEmpty(this.studentNo)) {
            hql.append(" and t.studentNo like ?");
            params.add("%" + this.studentNo + "%");
        }
        
        Pagination<TrainStudent> pagination = this.trainStuService.findByPage(
                pageNo, this.getPageSize(), hql.toString(), params.toArray());
        // 把pagination对象保存到request范围中
        ActionContextUtils.setAtrributeToRequest("pagination", pagination);
        return "list";
    }

这样,就可以实现多表显示及查询了。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值