JavaEE项目实战(OA系统)之十四_员工管理之二

  JavaEE项目实战(OA系统)之十四_员工管理之二

  二、员工列表中如何显示部门名称?

  这里主要讲解数据来源于两个以上的表时,如何进行数据检索的问题。

  一种做法是创建实体类的时候,使用Hibernate的一对多、多对多注解,这种做法数据维护将交由Hibernate管理。

  另一种做法是实体类只对应单表,涉及到查询时,另写代码。我们选择这种做法。


  1. HQL语句

  当数据来源于两个不同实体时,HQL也有两表关联的写法:

String hql = "select u.id, u.name, u.loginName, u.phone, u.sex, u.email, u.remark, u.deptId, d.name deptName from User u, Dept d where u.deptId=d.id and u.deptId=" + deptId;
  但是象这样查询属性的用法,最后返回的是值的数组,而不是一个对象。我们可以再定义一个新的实体类,属性跟上述查询一致,再定义一个构造方法,就可以使用HQL的new语法了:

String hql = "select new com.hanhf.oa.basic.user.bean.User2(u.id, u.name, u.loginName, u.phone, u.sex, u.email, u.remark, u.deptId, d.name deptName) from User u, Dept d where u.deptId=d.id and u.deptId=" + deptId;
  注意构造方法的参数顺序。

  如果你懒得再定义一个新的实体类,也可以在User类中添加一个属性deptName,并新建一个构造方法,不过要注意,这个属性必须声明为@Transient,表示这个属性不与数据库字段关联:

	@Transient
	public String getDeptName() {
		return deptName;
	}

	public void setDeptName(String deptName) {
		this.deptName = deptName;
	}
  如果没有这个声明,在数据存取时会报错。所以涉及到查询报表时,最好还是单独再定义一个实体类,用于封装查询结果。

  DAO类代码:

	@Override
	public List<User> getByDeptId(int deptId) {
		Session session = sessionFactory.getCurrentSession();
		Query query = session
				.createQuery("select new com.hanhf.oa.basic.user.bean.User(u.id, u.name, u.loginName, u.phone, u.sex, u.email, u.remark, u.deptId, d.name) from User u, Dept d where u.deptId=d.id and u.deptId="
						+ deptId);
		return (List<User>) query.list();
	}


  2. JSP页面

  使用jstl展示列表:

		<c:forEach items="${userList}" var="user">
			<tr>
				<td>${user.loginName}</td>
				<td>${user.name}</td>
				<td>${user.deptName}</td>
				<td>${user.sex}</td>
				<td><a href="userDel.action?userId=${user.id}">删除</a> <a
					href="toUserEdit.action?userId=${user.id}">修改</a> <a
					href="resetPassword.action?userId=${user.id}">初始化密码</a></td>
			</tr>
		</c:forEach>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值