栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

mybatis plus实现多表分页条件查询

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

mybatis plus实现多表分页条件查询

文章目录
  • 前言
  • 一、
  • 二、如何实现
    • 1 配置mybatis plus分页插件
    • 2.准备三张表
      • 2.1 学生表
      • 2.2 老师表
      • 2.3 老师和学生Vo表
    • 3. 编写SQL语句
    • 4. 编写mapper层
    • 5. service层
    • 6.controller层
    • 演示效果
  • 【补充】 XML 自定义分页
  • 总结


前言

没啥可说的

一、

没啥可说的

二、如何实现 1 配置mybatis plus分页插件
@Configuration
@MapperScan("com.breez.vote.mapper")
public class MybatispluConfig {
    
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return interceptor;
    }
}
2.准备三张表 2.1 学生表
@Data
@TableName("student")
public class Student implements Serializable {
    private Integer id;
    private String studentName;
    private Integer studentAge;
}
2.2 老师表
@Data
@TableName("teacher")
public class Teacher implements Serializable {
    private Integer id;
    private String teacherName;
    private Integer teacherAge;
}

2.3 老师和学生Vo表

这张表的数据来自老师和学生,用来保存来自多张表的数据。

@Data
public class QueryVo implements Serializable {
    
    private String studentName;
    
    private Integer studentAge;
    
    private String teacherName;
    
    private Integer teacherAge;
}
3. 编写SQL语句

这里需要注意:写完SQL语句后,需要在结尾加上${ew.customSqlSegment},查询参数,由mybatis plus自动拼装。



        


    
        select * from student,teacher  ${ew.customSqlSegment}
    
    

4. 编写mapper层
public interface StudentMapper extends baseMapper {
    
    IPage findByPage(IPage page, @Param(Constants.WRAPPER) QueryWrapper wrapper);
}
5. service层
public interface StudentService extends IService {
    
    public IPage findByPage(Page page, QueryWrapper queryWrapper);

}
@Service
public class StudentServiceImpl extends ServiceImpl implements StudentService {

    @Resource
    private StudentMapper queryMapper;

    
    @Override
    public IPage findByPage(Page page, QueryWrapper queryWrapper) {
        return queryMapper.findByPage(page, queryWrapper);
    }
}
6.controller层
@RestController
@RequestMapping("data")
public class StudentController {
    @Autowired
    private StudentService studentService;

    @GetMapping("query")
    public Object query() {
        Page page = new Page<>(1, 2);
        IPage queryVoPage = studentService.findByPage(page, new QueryWrapper<>());
        return queryVoPage;
    }
}
演示效果

✏️学生表【4条数据】


✏️ 老师表【3条数据】

这里出现这个结果原因(出现了12条数据【3*4=12】)是我没有在SQL语句中写多表查询条件,出现了笛卡尔积,加上多表查询条件后就不会出现相同的了(李刚)。

【补充】 XML 自定义分页
  • UserMapper.java 方法内容
public interface UserMapper {//可以继承或者不继承baseMapper
    
    IPage selectPageVo(Page page, Integer state);
}
  • UserMapper.xml 等同于编写一个普通 list 查询,mybatis-plus 自动替你分页

  • UserServiceImpl.java 调用分页方法
public IPage selectUserPage(Page page, Integer state) {
    // 不进行 count sql 优化,解决 MP 无法自动优化 SQL 问题,这时候你需要自己查询 count 部分
    // page.setOptimizeCountSql(false);
    // 当 total 为小于 0 或者设置 setSearchCount(false) 分页插件不会进行 count 查询
    // 要点!! 分页返回的对象与传入的对象是同一个
    return userMapper.selectPageVo(page, state);
}
总结


一个字: 巴适

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/297444.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号