我是靠谱客的博主 爱笑电灯胆,这篇文章主要介绍mybatis进阶分页(一对多)--嵌套结果集前言一、废话不多说,直接开干二、封装之前要想好,返回的结果集是什么,然后操作,现在分享给大家,希望可以做个参考。

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、废话不多说,直接开干
  • 二、封装之前要想好,返回的结果集是什么,然后操作
    • 1.创建封装返回的类
    • 2.写接口,编码(略过),重点是xml
    • 3.手动分页,给上述查询结果,进行分页
  • 总结


前言

之前写了一篇文章一对多的嵌套查询封装,利用主表的分页后,再次进行主表的查询,达到了分页结果的准确性,今天写另外一种实现方式,就是嵌套结果集分钟查询,那么这个分页就是我之前说过的不太推荐的方式,这是一个假分页,只能将查询结果返回后进行手动分页;(由于是一次查询,分页无法放在主表上,所以只能等封装完成后,再次手动分页)


一、废话不多说,直接开干

使用范围: 例如一个字典分组表group 每个字段分组有多个字典数据 字典表 dict

二、封装之前要想好,返回的结果集是什么,然后操作

1.创建封装返回的类

代码如下(示例):

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
@Data public class GraphDictVo extends GraphDict { private List<GraphDictItem> itemList; } // GraphDictVo 和 GraphDict 除了这个集合完全一样,这样是为了不改变原有的 GraphDict 与数据库一致的类,规范而已 public class GraphDictItem implements Serializable { private static final long serialVersionUID = -83059310077853433L; private Integer id; /** * 字典项编码 */ private String code; /** * 字典项名称 */ private String name; /** * 字典编码 */ private String dictCode; /** * 创建时间 */ private String createTime; /** * 备注 */ private String remark; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getCode() { return code; } public void setCode(String code) { this.code = code; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getDictCode() { return dictCode; } public void setDictCode(String dictCode) { this.dictCode = dictCode; } public String getCreateTime() { return createTime; } public void setCreateTime(String createTime) { this.createTime = createTime; } public String getRemark() { return remark; } public void setRemark(String remark) { this.remark = remark; } }

2.写接口,编码(略过),重点是xml

代码如下(示例):

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<resultMap id="queryAllMap" type="com.hotemasoft.knowledge.manage.vo.GraphDictVo"> <id property="id" column="id" jdbcType="INTEGER"/> <result property="code" column="code" jdbcType="VARCHAR"/> <result property="name" column="name" jdbcType="VARCHAR"/> <collection property="itemList" ofType="com.hotemasoft.knowledge.manage.entity.GraphDictItem"> <id property="id" column="iid" jdbcType="INTEGER"/> <result property="code" column="icode" jdbcType="VARCHAR"/> <result property="name" column="iname" jdbcType="VARCHAR"/> <result property="dictCode" column="dict_code" jdbcType="VARCHAR"/> </collection> </resultMap> <select id="queryAll" resultMap="queryAllMap"> SELECT d.`id`,d.`name`,d.`code`,i.`id` iid,i.`name` iname,i.`code` icode ,i.`dict_code` FROM `graph_dict` d LEFT JOIN `graph_dict_item` i ON i.`dict_code` = d.`code` </select>

<collection 这个标签对应字典组中的字典集合 itemList 这样就能封装成一对多的结果了,


3.手动分页,给上述查询结果,进行分页

代码如下(示例):
这里仍然使用pagehelper 分页工具,把结果集和要分页的参数 传入即可

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public static <T> PageInfo<T> startPage(List<T> list, Integer pageNum, Integer pageSize) { //创建Page类 Page page = new Page(pageNum, pageSize); //为Page类中的total属性赋值 page.setTotal(list.size()); //计算当前需要显示的数据下标起始值 int startIndex = (pageNum - 1) * pageSize; int endIndex = Math.min(startIndex + pageSize, list.size()); //从链表中截取需要显示的子链表,并加入到Page page.addAll(list.subList(startIndex, endIndex)); //以Page创建PageInfo PageInfo pageInfo = new PageInfo<>(page); return pageInfo; }

不推荐的原因是这种方式相当于每次都查询所有,然后,手动进行了假分页,不如直接在数据库级别进行分页,取少量的数据查询效率高;

总结

与上一篇文章结合看链接: mybatis进阶分页(一对多)
这样就ok了,两种mybatis的高级查询方式都清楚了

最后

以上就是爱笑电灯胆最近收集整理的关于mybatis进阶分页(一对多)--嵌套结果集前言一、废话不多说,直接开干二、封装之前要想好,返回的结果集是什么,然后操作的全部内容,更多相关mybatis进阶分页(一对多)--嵌套结果集前言一、废话不多说,直接开干二、封装之前要想好,返回内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(70)

评论列表共有 0 条评论

立即
投稿
返回
顶部