Mybatis自定义关联多表并构造条件的分页查询

概述

分页查询我们用的非常多,一般来说,mybatisplus自带的哪个分页查询就能满足我们的需求,但是有些情况我们需要关联一些表来进行分页查询,这就需要我们自定义分页查询了,我来给大家分享一下,关联多表的自定义分页查询和关联多表并带有搜索条件的的自定义分页查询

实体类

帖子实体类
@Data
public class Card {
    @TableId
    private Integer cardId;//主键
    private String title;//标题
    private String content;//内容
    private String date;//日期
    private String appendix;//附件
    private String connect;//联系方式
    private String username;//用户名
    private String headImg;//头像
    private Integer cid; // 类型id
    private boolean status;//是否为热门
    @TableField(exist = false)
    private Category category; //类型
}
帖子类型
@Data
public class Category {
    @TableId
    private Integer cid; //分类id
    private String cname; //分类名称
}

关联多表的自定义分页查询

mapper接口

public interface CardMapper extends BaseMapper<Card> {
 Page<Card> findPage(Page<Card> page);
}

mapper.xml中的cardMapper

 <resultMap id="cardMapper" type="fz.pojo.Card">
        <id property="cardId" column="cardId"></id>
        <result property="title" column="title"></result>
        <result property="content" column="content"></result>
        <result property="date" column="date"></result>
        <result property="appendix" column="appendix"></result>
        <result property="connect" column="connect"></result>
        <result property="username" column="username"></result>
        <result property="headImg" column="headImg"></result>
        <result property="status" column="status"></result>
        <result property="cid" column="cid"></result>
        <association property="category" column="cid" javaType="fz.pojo.Category">
            <id property="cid" column="cid"></id>
            <result property="cname" column="cname"></result>
        </association>
    </resultMap>

查询语句

  <select id="findPage" resultMap="cardMapper">
        SELECT *
        from card
                 LEFT JOIN category on card.cid=category.cid
        ORDER BY card.cardId DESC
    </select>

服务层

@Service
public class CardService {
    @Autowired
    private CardMapper cardMapper;
    @Autowired
    private AdminService adminService;
    //分页查询(自定义)
    public Page<Card> findPage(int page, int size) {
        Page<Card> cardPage =cardMapper.findPage(new Page<>(page,size));
        return cardPage;
    }
}

关联多表并带有搜索条件的的自定义分页查询

mapper接口

 //自定义分页查询(包括搜索条件和类型关联)
    Page<Card> findSearchPage(Page<Card> page,@Param(Constants.WRAPPER) Wrapper<Card> wrapper);

mapper.xml中的cardMapper

 <resultMap id="cardMapper" type="fz.pojo.Card">
        <id property="cardId" column="cardId"></id>
        <result property="title" column="title"></result>
        <result property="content" column="content"></result>
        <result property="date" column="date"></result>
        <result property="appendix" column="appendix"></result>
        <result property="connect" column="connect"></result>
        <result property="username" column="username"></result>
        <result property="headImg" column="headImg"></result>
        <result property="status" column="status"></result>
        <result property="cid" column="cid"></result>
        <association property="category" column="cid" javaType="fz.pojo.Category">
            <id property="cid" column="cid"></id>
            <result property="cname" column="cname"></result>
        </association>
    </resultMap>

查询语句(这里的${ew.customSqlSegment}很关键)

  <select id="findSearchPage" resultMap="cardMapper">
        SELECT *
        from card
                 LEFT JOIN category ON card.cid = category.cid
            ${ew.customSqlSegment}
        ORDER BY card.cardId DESC
    </select>

服务层

//根据搜索条件查询帖子
    public Page<Card> search(String search,int page, int size){
        QueryWrapper<Card> queryWrapper = new QueryWrapper<>();
        if (search != null) {
            queryWrapper.like("title", search).
                    or().like("content", search).
                    or().like("username", search);
        }
        return cardMapper.findSearchPage(new Page<>(page, size), queryWrapper);
    }

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

月木@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值