美文网首页
给sql语句添加分页(oracle)

给sql语句添加分页(oracle)

作者: Yluozi | 来源:发表于2023-04-19 16:32 被阅读0次

方法一:sql直接拼接

server

Map page = new HashMap();
page.put("ROWNUM",Integer.parseInt(request.getPage())*Integer.parseInt(request.getLimit()));
page.put("RN",Integer.parseInt(request.getPage())-1);
List<QueryEntity> orderList = dao.getQuery(page,param);

Dao

List<QueryEntity>getQuery(Map page, Map param);

mapper

<select id="getQuery" resultType="com.xxx.entity.QueryEntity" parameterType="java.util.Map">
SELECT *
        FROM (SELECT TMP.*, ROWNUM ROW_ID
              FROM (
                select
                    t.ID as ID,
                    t.NAME as NAME
                from stable t
                    where 1 = 1
                  and to_char(time, 'yyyy-mm-dd')   <![CDATA[<=]]> to_char(to_date(#{param.endtime}, 'yyyy-mm-dd'),'yyyy-mm-dd')
                  and to_char(time, 'yyyy-mm-dd') >= to_char(to_date(#{param.starttime}, 'yyyy-mm-dd'),'yyyy-mm-dd')
                order by time desc
        ) TMP
        WHERE ROWNUM <![CDATA[<=]]> #{page.ROWNUM})
        WHERE ROW_ID > #{page.RN}
</select>

注意上面的sql中,select 的字段要重新定义参数,不然sql报错

方法二:使用mybatis-plus的iPage封装sql

Service


//import com.baomidou.mybatisplus.core.metadata.IPage;
//import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
            Page<QueryEntity> page = new Page<>(Integer.parseInt(request.getPage()),Integer.parseInt(request.getLimit()));
            IPage iPage =  dao.getQuery(page,param);
            List<QueryEntity> list = iPage.getRecords();

Dao

//import org.apache.ibatis.annotations.Mapper;
//import org.apache.ibatis.annotations.Param;
//import com.baomidou.mybatisplus.core.mapper.BaseMapper;
//import com.baomidou.mybatisplus.core.metadata.IPage;
//import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
//@Mapper
//public interface ResourceDao extends BaseMapper<RequestEntity> {
    IPage<Map<String,Object>> getQuery(Page<QueryEntity> page, @Param("param") Map param);

mapper

<select id="getQuery" resultType="com.xxx.entity.QueryEntity" parameterType="java.util.Map">
        select
            t.ID as ID,
            t.NAME as NAME
        from stable t
        where 1 = 1
          and to_char(TIME, 'yyyy-mm-dd')   <![CDATA[<=]]> to_char(to_date(#{param.endtime}, 'yyyy-mm-dd'),'yyyy-mm-dd')
          and to_char(TIME, 'yyyy-mm-dd') >= to_char(to_date(#{param.starttime}, 'yyyy-mm-dd'),'yyyy-mm-dd')
        order by TIME desc

    </select>

注意实体对象与表结构字段一一对应,会报错,注意参数格式

方法三:使用mybatis-plus的 QueryWrapper 直接拼接

Contoller

//import com.xxx.common.utils.PageUtils;  自定义封装的page工具类
    @RequestMapping("/list")
    public R list(@RequestParam Map<String, Object> params){
        try{
            PageUtils page = thService.queryPage(params);
            logger.info("${comments}:  成功");
            return R.ok().put("page", page);
        }catch (Exception e){
            logger.error("${comments}: 失败:",e);
            return R.error();
        }
    }

Service

//import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
//import com.baomidou.mybatisplus.core.metadata.IPage;
//import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
//import com.xxx.common.utils.Query; 自定义封装的Query工具类
//mport com.xxx.common.utils.PageUtils; 自定义封装的Query工具类
    @Override
    public PageUtils queryPage(Map<String, Object> params) {
        IPage<thEntity> page = this.page(
                new Query<thEntity>().getPage(params),
                new QueryWrapper<thEntity>()
                  .eq(  "STATE","0")
                  .apply(  params.containsKey("createTimeStart")," CREATE_TIME  BETWEEN  to_date('"+params.get("createTimeStart")+"', 'yyyy-mm-dd') AND to_date('"+params.get("createTimeEnd")+"', 'yyyy-mm-dd')")
                      .orderByDesc("CREATE_TIME")
        );
        return new PageUtils(page);
    }

params内封装了分页参数(PAGE,LIMIT),自定义封装工具完成进一步的调用

相关pom依赖

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>${mybatisplus.version}</version>
            <exclusions>
                <exclusion>
                    <groupId>com.baomidou</groupId>
                    <artifactId>mybatis-plus-generator</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus</artifactId>
            <version>${mybatisplus.version}</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql.version}</version>
        </dependency>
        <!--oracle驱动-->
        <dependency>
            <groupId>com.oracle</groupId>
            <artifactId>ojdbc6</artifactId>
            <version>${oracle.version}</version>
        </dependency>

相关文章

网友评论

      本文标题:给sql语句添加分页(oracle)

      本文链接:https://www.haomeiwen.com/subject/ynnhldtx.html