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>
页面成果如图