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 的语句映射方式间自由移植和切换。
简单来说:
-
注解用于完成简单功能
-
配置文件完成复杂功能