简介
本文用示例介绍使用MyBatis-Plus进行多表查询的方法,包括静态查询和动态查询。
代码
controller
package com.example.demo.business.blog.controller;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.demo.business.blog.mapper.BlogMapper;
import com.example.demo.business.blog.vo.BlogVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@Api(tags = "自定义SQL")
@RestController
@RequestMapping("/blog")
public class BlogController {
@Autowired
private BlogMapper blogMapper;
@ApiOperation("静态查询")
@GetMapping("staticQuery")
public String staticQuery() {
return blogMapper.findUserNameByBlogId(1L);
}
@ApiOperation("动态查询")
@GetMapping("dynamicQuery")
public IPage<BlogVO> dynamicQuery(Page<BlogVO> page, String nickName, String title) {
QueryWrapper<BlogVO> queryWrapper = new QueryWrapper<>();
queryWrapper.like(StringUtils.hasText(nickName), "t_user.nick_name", nickName);
queryWrapper.like(StringUtils.hasText(title), "t_blog.title", title);
queryWrapper.eq("t_blog.deleted_flag", 0);
queryWrapper.eq("t_user.deleted_flag", 0);
queryWrapper.apply("t_blog.user_id = t_user.id");
return blogMapper.findBlog(page, queryWrapper);
}
@ApiOperation("动态查询(使用join)")
@GetMapping("dynamicQueryByJoin")
public IPage<BlogVO> dynamicQueryByJoin(Page<BlogVO> page, String nickName, String title) {
QueryWrapper<BlogVO> queryWrapper = new QueryWrapper<>();
queryWrapper.like(StringUtils.hasText(nickName), "t_user.nick_name", nickName);
queryWrapper.like(StringUtils.hasText(title), "t_blog.title", title);
queryWrapper.eq("t_blog.deleted_flag", 0);
return blogMapper.findBlogByJoin(page, queryWrapper);
}
}
Mapper
package com.example.demo.business.blog.mapper;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.example.demo.business.blog.entity.Blog;
import com.example.demo.business.blog.vo.BlogVO;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface BlogMapper extends BaseMapper<Blog> {
/**
* 静态查询
*/
@Select("SELECT t_user.user_name " +
" FROM t_blog, t_user " +
" WHERE t_blog.id = #{id} " +
" AND t_blog.user_id = t_user.id")
String findUserNameByBlogId(@Param("id") Long id);
/**
* 动态查询
*/
@Select("SELECT * " +
" FROM t_blog, t_user " +
" ${ew.customSqlSegment} ")
IPage<BlogVO> findBlog(IPage<BlogVO> page, @Param("ew") Wrapper wrapper);
/**
* 动态查询(通过join)
*/
@Select(&#