1. 在你的Java项目中,确保已经正确配置了MyBatis和Oracle数据库的依赖项。
  2. 创建一个XML配置文件,用于定义MyBatis的映射关系和SQL语句。该文件通常以Mapper结尾,比如UserMapper.xml
  3. 在该XML配置文件中,编写查询语句,同时添加分页参数。
    本例中使用Oracle提供的ROW_NUMBER()函数进行分页:
<select id="getUserList" parameterType="java.util.Map" resultType="User">
  SELECT * FROM (
      SELECT ROW_NUMBER() OVER(ORDER BY id) AS rownum, t.* FROM user_table t
      WHERE ...
  ) WHERE rownum BETWEEN #{startRow} AND #{endRow}
</select>

上面的查询语句将原始查询封装在一个子查询中,该子查询使用ROW_NUMBER()函数获取每行的序号(即第几行),然后把它们作为一个新的列(别名为rownum)返回。最后再根据rownum列进行分页。其中#{startRow}和#{endRow}是MyBatis中占位符的写法,后续Java代码中会替换参数值。

  1. 在Java代码中,定义一个数据访问接口,用于调用MyBatis执行查询。
    接口定义中的@Mapper注解是MyBatis提供的,用于声明这是一个数据访问接口。MyBatis会自动为该接口生成一个实现类,你可以在配置中指定这个实现类的文件名、位置等等,或者使用规约优先原则:令实现类与接口在同一个包下,且名字相同(不包括后缀),即可。
public interface UserMapper {
    List<User> getUserList(Map<String, Object> parameters);
}

这里的getUserList方法就是我们定义的查询接口,它接受一个Map类型的参数,作为分页查询的参数输入,并返回一个List<User>类型的查询结果。

  1. 创建一个Java类,实现该接口,并使用@Mapper注解标注该类。
import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface UserMapperImpl implements UserMapper {
    // 实现getUserList方法
}

在实现类中,你需要编写getUserList方法的具体实现。在这里,你不需要考虑具体的SQL语句和分页参数的传递,只需要调用MyBatis的一些API,让它来为你完成这些工作。代码示例请参考下文第6步。

  1. 在需要执行分页查询的地方,使用该数据访问接口进行查询。
public class UserService {
    @Autowired
    private UserMapper userMapper;

    public List<User> getUserList(int pageNum, int pageSize) {
    	   // 计算分页查询的起始行和终止行
        int startRow = (pageNum - 1) * pageSize + 1;
        int endRow = pageNum * pageSize;

        // 封装分页查询参数
        Map<String, Object> parameters = new HashMap<>();
        parameters.put("startRow", startRow);
        parameters.put("endRow", endRow);

        // 使用数据访问接口执行分页查询
        return userMapper.getUserList(parameters);
    }
}

在实际应用中,我们使用Spring等框架管理Java对象的依赖关系,在需要执行分页查询的地方注入UserMapper实例,并根据不同的用户请求计算好pageNum和pageSize,然后调用getUserList方法进行查询。MyBatis会自动解析SQL语句,将分页参数注入其中,执行查询并返回结果。在数据库中比对性能,Oracle提供的ROW_NUMBER()函数的性能比MySQL中的LIMIT语句要优,在数据量巨大时更为明显。