mybatis中oracle实现分页效果

Posted 滥好人

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mybatis中oracle实现分页效果相关的知识,希望对你有一定的参考价值。

首先当我们需要通过xml格式处理sql语句时,经常会用到< ,<=,>,>=等符号,但是很容易引起xml格式的错误,这样会导致后台将xml字符串转换为xml文档时报错,从而导致程序错误。

  这样的问题在iBatiS中或者自定义的xml处理sql的程序中经常需要我们来处理。其实很简单,我们只需作如下替换即可避免上述的错误:

原符号  <  <=   > >=   &   \'   "
替换符号 &lt; &lt;= &gt; &gt;= &amp; &apos; &quot;

————————————————————————————————————————————————————————————————————————

数据库的数据

一、逻辑分页

接口

package com.dao;


import java.util.List;
import java.util.Map;

import org.apache.ibatis.session.RowBounds;

import com.model.Student;

public interface StudentMapper {
    /**
     * 分页查询
     */
    public List<Student> selectall(RowBounds rb);//需要传RowBounds 类型的参数

}

配置文件

<?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.dao.StudentMapper">
 
    <select id="selectall" resultType="student" >
        select * from student
    </select>
   
 </mapper>

JUnit测试

package com.util;

import static org.junit.Assert.*;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.ibatis.session.RowBounds;
import org.apache.ibatis.session.SqlSession;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import com.dao.StudentMapper;
import com.model.Student;

public class Jtest {
    private SqlSession ss;
    private StudentMapper sm;
    @Before
    public void setUp() throws Exception {
        ss=SqlSessionUtil.getSqlSession();
        sm=ss.getMapper(StudentMapper.class);
        
    }

    @After
    public void tearDown() throws Exception {
        ss.commit();
        ss.close();
    }

    @Test
    public void selectall() {
        
        //跳过几行
        int offset = 3;
        //取几行
        int limit = 3;
        
        RowBounds rb = new RowBounds(offset, limit);        
        List<Student> st=sm.selectall(rb);
        for(Student tt:st){
            System.out.println(tt);
        }
    }

}

数据就取出来了

二、物理分页。

用roacle是数据库自己的分页语句分页

 

 

接口

package com.dao;
import java.util.List;
import java.util.Map;

import org.apache.ibatis.session.RowBounds;

import com.model.Student;

public interface StudentMapper {
    
    /**
     * 分页查询
     */
    public List<Student> selectall(Integer offset, Integer limit );
    
}

配置文件

<?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.dao.StudentMapper">
    
    <select id="selectall" resultType="student">
        select * from (select t.*,rownum rownu from STUDENT t 
        where rownum&lt;=#{param1}*#{param2})tt
        where tt.rownu>(#{param1}-1)*#{param2}
    </select>

 </mapper>

JUnit测试

package com.util;

import static org.junit.Assert.*;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.ibatis.session.RowBounds;
import org.apache.ibatis.session.SqlSession;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import com.dao.StudentMapper;
import com.model.Student;

public class Jtest {
    private SqlSession ss;
    private StudentMapper sm;
    @Before
    public void setUp() throws Exception {
        ss=SqlSessionUtil.getSqlSession();
        sm=ss.getMapper(StudentMapper.class);
        
    }

    @After
    public void tearDown() throws Exception {
        ss.commit();
        ss.close();
    }
   
    @Test
    public void selectall() {
        //当前第几页 
        Integer offset = 2;
        //每页行数
        Integer limit = 3;        
        List<Student> st=sm.selectall(offset, limit);
        for(Student tt:st){
            System.out.println(tt);
        }
    }

}

查询结果

 

以上是关于mybatis中oracle实现分页效果的主要内容,如果未能解决你的问题,请参考以下文章

mybatis + PageHelper 实现分页

Oracle -Mybatis动态SQL查询分页的实现

mybatis oracle 分页+模糊查询

MyBatis分页插件:比PageHelper都要简单,使用很灵活,目前支持Oracle和MySQL

Mybatis实现oracle批量插入及分页查询

在mybatis 采用mapping文件 中的 oracle分页 SQL 配置在一个公用mapping中供后面引入使用