7.1 简介
目的是为了减少数据的访问量 ,减轻数据库的压力。
7.2 limit分页
7.2.1 语法
select * from 表名 startIndex,pageSize;
select * from 表名 pageSize;
提示: 如果使用时,表名之后只给定了一个pageSize参数,那么默认的语句是 select * from 表名 0,pagesize 。
7.2.2 使用
UserMapper:
package com.yun.dao;
import com.yun.pojo.User;
import java.util.List;
import java.util.Map;
public interface UserMapper {
//分页查询
List<User> getUserLimit(Map<String,Integer> map);
}
提示: 传递参数不一定要用map,也可以直接传递两个int过去。
UserMapper.xml:
<?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.yun.dao.UserMapper" >
<resultMap id="userResultMap" type="user">
<result column="gender" property="sex"/>
</resultMap>
<select id="getUserLimit" parameterType="Map" resultMap="userResultMap">
select * from user limit #{startIndex},#{pageSize}
</select>
</mapper>
提示: 上述的 resultMap 是做了数据库与实体类之间的映射。
测试分页接口:
package com.yun.dao;
import com.yun.pojo.User;
import com.yun.utils.MyBatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class UserMapperTest {
@Test
public void userResultMapTest(){
SqlSession sqlSession = MyBatisUtils.getSqlSession();
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
Map<String,Integer> map = new HashMap<>();
map.put("startIndex",0);
map.put("pageSize",2);
List<User> userList = userMapper.getUserLimit(map);
for (User user : userList) {
System.out.println(user);
}
sqlSession.close();
}
}
7.3 RowBounds
7.3.1 简介
前些年,有人钟爱于用java实现MYSQL语句,因此,我们可以使用RowBounds来实现分页。
7.3.2 代码
UserMapper:
package com.yun.dao;
import com.yun.pojo.User;
import java.util.List;
import java.util.Map;
public interface UserMapper {
//RowBounds分页
List<User> getUserListByRowBounds();
}
提示: 不需要传递参数。
UserMapper.xml:
<?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.yun.dao.UserMapper" >
<select id="getUserListByRowBounds" resultMap="userResultMap">
select * from user
</select>
</mapper>
测试分页接口:
package com.yun.dao;
import com.yun.pojo.User;
import com.yun.utils.MyBatisUtils;
import org.apache.ibatis.session.RowBounds;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class UserMapperTest {
@Test
public void getUserListByRowBoundsTest(){
SqlSession sqlSession = MyBatisUtils.getSqlSession();
RowBounds rowBounds = new RowBounds(3,2);
List<User> userList = sqlSession.selectList("com.yun.dao.UserMapper.getUserListByRowBounds",null,rowBounds);
for (User user : userList) {
System.out.println(user);
}
sqlSession.close();
}
}
提示: RowBounds构造器需要传递的参数,跟limit的参数一模一样: new RowBounds(startIndex,pageSize) 。并且,selectList的第一个参数是绑定的方法,第二个参数未知,第三个则是RowBounds对象。selectList获取接口服务的方式,已经淘汰了。
当然,MyBatis有第三方插件,专注于分页:[点击这里](