java 多表分页_基于Mybatis Plus实现多表分页查询的示例代码

本文详细介绍了如何使用 Mybatis Plus 3.0.7 及以上版本进行多表分页查询。重点讲解了在 Dao、xml 和 Service 层的实现方式,包括 QueryWrapper 的使用,以及如何在 SQL 中利用 ${ew.customSqlSegment} 进行自定义 SQL 片段的拼接,实现灵活的多表查询和分页操作。
摘要由CSDN通过智能技术生成

注意:Mybatis Plus 3.0.7 版本才开始用【自定义sql】+【QueryWrapper】,低版本不能使用,还是老实写SQL进行条件拼接

1、源码分析

在Wrapper接口中就有如下方法

/**

* 获取自定义SQL 简化自定义XML复杂情况

* 使用方法:自定义sql + ${ew.customSqlSegment}

* 1.逻辑删除需要自己拼接条件 (之前自定义也同样)

* 2.不支持wrapper中附带实体的情况 (wrapper自带实体会更麻烦)

* 3.用法 ${ew.customSqlSegment} (不需要where标签包裹,切记!)

* 4.ew是wrapper定义别名,可自行替换

*/

public abstract String getCustomSqlSegment();

在AbstractWrapper抽象类中进行了实现

@Override

public String getCustomSqlSegment() {

// MergeSegments 为 返回 合并 SQL 片段

MergeSegments expression = getExpression();

if (Objects.nonNull(expression)) {

NormalSegmentList normal = expression.getNormal();

String sqlSegment = getSqlSegment();

if (StringUtils.isNotEmpty(sqlSegment)) {

if (normal.isEmpty()) {

return sqlSegment;

} else {

return concatWhere(sqlSegment);

}

}

}

return StringUtils.EMPTY;

}

/**

* 拼接`WHERE`至SQL前

*

* @param sql sql

* @return 带 where 的 sql

*/

private String concatWhere(String sql) {

return Constants.WHERE + " " + sql;

}

2、案例讲解

2.1、dao

说明:

1、这里Dao层需要继承BaseMapper,泛型指定为查询实体;

2、@Mapper,这个无过多说明;

3、最重要的是方法形参@Param("ew") QueryWrapper queryWrapper,这里是使用mybatisplus的条件构造器(超链接进官方文档),【2.3、service】中有说明

@Mapper

public interface ReseDao extends BaseMapper {

/**

* 分页查询

* @param page:mybatisPlus 原生分页查询,查询SQL会自动拼接分页

* @param queryWrapper:QueryWrapper条件,注意,这里需要使用 @Param("ew") 指定mybatis参数

* @return

*/

IPage getReseList(IPage page, @Param("ew") QueryWrapper queryWrapper);

}

2.2、xml

说明:

1、查询SQL写完后,不用写【WHERE】,在SQL后面加入【 ${ew.customSqlSegment}】,mybatisPlus会自动将查询添加进行拼接

2、为什么是ew:mybatisPlus 之前有EntityWrapper,在后面版本将EntityWrapper分化为了多个Wrapper,例如查询的时候,就是QueryWrapper,猜测可能之前通过ew引用地方太多,保留了使用ew

SELECT

r.rese_id,

r.rese_no,

w.WORK_Name

FROM

t_s_db_rese r

left join t_s_db_work w

on r.WORK_id = w.WORK_id

${ew.customSqlSegment}

2.3、service

说明:

1、getPage(params, null, false): 方法用来拼接mybatis plus 分页组件(超链接进官方文档)

2、getWrapper(params):方法用来拼接 QueryWrapper 条件构造器(超链接进官方文档),

/**

* 分页查询

* getPage(params, null, false): 方法用来拼接mybatis plus 分页组件的那个类

* getWrapper(params):方法用来拼接 QueryWrapper 条件构造器

*/

@Override

public PageData page(Map params) {

IPage page = reseDao.getReseList(

// 调用 分页组件返回 IPage对象

getPage(params, null, false),

// 调用 条件构造器 返回 Wrapper

getWrapper(params)

);

return getPageData(page, ReseDTO.class);

}

/**

* 查询条件:调用构造器

* @param params 查询条件,如果需要分页,则这个里面有分页参数

* @return

*/

private QueryWrapper getWrapper(Map params) {

QueryWrapper wrapper = new QueryWrapper<>();

/*

eq 等于 = 参数说明:

参数1、params.get("xxx") != null :如果不为null,则将eq添加到wrapper中;为null不添加

参数2、w.WORK_Name,数据中的字段,多表查询指定要指定字段的表前缀

参数3、params.get("xxx"),输入的查询添加

若下面eq( )方法成立,添加在wrapper中,则查询SQL如下:

SELECT r.rese_id, r.rese_no, w.WORK_Name

FROM t_s_db_rese r

left join t_s_db_work w

on r.WORK_id = w.WORK_id

where w.WORK_Name = "查询条件"

*/

wrapper.eq(params.get("xxx") != null, "w.WORK_Name", params.get("xxx"));

return wrapper;

}

/***

* 分页查询

* @param params 查询条件,主要是分页的(页码、显示内容、排序规则)

* @param defaultOrderField 默认排序规则

* @param isAsc 是否排序

* @return

*/

public IPage getPage(Map params, String defaultOrderField, boolean isAsc) {

long curPage = 1L;

long limit = 20L;

if (params.get(Constant.PAGE) != null) {

curPage = Long.parseLong((String) params.get(Constant.PAGE));

}

if (params.get(Constant.LIMIT) != null) {

limit = Long.parseLong((String) params.get(Constant.LIMIT));

}

Page page = new Page(curPage, limit);

if (isAsc) {

page.setAsc(new String[]{defaultOrderField});

} else {

page.setDesc(new String[]{defaultOrderField});

}

return page;

}

到此这篇关于基于Mybatis Plus实现多表分页查询的示例代码的文章就介绍到这了,更多相关Mybatis Plus多表分页查询内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

Spring Boot是一个能够极大简化Spring应用开发的框架,而PageHelper是MyBatis分页插件,而MyBatis Plus则是MyBatis的增强工具包。SpringBoot整合PageHelper和MyBatis Plus可以简化分页操作,示例代码如下: 1.首先,在pom.xml文件中添加PageHelper和MyBatis Plus的依赖: ```xml <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>最新版本号</version> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>最新版本号</version> </dependency> ``` 2.配置MyBatis Plus的分页插件 ```java @Configuration public class MybatisPlusConfig { @Autowired private DataSource dataSource; @Bean public PaginationInterceptor paginationInterceptor() { return new PaginationInterceptor(); } @Bean public SqlSessionFactory sqlSessionFactory() throws Exception { MybatisSqlSessionFactoryBean sqlSessionFactory = new MybatisSqlSessionFactoryBean(); sqlSessionFactory.setDataSource(dataSource); sqlSessionFactory.setPlugins(new Interceptor[]{paginationInterceptor()}); //添加分页插件 return sqlSessionFactory.getObject(); } } ``` 3.使用PageHelper的分页接口进行分页 ```java @Service public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; @Override public Page<User> findUserList(Integer pageNum, Integer pageSize) { PageHelper.startPage(pageNum, pageSize); List<User> userList = userMapper.selectList(null); PageInfo<User> pageInfo = new PageInfo<>(userList); return pageInfo.toPageInfo(); } } ``` 4.使用MyBatis Plus的分页接口进行分页 ```java @Service public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; @Override public IPage<User> findUserList(Integer pageNum, Integer pageSize) { Page<User> page = new Page<>(pageNum, pageSize); return userMapper.selectPage(page, null); } } ``` 以上便是使用Spring Boot整合PageHelper和MyBatis Plus进行分页示例代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值