我是靠谱客的博主 爱笑电灯胆,最近开发中收集的这篇文章主要介绍mybatis进阶分页(一对多)--嵌套结果集前言一、废话不多说,直接开干二、封装之前要想好,返回的结果集是什么,然后操作,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- 一、废话不多说,直接开干
- 二、封装之前要想好,返回的结果集是什么,然后操作
- 1.创建封装返回的类
- 2.写接口,编码(略过),重点是xml
- 3.手动分页,给上述查询结果,进行分页
- 总结
前言
之前写了一篇文章一对多的嵌套查询封装,利用主表的分页后,再次进行主表的查询,达到了分页结果的准确性,今天写另外一种实现方式,就是嵌套结果集分钟查询,那么这个分页就是我之前说过的不太推荐的方式,这是一个假分页,只能将查询结果返回后进行手动分页;(由于是一次查询,分页无法放在主表上,所以只能等封装完成后,再次手动分页)
一、废话不多说,直接开干
使用范围: 例如一个字典分组表group 每个字段分组有多个字典数据 字典表 dict
二、封装之前要想好,返回的结果集是什么,然后操作
1.创建封装返回的类
代码如下(示例):
@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
代码如下(示例):
<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 分页工具,把结果集和要分页的参数 传入即可
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进阶分页(一对多)--嵌套结果集前言一、废话不多说,直接开干二、封装之前要想好,返回的结果集是什么,然后操作所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复