0th
接简洁版SSM08,这个案例没有解决多对一的关联查问
1th 第一种形式
拼sql,批改原来的sql
原sql
<!-- sql 要留神测试 -->
<select id="selectEmp" resultType="Emp">
select e.*, d.departname departname2 from emp e
where 1=1
<if test="empname!=null and empname!='' ">
and e.empname like '%${empname}%'
</if>
order by empid desc
</select>
为关联查问批改后sql
<!-- sql 要留神测试 -->
<select id="selectEmp" resultType="Emp">
select e.*, d.departname departname2 from emp e
left outer join depart d on e.departid=d.departid
where 1=1
<if test="empname!=null and empname!='' ">
and e.empname like '%${empname}%'
</if>
order by empid desc
</select>
Emp bean里减少departname2字段和setter,getter办法
private String departname2;
public String getDepartname2() {
return departname2;
}
public void setDepartname2(String departname2) {
this.departname2 = departname2;
}
2th for循环依据外键关联查问
mapper.java里减少
//*************************关联查问罕用的一种形式
public Depart selectDepartById(Integer departid);
mapper.xml里减少
<select id="selectDepartById" resultType="Depart">
select * from depart d where departid=${value}
</select>
emp bean里减少department字段和setter,getter办法
private String departname;
setter和getter办法的代码,略.
controller层代码如下
List<Emp> empList = empMapper.selectEmp(empname);
System.out.println(empList.size()+"-----------------------------------");
for (Emp emp : empList) {
//departid在emp表里,多对一,外键在多的表中
//依据departid--查问departname
Depart depart = empMapper.selectDepartById(emp.getDepartid());
emp.setDepartname(depart.getDepartname());
}
jsp代码减少局部
<c:forEach items="${empList }" var="m">
<tr>
<td>
<input type="checkbox" name="ck" value="${m.empid }" />
</td>
<td>${m.empid }</td>
<td>${m.empname }</td>
<td>${m.empdesc }</td>
<td>${m.departid }</td>
<td>${m.departname }</td>
<td>${m.departname2 }</td>
<td>${m.jobid }</td>
<td>${m.age }</td>
<td>${m.sex }</td>
<td>${m.birth }</td>
<td><input type="button" value="del" onclick="del(${m.empid})" /> </td>
<td><input type="button" value="update" onclick="update(${m.empid})" /> </td>
</tr>
</c:forEach>
以下两行是减少局部
<td>${m.departname }</td>
<td>${m.departname2 }</td>
页面成果如图
发表回复