IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> mybatis配合pageHelper一对多查询分页问题处理 -> 正文阅读

[Java知识库]mybatis配合pageHelper一对多查询分页问题处理

使用mybatis结合pageHelper实现分页查询,但查询多表的时候数据就会比真实的要少,如下面程序。

需求是:tab_question是题目表,tab_option是选项表,查询一道题目下面4个选项,一页有5个题目。

//controller层
@RestController
@RequestMapping("/question")
public class QuestionController extends BaseController {
    @Autowired
    private QuestionService questionService;
    @GetMapping
    public PageInfo findAll(){
        PageHelper.startPage(1, 5);
        List<Question> questions = questionService.findAll();
        PageInfo pageInfo = new PageInfo(questions);
        return pageInfo;
    }
}

mapper配置

<resultMap id="questionMap" type="question">
    <id column="qid" property="qid"/>
    <result column="question" property="question"/>
    <result column="qtype" property="qtype"/>
    <collection property="options" ofType="option" >
        <id column="oid" property="oid"/>
        <result column="optionDec" property="optionDec"/>
        <result column="qid" property="qid"/>
    </collection>
</resultMap>

<select id="findAll" resultMap="questionMap">
    select * from tab_question q left join tab_option o on q.qid = o.qid
</select>

查询结果,一页只有一个题目,而且第二个题目还不全

{
    "total": 36,
    "list": [
        {
            "qid": 1,
            "question": "这个问题有几个字",
            "qtype": 1,
            "options": [
                {
                    "oid": 1,
                    "optionDec": "1",
                    "qid": 1
                },
                {
                    "oid": 2,
                    "optionDec": "2",
                    "qid": 1
                },
                {
                    "oid": 3,
                    "optionDec": "3",
                    "qid": 1
                },
                {
                    "oid": 4,
                    "optionDec": "8",
                    "qid": 1
                }
            ]
        },
        {
            "qid": 2,
            "question": "大明王朝1566有哪些角色",
            "qtype": 2,
            "options": [
                {
                    "oid": 5,
                    "optionDec": "嘉靖",
                    "qid": 2
                }
            ]
        }
    ]
}

原因是:此时的分页是多表查询后得到的记录再进行分页(相当于按照选项进行分页),但实际要查询的是按照题目进行分页。

解决办法:使用子查询

修改mapper配置,在resultMap中嵌套子查询

<!--此处省略了id,result标签-->
<resultMap id="questionMap" type="question">
    <collection property="options" ofType="option" column="qid" select="findOptionById"/>
</resultMap>
<!--主查询-->
<select id="findAll" resultMap="questionMap">
    select * from tab_question
</select>
<!--子查询-->
<select id="findOptionById" parameterType="int" resultType="option">
    select * from tab_option where qid = #{qid}
</select>

这次结果就对了

{
    "total": 9,
    "list": [
        {
            "qid": 0,
            "question": "这个问题有几个字",
            "qtype": 1,
            "options": [
                {
                    "oid": 1,
                    "optionDec": "1",
                    "qid": 1
                },
                {
                    "oid": 2,
                    "optionDec": "2",
                    "qid": 1
                },
                {
                    "oid": 3,
                    "optionDec": "3",
                    "qid": 1
                },
                {
                    "oid": 4,
                    "optionDec": "8",
                    "qid": 1
                }
            ]
        },
        {
            "qid": 0,
            "question": "大明王朝1566有哪些角色",
            "qtype": 2,
            "options": [
                {
                    "oid": 5,
                    "optionDec": "嘉靖",
                    "qid": 2
                },
                {
                    "oid": 6,
                    "optionDec": "海瑞",
                    "qid": 2
                },
                {
                    "oid": 7,
                    "optionDec": "张居正",
                    "qid": 2
                },
                {
                    "oid": 8,
                    "optionDec": "徐阶",
                    "qid": 2
                }
            ]
        },
        {
            "qid": 0,
            "question": "海钢锋叫什么",
            "qtype": 1,
            "options": [
                {
                    "oid": 10,
                    "optionDec": "海瑞",
                    "qid": 26
                },
                {
                    "oid": 11,
                    "optionDec": "海笔架",
                    "qid": 26
                },
                {
                    "oid": 12,
                    "optionDec": "润莲",
                    "qid": 26
                },
                {
                    "oid": 13,
                    "optionDec": "白圭",
                    "qid": 26
                }
            ]
        },
        {
            "qid": 0,
            "question": "海钢锋叫什么",
            "qtype": 1,
            "options": [
                {
                    "oid": 14,
                    "optionDec": "海瑞",
                    "qid": 28
                },
                {
                    "oid": 15,
                    "optionDec": "海笔架",
                    "qid": 28
                },
                {
                    "oid": 16,
                    "optionDec": "润莲",
                    "qid": 28
                },
                {
                    "oid": 17,
                    "optionDec": "白圭",
                    "qid": 28
                }
            ]
        },
        {
            "qid": 0,
            "question": "海钢锋叫什么",
            "qtype": 1,
            "options": [
                {
                    "oid": 18,
                    "optionDec": "海瑞",
                    "qid": 29
                },
                {
                    "oid": 19,
                    "optionDec": "海笔架",
                    "qid": 29
                },
                {
                    "oid": 20,
                    "optionDec": "润莲",
                    "qid": 29
                },
                {
                    "oid": 21,
                    "optionDec": "白圭",
                    "qid": 29
                }
            ]
        }
    ]
}
  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-08-24 15:25:20  更:2021-08-24 15:27:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/19 4:19:05-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码