Mybatis-Plus多表联查分页的实现代码
上⼀节,简单讲述了,这⼀节,简单讲⼀下如何使⽤ MP 实现多表分页。
分析
使⽤的⼯程,依旧是 spring-boot,关于分页,官⽹给出了⼀个单表的,其实多表分页实现原理相同,都是通过 mybatis 的
(做了什么?他会在你的 sql 执⾏之前,为你做⼀些事情,例如分页,我们使⽤了 MP 不⽤关⼼ limit,为我们拼接。我们也不⽤关⼼总条数,获取到我们 sql 后,拼接select count(*) 为我们查询总条数,添加到参数对象中)。
实现
1. 配置
@EnableTransactionManagement
@Configuration
@MapperScan("ber.mapper")
public class MybatisPlusConfig {
/**
* mybatis-plus SQL执⾏效率插件【⽣产环境可以关闭】
*/
@Bean
public PerformanceInterceptor performanceInterceptor() {
return new PerformanceInterceptor();
}
/*
* 分页插件,⾃动识别数据库类型多租户,请参考官⽹【插件扩展】
*/
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
}
2. mapper 接⼝以及 xml
/**
* <p>
* ⽤户表 Mapper 接⼝
* </p>
*
* @author 殷天⽂
* @since 2018-06-01
*/
public interface UserMapper extends BaseMapper<User> {
List<UserListModel> selectUserListPage(Pagination page ,@Param("user") UserListBean user);
}
这⾥要注意的是,这个 Pagination page 是必须要有的,否则 MP ⽆法为你实现分页。
<select id="selectUserListPage" resultType="del.UserListModel">
SELECT
*
FROM
ftms_user u
LEFT JOIN ftms_user_level l ON u.level_id = l.id
WHERE 1=1
<if test="user.nickname != null">
and u.nickname like "%"#{user.nickname}"%"
</if>
</select>
3. service 实现
import ber.beans.admin.UserListBean;
import ity.User;
import ber.mapper.UserMapper;
import del.UserListModel;
import ber.service.UserService;
import batisplus.plugins.Page;
import batisplus.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import ansaction.annotation.Transactional;
/**
* <p>
* ⽤户表服务实现类
* </p>
*
分页查询插件* @author 殷天⽂
* @since 2018-06-01
*/
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
@Transactional(readOnly=true)
@Override
public Page<UserListModel> selectUserListPage(UserListBean user) {
Page<UserListModel> page = new Page<>(Curr(), Nums());// 当前页,总条数构造 page 对象    return page.setRecords(this.baseMapper.selectUserListPage(page, user));
}
}
最后将结果集 set 到 page 对象中,page 对象的 json 结构如下
{
"total": 48,//总记录
"size": 10,//每页显⽰多少条
"current": 1,//当前页
"records": [//结果集数组
{...},
{...},
{...},
...
]
,
"pages": 5 // 总页数
}
以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。