数据在库中表的对应关系为一对多对多关系

比如 班级 小组 成员

他们之间的关系 班级 对 小组 是一对多 小组 对成员是 一对多

所以班级 小组 成员 是 一对多对多的关系

这是候可以将 班级的javaBean里面放一个小组 的 List<小组>属性,查询到的小组集合塞进班级的javaBean里面,同理小组和成员也是一样.

(穿插记忆:当多表关联查询时,查询到的一组数据时单行多列,子查询的外边用in 或者 between

eg:查询小组中成员的详情

select <inclede=“Search_Member”> from t_member where id in(select member_id from t_group_member where group_id=#{id})

------多表关联查询,以下的规则适合于报表语句的编写-------
1.先找出要显示数据所在的表,t_package,t_checkgroup,t_checkitem
2.找出条件所在的表 t_package id=XX
3.找出要显示数据表之间的关系,没有则找中间表, t_checkgroup_checkitem,t_package_checkgroup
4.找出条件所在表与数据表之间的关系,没有就找中间表

eg:

数据仓库一对多关系 1对多的数据库关系_sql


关联条件:

and p.id=pc.package_id and pc.checkgroup_id=g.id
 and g.id=cc.checkgroup_id and cc.checkitem_id=i.id

(回顾:显隐内外连接https://zhidao.baidu.com/question/2075544870330421668.html)

数据仓库一对多关系 1对多的数据库关系_mysql_02


Sql语句:

SELECT p.*,pc.checkgroup_id,i.name
 FROM t_package p,t_checkgroup g,t_checkitem i,t_checkgroup_checkitem cc,t_package_checkgroup pc
 WHERE p.id=12
 AND p.id=pc.package_id AND pc.checkgroup_id=g.id AND g.id=cc.checkgroup_id AND cc.checkitem_id=i.id

查询结果

数据仓库一对多关系 1对多的数据库关系_sql_03


(默认规则一般查出来的都要把id带上,以备前端调用参数复用)

语句可以查出来,但是要在java中映射JavaBean对象,显然只有这样是不行的,由于这个关系是一对多的关系,Mybatis中用resultMap做结果的映射处理.

优化之前的Sql: 这种需要执行很多次,一个package_Id进去之后,会走到service,这时候如果一个检查组对应多个检查项,比如说10个,就要执行10次,效率太低,需要进行调优.

PackageDao.xml文件

数据仓库一对多关系 1对多的数据库关系_sql_04


CheckGroupDao.xml文件:

数据仓库一对多关系 1对多的数据库关系_数据仓库一对多关系_05


CheckItemDao.xml文件:

数据仓库一对多关系 1对多的数据库关系_mysql_06


优化之后的Sql代码

<select id="findById" resultMap="packageCheckGroupCheckItemResultMap" parameterType="integer">
    SELECT p.*,pc.checkgroup_id,i.name
        FROM t_package p,t_checkgroup g,t_checkitem i,t_checkgroup_checkitem cc,t_package_checkgroup pc
        WHERE p.id=#{id}
        AND p.id=pc.`package_id` AND pc.`checkgroup_id`=g.`id`
        AND g.id=cc.`checkgroup_id` AND cc.`checkitem_id`=i.`id`
</select>
<!--    上面已经写好了要查询出来的东西,现在要做的就是 封装packageCheckGroupCheckItemResultMap-->
<resultMap id="packageCheckGroupCheckItemResultMap" type="Package">
    <!--套餐-->
    <id property="id" column="id"/>
    <result property="name" column="name" />
    <result property="code" column="code" />
    <result property="helpCode" column="helpCode" />
    <result property="sex" column="sex" />
    <result property="age" column="age" />
    <result property="price" column="price" />
    <result property="remark" column="remark" />
    <result property="attention" column="attention" />
    <result property="img" column="img" />
    <!--检查组-->
    <collection property="checkGroups" ofType="CheckGroup" javaType="List">
        <id property="id" column="checkgroup_id"/>
        <result property="name" column="checkgroup_remark"/>
    <!--检查项-->
        <collection property="checkItems" ofType="CheckItem" javaType="List">
            <id property="id" column="checkitem_id"/>
            <result property="name" column="checkitem_name"/>
        </collection>
    </collection>
</resultMap>