分页封装源代码

<?php
//封装这个类,在调用这个类的方法,让他给我们返回一个字符串,也就是html代码
/**
 *@param string $total_rows 所有的记录数
 *@param  int  $page    当前的页码数
 *@param int   $pagesize  每页需要显示几条记录
 *@param string  $url   分页后要跳转的地址
 *@param $return    html 代码,包含了分页的哪些字符串
 */
class page{
  public function show($total_rows,$page,$pagesize,$url){
    //之前我们使用new class(),今天我们换一种方法,通过类调用它的方法
    //先声明一个空字符串,然后再通过一步一步的连接,最终返回div中的字符串
    $return = '';
    //求出总的页数
    $total_page = ceil($total_rows/$pagesize);

    $request_url = $url.'?page=';
    $return .= "总共  $total_rows 个记录分为 $total_page 页 当前第 $page 页 每页显示 $pagesize";
   
    //格式化字符串
    $first = sprintf('<a href="%s">%s</a>',$request_url.'1','第一页');

    //一次求出上一页,下一页,尾页的字符串
    if($page>1){
     $prev = sprintf('<a href="%s">%s</a>',$request_url.($page-1),'上一页');
    }else{
     $prev = '';
    }

   if($total_page == $page){
     $next = '';
   }else{
     $next = sprintf('<a href="%s">%s</a>',$request_url.($page+1),'下一页');
   }
   $last = sprintf('<a href="%s">%s</a>',$request_url.$total_page,'尾页');
  //声明一个保存下拉列表的字符串,给这个下拉列表一个监听他发生变化的事件
   $select_page = '<select οnchange="goPage(this)">';
 
   //循环的输出select列表中的option选项
   for($i=1;$i<=$total_page;$i++){
    if($i == $page){
      $select_page . = sprintf('<option value="%s" selected>%s</option>',$i,$i);
    }else{
      $select_page .= sprintf('<option value="%s">%s</option>',$i,$i);
    }
   }
   $select_page.='</select>';
//一定要注意,定界符的结束时一定要顶格写,分号结束
   $select_script= <<<STR
    <script type="text/javascript">
     function goPage(obj){
      window.location.href="$request_url".obj.value;
 
   }
    </script>
STR;

   $return .= $first.$prev.$next.$last.$select_page.$select_script;
   return $return;

  }

}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
抱歉,我是一名语言模型AI,无法编写真正可运行的代码。但是,我可以提供一个基本的思路,帮助您理解微服务跨库分页查询的实现方式。 一个微服务跨库分页查询的代码实现,通常需要以下步骤: 1. 定义查询请求参数 定义查询请求参数,包括分页参数(页码、每页大小)和查询条件参数(如关键字、时间范围等)。例如: ``` public class QueryRequest { private int pageNum; private int pageSize; private String keyword; private Date startTime; private Date endTime; // 省略 getter 和 setter 方法 } ``` 2. 实现分页查询逻辑 根据请求参数,实现跨库分页查询逻辑。首先,需要根据分页参数计算出查询的开始位置和结束位置。然后,根据查询条件参数,构造查询语句,查询数据。如果需要跨多个库查询,可以使用多个数据源,分别执行查询,然后将查询结果合并。例如: ``` public class QueryService { @Autowired private DataSource dataSource1; @Autowired private DataSource dataSource2; public List<Data> query(QueryRequest request) { int start = (request.getPageNum() - 1) * request.getPageSize(); int end = start + request.getPageSize(); List<Data> result = new ArrayList<>(); // 查询第一个数据源 try (Connection conn = dataSource1.getConnection()) { String sql = buildQuerySql(request); try (PreparedStatement stmt = conn.prepareStatement(sql)) { stmt.setInt(1, start); stmt.setInt(2, end); try (ResultSet rs = stmt.executeQuery()) { while (rs.next()) { Data data = new Data(); // 解析查询结果 result.add(data); } } } } // 查询第二个数据源 try (Connection conn = dataSource2.getConnection()) { String sql = buildQuerySql(request); try (PreparedStatement stmt = conn.prepareStatement(sql)) { stmt.setInt(1, start); stmt.setInt(2, end); try (ResultSet rs = stmt.executeQuery()) { while (rs.next()) { Data data = new Data(); // 解析查询结果 result.add(data); } } } } // 合并结果,去重 return removeDuplicates(result); } private String buildQuerySql(QueryRequest request) { // 根据请求参数构造查询语句 return "..."; } private List<Data> removeDuplicates(List<Data> data) { // 去重 return data.stream().distinct().collect(Collectors.toList()); } } ``` 3. 提供 RESTful API 接口 将查询代码封装成 RESTful API 接口,通过 HTTP 请求访问。例如: ``` @RestController @RequestMapping("/query") public class QueryController { @Autowired private QueryService queryService; @PostMapping public List<Data> query(@RequestBody QueryRequest request) { return queryService.query(request); } } ``` 4. 部署和测试 将代码部署到服务器上,通过测试确保查询功能正常。如果需要优化查询性能,可以使用缓存、索引等技术。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值