文章目录
- 1. mapper接口
- 2. 映射文件
- 3. 实战分页
1. mapper接口
package com.gblfy.springboot.mybatisplus.mapper;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.gblfy.springboot.mybatisplus.entity.User;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface UserMapper extends BaseMapper<User> {
/**
* 查询所有 有条件会自动拼接在where 后边当条件 单表操作
*
* @param wrapper
* @return
*/
//自定义sql 无分页
List<User> selectAll(@Param(Constants.WRAPPER) Wrapper<User> wrapper);
/**
* 查询所有 有条件会自动拼接在where 后边当条件 单表操作
*
* @param page
* @param wrapper
* @return
*/
//自定义sql 分页
IPage<User> selectUserPage(Page<User> page, @Param(Constants.WRAPPER) Wrapper<User> wrapper);
/**
* 源码分析:
* 根据 entity 条件,查询全部记录(并翻页)
*
* @param page 分页查询条件(可以为 RowBounds.DEFAULT)
* @param queryWrapper 实体对象封装操作类(可以为 null)
*/
// <E extends IPage<T>> E selectPage(E page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
}
2. 映射文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.gblfy.springboot.mybatisplus.mapper.UserMapper">
<select id="selectAll" resultType="com.gblfy.springboot.mybatisplus.entity.User">
select * from user ${ew.customSqlSegment}
</select>
<select id="selectUserPage" resultType="com.gblfy.springboot.mybatisplus.entity.User">
select * from user ${ew.customSqlSegment}
</select>
</mapper>
3. 实战分页
package com.gblfy.springboot.mybatisplus.mapper;
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.gblfy.springboot.mybatisplus.entity.User;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import java.util.List;
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
@Slf4j
public class UserSelectPageTest {
@Autowired
private UserMapper userMapper;
/**
* myabtis 实现的分页为什么还要分页插件?
* <p>
* 1.mybatis实现得分页时逻辑分页或者叫做内存分页不是物理分页
* 2.他是把符合条件的数据全部查询出来放到内存中,然后返回你需要的那部分
* 3.表中数据不多时,可以使用,速度慢一些;当数据量大时,建议使用物理分页
*/
@Test
public void selectPage() {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.ge("age", 26);
//总页数+总记录数
Page<User> page = new Page<>(1, 2);
IPage<User> iPage = userMapper.selectPage(page, queryWrapper);
System.out.println("总页数:" + iPage.getPages());
System.out.println("总记录数:" + iPage.getTotal());
}
//--------------------------------自定义分页-----------------------------------
/**
* 其实就是按照MybatisPlus定义好的分页模板,把咱们的实体放进去
*/
@Test
public void selectMyPage() {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.ge("age", 26);
//总页数+总记录数
Page<User> page = new Page<>(1, 2);
//调用自定义sql
IPage<User> iPage = userMapper.selectUserPage(page, queryWrapper);
System.out.println("总页数:" + iPage.getPages());
System.out.println("总记录数:" + iPage.getTotal());
List<User> userList = iPage.getRecords();
userList.forEach(System.out::println);
}
/**
* 源码分析:
* 根据 entity 条件,查询全部记录(并翻页)
*
* @param page 分页查询条件(可以为 RowBounds.DEFAULT)
* @param queryWrapper 实体对象封装操作类(可以为 null)
*/
// <E extends IPage<T>> E selectPage(E page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
// 多表操作
/**
* 多表操作:
* 原则:
* 把多表操作的内容放到xml映射的sql中
*
* 1.在xml文件中书写多表操作的sql语句
* 2.在mapper接口中,定义接口
* 3.客户端(controller)调用即可
*/
}