1、内存分页(使用RowBounds对象进行分页)
Mybatis使用RowBounds对象进行分页,它是针对ResultSet结果集执行的内存分页,而非物理分页。
注:沿用上一章中的配置文件和数据库
import com.fan.entity.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.RowBounds;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.Reader;
import java.util.List;
public class Test2 {
public static void main(String[] args) {
Reader resourceAsReader = null;
SqlSession sqlSession=null;
try {
resourceAsReader = Resources.getResourceAsReader("mybatis-config.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsReader);
sqlSession = sqlSessionFactory.openSession();
//内存分页:实现原理是将数据全部提取到内存中,对内存中的数据进行分页
List<User> userList = sqlSession.selectList("com.fan.dao.UserDao.findAllUser", null,new RowBounds(0, 4));
for (User user:userList) {
System.out.println(user.getName());
}
} catch (IOException e) {
e.printStackTrace();
}finally {
if(sqlSession!=null){
sqlSession.close();
}
}
}
}
测试结果如下图所示
测试结果2、物理分页(使用分页插件)
分页插件的基本原理是使用Mybatis提供的插件接口,实现自定义插件,在插件的拦截方法内拦截待执行的sql,然后重写sql,根据dialect方言,添加对应的物理分页语句和物理分页参数。
2.1、导入jar 包( 分页插件:pagehelper.jar )
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.1.6</version>
</dependency>
2.2、在MyBatis 的总体文件中配置插件( 放到<environments default="development">之前 )
<plugins>
<!-- PageHelper4.1.6 -->
<plugin interceptor="com.github.pagehelper.PageHelper">
<property name="dialect" value="mysql"/>
</plugin>
</plugins>
interceptor 拦截器
dialect 方言
注意:插件5.1以后interceptor不同,并且不需要指定数据库名字(我的jar包使用的是5.1以后的,所以配置文件选这个)
<plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor">
</plugin>
</plugins>
2.3、测试类(//PageHelper.startPage(当前页,每页条数) )
import com.fan.dao.UserDao;
import com.fan.entity.User;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
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 java.io.IOException;
import java.io.Reader;
import java.util.List;
public class Test3 {
public static void main(String[] args) throws IOException {
//分页查询(注意事项:设置分页的值一定要在查询之前)
//1.在工具类中指定页码值和显示条数
PageHelper.startPage(1,5);
//2.调取查询的方法,得到结果集
Reader resourceAsReader = Resources.getResourceAsReader("mybatis-config.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsReader);
SqlSession sqlSession = sqlSessionFactory.openSession();
UserDao userDaoMapper = sqlSession.getMapper(UserDao.class);
List<User> list=userDaoMapper.findAllUser();
//3.将list集合封装到PageInfo对象中
PageInfo pageInfo=new PageInfo(list);
List<User> list2= pageInfo.getList();
//4.得到结果
for (User user1 :list2) {
System.out.println(user1.getName());
}
System.out.println("每页显示条数:"+pageInfo.getPageSize());
System.out.println("当前页的条数:"+pageInfo.getSize());
System.out.println("总条数:"+pageInfo.getTotal());
System.out.println("总页数:"+pageInfo.getPages());
System.out.println("上一页:"+pageInfo.getPrePage());
System.out.println("下一页:"+pageInfo.getNextPage());
System.out.println("当前页:"+pageInfo.getPageNum());
}
}
网友评论