MybatisPlus多表分页查询

数据库

数据库为三张表,user表、role表和user_role表

DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  `password` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
  `create_time` datetime(0) NOT NULL COMMENT '创建时间',
  `update_time` datetime(0) NOT NULL COMMENT '更新时间',
  `deleted` int(1) UNSIGNED ZEROFILL NOT NULL COMMENT '逻辑删除',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
DROP TABLE IF EXISTS `role`;
CREATE TABLE `role`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `role_name` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `role_desc` varchar(60) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `create_time` datetime(0) NOT NULL COMMENT '创建时间',
  `update_time` datetime(0) NOT NULL COMMENT '更新时间',
  `deleted` int(1) NOT NULL COMMENT '逻辑删除',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
DROP TABLE IF EXISTS `user_role`;
CREATE TABLE `user_role`  (
  `user_id` int(11) NOT NULL COMMENT '用户编号',
  `role_id` int(11) NOT NULL COMMENT '角色编号',
  PRIMARY KEY (`user_id`, `role_id`) USING BTREE,
  INDEX `FK_Reference_3`(`role_id`) USING BTREE,
  CONSTRAINT `FK_Reference_1` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT,
  CONSTRAINT `FK_Reference_2` FOREIGN KEY (`role_id`) REFERENCES `role` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

Controller层

@RequestMapping("/view")
//pn是每次传回来的当前页
public String view(Model model,
                   @RequestParam(required = false, defaultValue = "1", value = "pn") Integer pn) {
    IPage<User> page = userService.selectByPage(pn, 5);
    //此处得到的page对象,包含了current(当前页),pages(总页数),total(总记录数),records(记录,就是查询到的List集合)
    model.addAttribute("page", page);
    model.addAttribute("jumpUrl", "/user/view?pn=");
    return "user/list";
}

Service层

IPage<User> selectByPage(int start, int size);

@Override
public IPage<User> selectByPage(int start, int size) {
    Page<User> page = new Page<>(start, size);
    QueryWrapper<User> wrapper = new QueryWrapper<>();
    userMapper.getUserPage(page, wrapper);
    return page;
}

mapper层

IPage<User> getUserPage(IPage<User> page, @Param("ew") QueryWrapper<User> queryWrapper);

<resultMap id="userMap" type="top.alin.bbs.entity.User">
    <id property="id" column="id"/>
    <result property="username" column="username"/>
    <result property="password" column="password"/>
    <result property="createTime" column="create_time"/>
    <collection property="roles" ofType="top.alin.bbs.entity.Role" resultMap="roleMap"/>
</resultMap>

<resultMap id="roleMap" type="top.alin.bbs.entity.Role">
    <id property="id" column="role_id"/>
    <result property="roleName" column="role_name"/>
    <result property="roleDesc" column="role_desc"/>
</resultMap>
<select id="getUserPage" resultMap="userMap">
    SELECT
        u.*,
        r.id,r.role_name,r.role_desc
    FROM
        user u
        left join user_role ur on u.id = ur.user_id
        left join role r on r.id = ur.role_id
        where u.deleted = 0
        ${ew.customSqlSegment}
</select>
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于MyBatis-Plus的多表分页查询,可以按照以下步骤进行操作: 1. 首先,新建一个MybatisPlusConfig配置类文件,该文件用于配置MyBatis-Plus的相关配置。 2. 接下来,创建一个分页类,该类用于封装分页查询的参数,包括页码、每页记录数等信息。 3. 根据业务需要,组装查询构造器。可以使用MyBatis-Plus提供的QueryWrapper类来构建查询条件,根据需要使用不同的查询操作符,如全值匹配、模糊匹配、大于等于、小于等于等。示例中使用了switch语句来判断不同的操作符,并根据操作符调用相应的方法构建查询条件。 4. 编写ServeImpl,该类用于处理业务逻辑,包括调用Mapper接口进行数据库查询操作,并使用分页类来进行分页查询。 5. 最后,编写mapper.xml文件,定义SQL语句,包括多表联合查询的SQL语句,并将查询结果映射到Java对象中。 通过以上步骤,就可以实现MyBatis-Plus的多表分页查询功能。具体的实现过程可以根据实际需求进行调整和扩展。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [MyBatis-Plus多表联合查询并且分页(3表联合)](https://download.csdn.net/download/weixin_38685173/12742340)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [MybatisPlus多表分页查询](https://blog.csdn.net/weixin_37777574/article/details/122973311)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值