【mysql】 mybatis实现 主从表 left join 1:n 一对多 分页查询 主表从表都有查询条件 【mybatis】count 统计

mybatis实现 主从表 left join  1:n 一对多 分页查询   主表从表都有查询条件+countjava

 

需求:数据库

========================================api

1.主从表数据 是 1:mmybatis

2.主从表各自都有查询条件app

3.最后查询结果 须要分页,并统计总数dom

 

 

注意:spa

=======================================code

1.查询的分页,必须在数据库作,不然分页没有意义xml

 

 

 

解决方法:blog

 

注意 下面的入参中 [第一页的10条]

pageNum=0

PageSize=10

 

实际入参应该是处理过的

pageNum = pageNum*10
pageSize = 10

 

 

 

 

##############################有对应实体接收查询结果的状况下################################

1.mapper.xml应该这么写

<resultMap type="com.lsrsjava.daywork.domain.week.自定义Bean" id="myResultMap">
    <id column="id" property="id"/>
    <!--一堆的主表 属性-->
    <result column="userId" property="userId"/>
    <result column="userName" property="userName"/>
    <result column="userImg" property="userImg"/>
    

    
    <!--子表对应的属性 封装在list中  即接收了 主表对子表的 1:N -->    
    <collection property="listData" javaType="com.lsrsjava.daywork.domain.week.子表Bean" columnPrefix="slaveTable_">
        <id column="id" property="id"/>
        <result column="rowId" property="rowId"/>
        <result column="colName" property="colName"/>
        <result column="val" property="val"/>
    </collection>
</resultMap>


<select id="pageFind" resultMap="myResultMap" parameterType="com.lqjava.daywork.api.beans.WorksheetDataSaveBean">

  SELECT
    base.id,
    t.id slaveTable_id,
    t.row_id slaveTable_rowId,
    t.col_name slaveTable_colName,
    t.val slaveTable_val
  FROM
    (
        SELECT
            *
        FROM
            worksheet_data_${dataId}
        WHERE
--  此处以后加 主表的 where查询条件拼接

        LIMIT #{pageNum}, #{pageSize}
    ) base
    LEFT JOIN
        worksheet_data_table_data t
    ON
        base.id = t.row_id
    WHERE
    <!-- 此处以后加 子表单的 where查询拼接 -->
</select>

 

2.mapper.java应该这么写

List<自定义的Bean> pageFind(WorksheetDataSaveBean queryBean);

 

 

############################### 不肯定返回字段类型[即表中属性是动态的,没有对应实体的状况下]###################################

1.mapper.xml中应该这么写

[下面的示例中:由于我不肯定返回的字段,因此用HashMap直接接收查询结果后 本身处理的结果集]

   <select id="pageFind" resultType="java.util.HashMap" parameterType="com.lsrjava.daywork.api.beans.WorksheetDataSaveBean">

      SELECT
        base.*,
        t.id slaveTable_id,
        t.row_id slaveTable_rowId,
        t.col_name slaveTable_colName,
        t.val slaveTable_val
      FROM
        (
            SELECT
                *
            FROM
                worksheet_data_${dataId}
       WHERE -- 此处以后加 主表的 where查询条件拼接 LIMIT #{pageNum}, #{pageSize} ) base LEFT JOIN worksheet_data_table_data t ON base.id = t.row_id
     WHERE
<!-- 此处以后加 子表单的 where查询拼接 --> </select>

 

 

2.mapper.java应该这么写

List<Map<String,String>> pageFind(WorksheetDataSaveBean queryBean);

 

 

===================================count=============================================

count 是什么?count就是页面的 总共total条数

 

1.mapper.xml应该这么写

<select id="count" parameterType="com.lqjava.daywork.api.beans.WorksheetDataSaveBean" resultType="java.lang.Long">
    SELECT
        count( DISTINCT base.id ) count
    FROM
        worksheet_data_${dataId} base
    LEFT JOIN
      worksheet_data_table_data c
    ON
      c.row_id = base.id
--         拼接条件的地方

</select>

 

2.mapper.java应该这么写

Long count(WorksheetDataSaveBean queryBean);
相关文章
相关标签/搜索