记录一下经常遇到的问题:列表分页查询,数据是一对多的形式
三种实现方式
1、Service层实现
2、不使用分页插件,子查询
3、使用mybatis的懒加载
示例为一篇文章关联多个附件,代码中的部分简单业务逻辑已删除
1. Mapper接口
@Mapper
public interface ArticleMapper {
// ========== 方案一:Service层实现 ==========
// 查询文章列表(不关联文件)
List<Article> selectArticleList(@Param("dto") ArticleQueryDto dto,
@Param("offset") Integer offset,
@Param("limit") Integer limit);
// 查询文章总数
int selectArticleCount(@Param("dto") ArticleQueryDto dto);
// 根据文章ID列表查询文件
List<FileInfoDto> selectFilesByArticleIds(@Param("articleIds") List<Long> articleIds);
// 检查用户是否点赞
boolean checkUserLiked(@Param("userId") String userId, @Param("articleId") Long articleId);
// ========== 方案二:子查询 ==========
// 子查询方式查询文章列表
List<ArticleInfoVo> selectListWithSubquery(@Param("dto") ArticleQueryDto dto,
@Param("userId") String userId,
@Param("offset") Integer offset,
@Param("limit") Integer limit);
// 子查询方式查询总数
int selectCountWithSubquery(@Param("dto") ArticleQueryDto dto);
// ========== 方案三:使用select属性进行懒加载 ==========
// 使用select属性进行懒加载,也可以使用分页插件进行处理
List<ArticleInfoVo> selectListWithSelect(@Param("dto") ArticleQueryDto dto,
@Param("userId") String userId);
}
2. Mapper XML
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mapper.ArticleMapper">
<resultMap id="ArticleWithFileMap" type="com.example.vo.ArticleInfoVo">
<id column="id"

最低0.47元/天 解锁文章
8447

被折叠的 条评论
为什么被折叠?



