mybatis使用collection实现嵌套查询

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/a_short_tail_rabbit/article/details/78980607

在写mybatis查询语句的时候,遇到需要写一个查询的接口,实现查出这个集团的所有分公司的所有部门的所有员工。显示分公司的id与名称,各个分公司部门的id与名称,各个部门人的id与姓名。最后显示在网页上的json的数据结构就是

{
  "data": {[
      {"pkid": 1, "name": "演示公司","depts": []}
      {"pkid": 3,"name": "通信公司",
        "depts": [
         {"pkid": 1,"fgsid": 3,"name": "信息部"
           "employees": [
          {"pkid": "1","fgsid": "3","name": "管理员"},
         {"pkid":"1","fgsid": "3","name":"APP Test"},
          {"pkid": "1","fgsid": "3","name":"管理员" }
      ]}
      ]}

首先新建一个分公司的类Bransh,

class Branch{
int pkid;
String name;
写类的构造方法
写getset方法
}

创建一个部门的类

class Dept{
int pkid;
int fgsid;//分公司id
String name;
类的构造方法
getset方法
}

创建一个员工类

class Employee{
int pkid;
int fgsid;
int bmid;
String name;
getset方法;
类的构造方法
}

直接在mapper.xml 配置文件写这样的sql。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"      
 "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd">
<mapper namespace="com.dawn.push.mapper.messageMapper">
    //首先查出一个分公司的所有的部门的所有员工
    <select id="queryOneBranchAllDept" resultMap="deptMap">
        select
        b.pkid,b.name,b.fgsid,e.pkid,e.fgsid,e.bmid,e.name
        from dggc1.dbo.bd_bm b,dggc1.dbo.bd_emp e
        where b.pkid=e.bmid and b.fgsid=#{fgsid};
    </select>
    //查出所有的分公司
<select id="queryAllbranch" resultMap="branchMap">
 select f.pkid,f.name
 from dggc1.dbo.bd_fgs f
</select>
//这是一个分公司所有部门的员工的结果集合
<resultMap id="deptMap" type="com.pojo.Dept">
<id column="pkid" property="pkid" jdbcType="SMALLINT" />
<result column="fgsid" property="fgsid" jdbcType="SMALLINT" />
<result column="name" property="name" jdbcType="VARCHAR" />
 <collection property="employees" ofType="com.pojo.Employee">
       <result property="pkid" column="pkid" />
       <result property="fgsid" column="fgsid" />
       <result property="bmid" column="bmid" />
       <result property="name" column="xm" />
   </collection>
 </resultMap>
  //这是所有分公司所有部门所有员工的集合
 <resultMap id="branchMap" type="com.pojo.Branch">
<id column="pkid" property="pkid" jdbcType="SMALLINT" />
<result column="fid" property="fid" jdbcType="SMALLINT" />
<result column="name" property="mc" jdbcType="VARCHAR" />
       <collection property="depts" ofType="com.dawn.push.pojo.Dept"
       select="queryOneBranchAllDept" column="{fgsid=pkid}">
      //这里的select就是使用上面的查询一个分公司的所有的部门的所有员工的集合的查询语句。这里colum后面就是查询条件,输入要查询的分公司的分公司id就是在queryOneBranchAllDept这个查询方法要输入的参数fgsid。
          <id column="pkid" property="pkid" jdbcType="SMALLINT" />
         <result column="fgsid" property="fgsid" jdbcType="SMALLINT" />
         <result column="name" property="mc" jdbcType="VARCHAR" />
     </collection>
     </resultMap>
</mapper>

这样就可以实现嵌套了。也可以实现sql语句的重用。如果还有其他疑问,可以反馈给我。

猜你喜欢

转载自blog.csdn.net/a_short_tail_rabbit/article/details/78980607