首页 > 其他分享 >Mybatis-plus做分页和联表查询

Mybatis-plus做分页和联表查询

时间:2023-05-28 22:35:53浏览次数:34  
标签:private page video 联表 import Mybatis plus type id

示例

首先先从代码上看一下我在框架中是如何使用的分页:

注: AboutusHomepage是实体类

 

1.Controller

    @RequestMapping
    public String index(@RequestParam(value = "pageNo", required = false, defaultValue = "1") Integer pageNo,
                        @RequestParam(value = "pageSize", required = false, defaultValue = "20") Integer pageSize,
                        Model model, String updatetimeSpace, AboutusHomepage aboutusHomepage) {
        Page<AboutusHomepage> page = new Page<>(pageNo, pageSize);
 
        //用QueryWrapper做条件查询
        QueryWrapper<AboutusHomepage> queryWrapper = new QueryWrapper<>();
        if(!ObjectUtils.isEmpty(aboutusHomepage.getTitle())) {
            queryWrapper = queryWrapper.like("title",aboutusHomepage.getTitle());
         }
        if(!ObjectUtils.isEmpty(aboutusHomepage.getBackgroundPicture())) {
            queryWrapper = queryWrapper.like("background_picture",aboutusHomepage.getBackgroundPicture());
         }
        //使用MybatisPlus自带的page方法做有条件的分页查询
        IPage<AboutusHomepage> pageInfo = aboutusHomepageService.page(page, queryWrapper);
        model.addAttribute("updatetimeSpace", updatetimeSpace);
        model.addAttribute("searchInfo", aboutusHomepage);
        model.addAttribute("pageInfo", new PageInfo(pageInfo));
        return prefix+"list";
    }

Controller层接收pageNo(页码)和pageSize(页面显示数量),创建Page(com.baomidou.mybatisplus.extension.plugins.pagination.Page)对象,入参分别为pageNo和pageSize.

 

2.Service   继承自mybatisPlus自带的IService类.

public interface IAboutusHomepageService extends IService<AboutusHomepage> {
 
}

3.SerivceImpl   继承自MybatisPlus提供的ServiceImpl.

@Service
public class AboutusHomepageServiceImpl extends ServiceImpl<AboutusHomepageMapper, AboutusHomepage> implements IAboutusHomepageService {
}

4. Dao层   继承自mybatisPlus自带的BaseMapper类. 

public interface AboutusHomepageMapper extends BaseMapper<AboutusHomepage> {
 
}

 

分页查询的几种方式

1.通过MybatisPlus中IService自带的方法做查询

IService中的page方法,有两个重载,分别是page(IPage)和page(IPage, Wrapper).其中,page(IPage)调用的是page(Ipage, Wrappers.emptyWrapper().

 

2.自己定义新的查询方法

ServiceImpl中:

 Mapper中创建newPage方法:

 通过入参中包含一个IPage对象完成分页查询(不需要自己去写分页语句).不过需要注意的是,返回值是一个List对象,所以在ServicecImpl中要通过调用IPage的setRecords方法,将查询结果放入IPage对象中.

 

 

联表查询

MyBatisPlus的联表查询也非常方便,下面我会以一个视频表(t_video)为例,表的结构如下:

 其中用户id是用户表的主键,type_id是视频类型表的主键。那么这种情况下,单表查询出来的结果是两个id,显然不是我们想要的结果。所以用查询工具创建出来联表的Sql语句如下:

 

SELECT
dict_video_type.`name` AS video_type,
t_video.id,
sys_user.nickname,
t_video.video_path,
t_video.user_id,
t_video.type_id,
t_video.create_time,
t_video.update_time,
t_video.`status`,
t_video.description
FROM
t_video
INNER JOIN sys_user ON sys_user.id = t_video.user_id
INNER JOIN dict_video_type ON t_video.type_id = dict_video_type.id

注意,对于dict_video_type(视频类型)表中的name我用了as,等到了后面就知道为啥了。

接下里是实体类,可以用VO实体或者直接在原有的实体上加属性,以下是我在实体类(Video.java)上直接添加了视频表中不存在的属性:

 
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.mbyte.easy.common.entity.BaseEntity;
import java.time.LocalDateTime;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
 
/**
 * <p>
 * 视频表
 * </p>
 *
 * @author 申劭明
 * @since 2020-05-06
 */
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
@TableName("t_video")
public class Video extends BaseEntity {
 
    private static final long serialVersionUID = 1L;
 
    /**
     * 上传用户的id
     */
    private Long userId;
 
    /**
     * 用户昵称
     */
    // 不太懂的可以看看TableField注解,源码里写的明明白白
    @TableField(exist = false)
    private String nickname;
 
    /**
     * 视频类型id
     */
    private Long typeId;
 
    /**
     * 视频类型
     * 因为在类中用的是这个名字,所以我在sql语句里用了as
     */
    @TableField(exist = false)
    private String videoType;
 
    /**
     * 上传视频路径
     */
    private String videoPath;
 
    /**
     * 创建时间
     */
    private LocalDateTime createTime;
 
    /**
     * 更新时间
     */
    private LocalDateTime updateTime;
 
    /**
     * 是否过审(0为未过审,1为过审,2为违规)
     */
    private Integer status;
 
    /**
     * 视频描述
     */
    private String description;
 
    /**
     * 点击量
     */
    private Long pointCount;
 
 
}

最后是mapper和mapper.xml:

import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.mbyte.easy.video.entity.Video;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
 
import java.util.List;
 
/**
 * <p>
 * 视频表 Mapper 接口
 * </p>
 *
 * @author 申劭明
 * @since 2020-05-06
 */
public interface VideoMapper extends BaseMapper<Video> {
 
 
    List<Video> page(@Param("page") IPage<Video> page, 
                     @Param(Constants.WRAPPER) Wrapper<Video> queryWrapper);
}
<select id="page" resultType="com.mbyte.easy.video.entity.Video">
    SELECT
    dict_video_type.`name` as video_type,
    t_video.id,
    sys_user.nickname,
    t_video.video_path,
    t_video.user_id,
    t_video.type_id,
    t_video.create_time,
    t_video.update_time,
    t_video.`status`,
    t_video.description
    FROM
    t_video
    INNER JOIN sys_user ON sys_user.id = t_video.user_id
    INNER JOIN dict_video_type ON t_video.type_id = dict_video_type.id
    <!-- 省略条件sql语句 -->
    ${ew.customSqlSegment}
 </select>

 

其中省略条件sql语句一行如果看不明白的话,可以看我的另一篇博客,教你怎么省略条件查询语句:https://blog.csdn.net/shenshaoming/article/details/101099246。

 

 

转: https://blog.csdn.net/shenshaoming/article/details/104342373

 

标签:private,page,video,联表,import,Mybatis,plus,type,id
From: https://www.cnblogs.com/fps2tao/p/17438999.html

相关文章

  • mybatis 动态查询
    可以不用where标签然后拼一个1=1   when至少有一个分支会执行    批量删除   批量插入   多表联查   里面有集合的时候oftype  分页    ......
  • mybatis 查询 map 多参数
         返回map 返回一个大map 主键id作为keyvalue本身作为map  ......
  • Java学习:使用MyBatis Plus的分页插件和QueryWrapper结合自定义mapper xml实现多表关联
     Vo:/***用来返回给前端展示列表的数据实体*/@DatapublicclassCourseVoimplementsSerializable{privatestaticfinallongserialVersionUID=1L;privateStringid;privateStringtitle;privateStringsubjectParentTitle;private......
  • springboot整合mybatis实现简单的crud操作
    使用MyBatis框架操作数据,在SpringBoot框架集成MyBatis,项目整体结构前提:准备一张student表。SETNAMESutf8mb4;SETFOREIGN_KEY_CHECKS=0;--------------------------------Tablestructureforuser------------------------------DROPTABLEIFEXISTS`student`......
  • Mybatis-plus中自定义的sql语句调用QueryWrapper实现查询
     一、引言MP自带的条件构造器虽然很强大,有时候也避免不了写稍微复杂一点业务的sql,那么今天说说MP怎么自定义sql语句吧。 二、具体实现使用注解实现:在我们Mapper接口中定义自定义方法即可。/***@Date:2019/6/1014:40*@Description</span>:User对象持久层*/p......
  • 【cpluscplus教程翻译】函数(Functions)
    使用函数,可以独立完成代码任务在c++中,函数是指有名字的语句组,可以被程序的其他点调用最常见的定义函数语法为(也可以使用lambda表达式和重载调用操作符)typename(parameter1,parameter2,...){statements}type是返回值类型,name是函数名,parameter是参数,statements是函数体......
  • mybatis plus 校验用户名是否重复
    添加//判断登录名的唯一性QueryWrapper<User>query=newQueryWrapper<>();query.lambda().eq(User::getLoginName,user.getLoginName());Userone=userService.getOne(query);if(one!=null&&one.getUserId()!=user.getUserId()){returnResult......
  • Java:mybatis-plus-generator-ui 基于Mybatis-Plus的代码自助生成器
    引用官方文档上的简介:提供交互式的WebUI用于生成兼容mybatis-plus框架的相关功能代码,包括Entity,Mapper,Mapper.xml,Service,Controller等,可以自定义模板以及各类输出参数,也可通过SQL查询语句直接生成代码。文档github:https://github.com/davidfantasy/mybatis-plus-generator-......
  • MyBatis之返回值处理
    MyBatis之返回值处理1、返回值为基本数据类型当我们的SQL语句执行结束,要返回的类型为基本数据类型的时候,直接写你要返回的类型即可<insertid="addUser"parameterType="com.liu.pojo.User">insertintotb_uservalues(null,#{username},#{password});</insert>......
  • Mybatis框架
    1、什么是框架?它是我们软件开发中的一套解决方案,不同的框架解决不同的问题。使用框架的好处:框架封装了很多细节,使开发者可以使用极简的方式实现功能,大大提高开发效率。2、三层架构:表现层:用于展示数据业务层:处理业务需求持久层:与数据库交互的3、持久层......