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

mybatis-plus的基础入门(二)之分页查询

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

mybatis-plus的基础入门(二)之分页查询

3.4.0之前的版本

pom.xml文件

   
            com.baomidou
            mybatis-plus-boot-starter
            3.3.1.tmp
        

    

        
            com.github.pagehelper
            pagehelper
            5.1.11
        

配置文件

import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;


@Configuration
public class MyBatisConfig {

    
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
     // 设置请求的页面大于最大页后操作, true调回到首页,false 继续请求  默认false
     // paginationInterceptor.setOverflow(false);
     // 设置最大单页限制数量,默认 500 条,-1 不受限制
     // paginationInterceptor.setLimit(500);
     // 开启 count 的 join 优化,只针对部分 left join
     // paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true));
        return paginationInterceptor;
    }

}

使用

        controller层

    //分页
     @PostMapping("page")
    public R page(@RequestBody(required = false) UserVo userVo){
        //当前页
    	//int page = query.getCurrent() == null ? 1 : query.getCurrent();
		//每页的页数
        //int pageSize = query.getSize() == null ? 10 : query.getSize();
        //创建一个分页对象  一般post 都是使用一个类文件接受相对应的参数
        Page objectPage = new Page<>(userVo.getPage(),userVo.getSize());
        //构造查询条件
        QueryWrapper objectQueryWrapper = new QueryWrapper<>();
        //条件查询
        //名称
        String name = userVo.getUserName();
        //开始名称
        String startTime = userVo.getStartTime();
        //结束名称        
        String endTime = userVo.getEndTime();
        //部门
        String deptName =userVo.getDeptName();
        //判断是否为空不为空则拼接
        if (!StringUtils.isEmpty(deptName )){
            //根据部门名查询部门名称
            Dept one = deptService.findOneByName(deptName);
            //实体类不为空则把部门id传进去为空传null            
            if (one!=null){
                //前面数据库字段后面传递的参数
                objectQueryWrapper.eq("dept_id", one.getId());
            }else {
                objectQueryWrapper.eq("dept_id", null);
            }
        }


        if (!StringUtils.isEmpty(name)){
                objectQueryWrapper.eq("real_name", name);
           
        }


    
        if(!StringUtils.isEmpty(startTime)){
                   objectQueryWrapper.apply("UNIX_TIMESTAMP(time)>=UNIX_TIMESTAMP('" + startTime + "')");
        }
   
        if(!StringUtils.isEmpty(endTime)){
                      objectQueryWrapper.apply("UNIX_TIMESTAMP(time)<=UNIX_TIMESTAMP('" + endTime + "')");
        }

        //调用方法 使用分页
        Page page = UserService.page(objectPage, objectQueryWrapper);
        page.getRecords().forEach(tGridPunchRecordEntity -> {
               tGridPunchRecordEntity.setName(tsUserService.findById(tGridPunchRecordEntity.getUserId()).getRealName());
                }
        );

        long total = objectPage.getTotal();  //总记录数

      //  List records = objectPage.getRecords(); //集合

        List records = page.getRecords();

        return R.okPage(records,total);
    }

service需要继承IService<实体类>

public interface UserService  extends IService {



}
条件构造器

QueryWrapper查询
QueryWrapper<实体类> queryWrapper = new QueryWrapper<>();
List ids= new ArrayList<>();
queryWrapper.in("id",ids); // 可入参数组查询
queryWrapper.and(wrapper->wrapper.eq("数字库字段",入参数据));   //可进行嵌套子查询
时间段查询
// 查询开始时间
String startTime = "2022-04-19"; //yyyy-MM-dd HH:mm:ss
queryWrapper.apply("UNIX_TIMESTAMP(start_time)>=UNIX_TIMESTAMP('" + startTime + "')");
//queryWrapper.ge("start_time",startTime);

// 结束时间
String endTime = "2022-04-20"; //yyyy-MM-dd HH:mm:ss
queryWrapper.apply("UNIX_TIMESTAMP(end_time)<=UNIX_TIMESTAMP('" + endTime + "')");
//queryWrapper.le("end_time",endTime);

// 备注:存入数据库的时间格式,和查询时间格式必须统一
condition(动态组装查询条件)

查询名字中包含n,年龄大于10且小于20的用户,查询条件来源于用户输入,是可选的

@Test
public void test1() {
    
    //定义查询条件,有可能为null(用户未输入)
    String name = null;
    Integer ageBegin = 10;
    Integer ageEnd = 20;

    QueryWrapper queryWrapper = new QueryWrapper<>();
    if(StringUtils.isNotBlank(name)){
        queryWrapper.like("name","n");
    }
    if(ageBegin != null){
        queryWrapper.ge("age", ageBegin);
    }
    if(ageEnd != null){
        queryWrapper.le("age", ageEnd);
    }

    List users = userMapper.selectList(queryWrapper);
    users.forEach(System.out::println);
}

使用带condition参数的重载方法构建查询条件,简化代码的编写

@Test
public void test1Condition() {

    //定义查询条件,有可能为null(用户未输入)
    String name = null;
    Integer ageBegin = 10;
    Integer ageEnd = 20;

    QueryWrapper queryWrapper = new QueryWrapper<>();
    queryWrapper
        .like(StringUtils.isNotBlank(name), "name", "n")
        .ge(ageBegin != null, "age", ageBegin)
        .le(ageEnd != null, "age", ageEnd);

    List users = userMapper.selectList(queryWrapper);
    users.forEach(System.out::println);
}
LambdaQueryWrapper
@Test
public void test2() {

    //定义查询条件,有可能为null(用户未输入)
    String name = null;
    Integer ageBegin = 10;
    Integer ageEnd = 20;

    LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
    queryWrapper
        //避免使用字符串表示字段,防止运行时错误
        //User 是用户实体类
        .like(StringUtils.isNotBlank(name), User::getName, "n")
        .ge(ageBegin != null, User::getAge, ageBegin)
        .le(ageEnd != null, User::getAge, ageEnd);

    List users = userMapper.selectList(queryWrapper);
    users.forEach(System.out::println);
}
插件 mybatisplus分页查询 配置类
@Configuration
@MapperScan("com.lyh.mybatisplus.mapper")
public class MybatisPlusConfig {

    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return interceptor;
    }

}
Controller层
@GetMapping("/list")
@ApiOperation(value = "按条件分页查询")
public R list(@ApiParam(value = "当前页码", required = true) Long current,
       @ApiParam(value = "每页记录数", required = true) Long size,
       @ApiParam("查询对象条件") XXXVO xxxVO) {

    //分页参数
    Page page = new Page<>(current, size);
    //调用service层查询
    IPage<实体类> pageMode = knowledgeDataService.selectPage(page, xxxVO);
    //分页查询 获取返回数据
    List<实体类> dataList = pageMode.getRecords();
    //获取查询数据总记录数
    long total = pageMode.getTotal();

    HashMap map = new HashMap<>();
    map.put("total", total);
    map.put("data", dataList);

    return R.data(map);
}
service层
public IPage<实体类> selectPage(Page<实体类> page, XXXVO xxxVO) {
    QueryWrapper<实体类> queryWrapper = new QueryWrapper<>();
    //中间判断 加查询条件
    Page<实体类> selectPage = baseMapper.selectPage(page, queryWrapper);
    return selectPage;
}

自定义的 mapper#method 使用分页
UserMapper.java中定义接口方法

    
    IPage selectPageByPage(Page page, Integer age);

自定义UserMapper.java.xml