乐趣区

关于spring:SSM关联查询常用的两种方式

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>

页面成果如图

退出移动版