Mybatis分页查询

1.1 简介

在开发过程中,分页查询是一个常见的需求。为了简化分页查询的操作,我们可以使用 Mybatis 的分页插件,如 PageHelper

分页插件的概念

分页查询时,通常需要传入页数(page)*和*每页条数(pageSize)。返回的数据包括页面数据总条数总页数当前页面每页条数等。使用分页插件可以快速帮助我们获取这些数据。

分页插件的核心原理

分页查询的核心原理是通过 SQL 语句中的 LIMIT 关键字,根据传入的参数(当前页码、每页显示条数)来控制返回的当前页的内容范围

1.2 步骤

1)添加依赖

<!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper -->
<dependency>
   <groupId>com.github.pagehelper</groupId>
   <artifactId>pagehelper</artifactId>
   <version>5.2.0</version>
</dependency>

2)在MyBatis的核心配置文件( mybatis-config.xml)中配置插件

<plugins>
	<!--设置分页插件-->
	<plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
</plugins>

1.3 分页的应用

1)开启分页功能

在查询功能之前使用 PageHelper.startPage(int pageNum, int pageSize) 开启分页功能,传入当前页码和每页显示的条数:

  • pageNum:当前页的页码

  • pageSize:每页显示的条数

2)打印方法的返回值,查看  

Page<Object> page = PageHelper.startPage(1, 3);
System.out.println(page);

 

3)另外一个API:

PageInfo 这个类型封装的信息更多一些,包括了导航分页的信息。 用于在查询之后

new PageInfo(List list, int navegatePage);
list:  分页查询的返回数据
navegatePage:  用来定义导航分页的页码显示数量

2.1 注解完成增删改查

使用注解开发会比配置文件开发更方便。

  • @Select 查询

  • @Insert 添加

  • @Update 修改

  • @Delete 删除

案例演示

1)Mapper接口里:

package com.sldl.mapper;

import com.sldl.pojo.Student;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import java.util.List;

public interface StudentMapper1 {
    @Select("select * from student ")
    List<Student> findAll();

    @Select("select * from student where id = #{id}")
    Student findById(int id);

    @Insert("insert into student values (null,#{name},#{age},#{gender},#{idcard},#{address})")
    void addStudent(Student s);

    @Update("update student set name=#{name},age=#{age} where id=#{id}")
    void modStudent(Student s);

    @Delete("delete from student where id = #{id}")
    void delStudent(int id);
}

 2)测试:

package com.sldl.test;

import com.sldl.mapper.ComputerMapper;
import com.sldl.mapper.StudentMapper;
import com.sldl.mapper.StudentMapper1;
import com.sldl.pojo.Computer;
import com.sldl.pojo.Student;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

public class MyBatisTest3 {
    SqlSession  sqlSession = null;
    @Before
    public void testBefore() throws IOException {
        String mybatis_config = "mybatis-config.xml";
        InputStream stream = Resources.getResourceAsStream(mybatis_config);
        SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(stream);
        sqlSession = factory.openSession();
    }
    @After
    public void testAfter(){
        sqlSession.close();
    }
    @Test
    public void test1(){
        StudentMapper1 mapper = sqlSession.getMapper(StudentMapper1.class);
        //测试查询方法
        List<Student> all = mapper.findAll();
        for (Student student : all) {
            System.out.println(student);
        }
    }
    @Test
    public void test2(){
        StudentMapper1 mapper = sqlSession.getMapper(StudentMapper1.class);
        //测试查询方法
        Student student = mapper.findById(3);
        System.out.println(student);
    }
    @Test
    public void test3(){
        StudentMapper1 mapper = sqlSession.getMapper(StudentMapper1.class);

        Student s1  = new Student();
        s1.setName("sunny");
        s1.setAge(18);
        s1.setGender("女");
        s1.setIdcard("1234567890");
        s1.setAddress("长春绿园");

        mapper.addStudent(s1);

        sqlSession.commit();
    }
    @Test
    public void test4(){
        StudentMapper1 mapper = sqlSession.getMapper(StudentMapper1.class);
        Student s1  = new Student();
        s1.setId(19);
        s1.setName("sun");
        s1.setAge(28);
        mapper.modStudent(s1);
        sqlSession.commit();
    }
    @Test
    public void test5(){
        StudentMapper1 mapper = sqlSession.getMapper(StudentMapper1.class);
        mapper.delStudent(19);
        sqlSession.commit();
    }
}

使用注解来映射简单语句会使代码显得更加简洁,但对于稍微复杂一点的语句,Java 注解不仅力不从心,还会让本就复杂的 SQL 语句更加混乱不堪。 因此,如果你需要做一些很复杂的操作,最好用 XML 来映射语句。

选择何种方式来配置映射,以及是否应该要统一映射语句定义的形式,完全取决于你和你的团队。 换句话说,永远不要拘泥于一种方式,你可以很轻松地在基于注解和 XML 的语句映射方式间自由移植和切换。

简单来说:

  • 注解用于完成简单功能

  • 配置文件完成复杂功能

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值