关于分页SQL的小总结

Posted

tags:

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

findPage 和findPageTotal条件分页中的条件 较为复杂点的关联查询 有取别名的

<select id="findPage" resultMap="MinOrderInfo" parameterType="map">
         SELECT o.*,w.name buyName,w.MOBILE buyMobile,aa.name sellName,aa.MOBILE sellMobile,rs.CAR_BRAND_NAME carBrandName1,rs.TRANS_PRICE,scn.price,scs.CAR_BRAND_NAME carBrandName3,scs.EXPECT_TRANS_PRICE FROM  order_info  o 
       INNER JOIN web_user w ON  w.id=o.SEARCH_USER_ID 
       LEFT JOIN (SELECT o.SOURCE_USER_ID ,w.name,w.MOBILE mobile,o.Id  FROM  order_info  o INNER JOIN web_user w ON  w.id=o.SOURCE_USER_ID) aa ON aa.Id=o.Id
       LEFT JOIN release_source rs ON o.source_id = rs.id
       LEFT JOIN search_car_normal scn ON o.SEARCH_normal_ID = scn.id
       LEFT JOIN search_car_special scs ON o.search_special_ID = scs.id
       WHERE 1= 1
                                 
        <if test="id != null and id != ‘‘">and o.Id = #{id}</if> 
        <if test="sourceId != null and sourceId != ‘‘">and o.SOURCE_ID = #{sourceId}</if>
        <if test="sourceUserId != null and sourceUserId != ‘‘">and o.SOURCE_USER_ID = #{sourceUserId}</if>
        <if test="searchId != null and searchId != ‘‘">and o.SEARCH_ID = #{searchId}</if>
        <if test="searshUserId != null and searshUserId != ‘‘">and o.SEARCH__USER_ID = #{searshUserId}</if>
        <if test="num != null and num != ‘‘">and o.NUM = #{num}</if>
        <if test="depositPrice != null and depositPrice != ‘‘">and o.DEPOSIT_PRICE = #{depositPrice}</if>
        <if test="registratAddress != null and registratAddress != ‘‘">and o.REGISTRAT_ADDRESS = #{registratAddress}</if>
        <if test="pullCarTime != null and pullCarTime != ‘‘">and o.PULL_CAR_TIME = #{pullCarTime}</if>
        <if test="remark != null and remark != ‘‘">and o.REMARK = #{remark}</if>
        <if test="createTime != null and createTime != ‘‘">and o.CREATE_TIME = #{createTime}</if>
        <if test="payTime != null and payTime != ‘‘">and o.PAY_TIME = #{payTime}</if>
        <if test="state != null and state != ‘‘">and o.STATE = #{state}</if>
        <if test="orderAmt != null and orderAmt != ‘‘">and o.ORDER_AMT = #{orderAmt}</if>
        <if test="orderType != null and orderType != ‘‘">and o.ORDER_TYPE= #{orderType}</if>
        <if test="buyName != null and buyName != ‘‘">and w.NAME like CONCAT(‘%‘,#{buyName},‘%‘)</if>
        <if test="buyMobile != null and buyMobile != ‘‘">and w.MOBILE like CONCAT(‘%‘,#{buyMobile},‘%‘)</if>
        <if test="startTime !=null and startTime !=‘‘">and o.CREATE_TIME &gt;#{startTime}</if>
        <if test="endTime !=null and endTime !=‘‘">and o.CREATE_TIME &lt;#{endTime}</if>
        <if test="orderNumber != null and orderNumber != ‘‘">and o.ORDER_NUMBER like CONCAT(‘%‘,#{orderNumber},‘%‘)</if>
        ORDER BY o.CREATE_TIME DESC
        limit #{startRow},#{pageSize}
    </select>
<select id="findPageTotal" resultType="int" parameterType="map">
        
        SELECT COUNT(1) FROM(SELECT o.*,w.name buyName,w.MOBILE buyMobile,aa.name sellName,aa.MOBILE sellMobile,rs.TRANS_PRICE,scn.price,scs.EXPECT_TRANS_PRICE FROM  order_info  o 
       INNER JOIN web_user w ON  w.id=o.SEARCH_USER_ID 
       LEFT JOIN (SELECT o.SOURCE_USER_ID ,w.name,w.MOBILE mobile,o.Id  FROM  order_info  o INNER JOIN web_user w ON  w.id=o.SOURCE_USER_ID) aa ON aa.Id=o.Id
       LEFT JOIN release_source rs ON o.source_id = rs.id
       LEFT JOIN search_car_normal scn ON o.SEARCH_normal_ID = scn.id
       LEFT JOIN search_car_special scs ON o.search_special_ID = scs.id
       WHERE 1= 1)qq WHERE 1= 1
        <if test="id != null and id != ‘‘">and Id = #{id}</if>
        <if test="sourceId != null and sourceId != ‘‘">and SOURCE_ID = #{sourceId}</if>
        <if test="sourceUserId != null and sourceUserId != ‘‘">and SOURCE_USER_ID = #{sourceUserId}</if>
        <if test="searchId != null and searchId != ‘‘">and SEARCH_ID = #{searchId}</if>
        <if test="searshUserId != null and searshUserId != ‘‘">and SEARCH__USER_ID = #{searshUserId}</if>
        <if test="num != null and num != ‘‘">and NUM = #{num}</if>
        <if test="depositPrice != null and depositPrice != ‘‘">and DEPOSIT_PRICE = #{depositPrice}</if>
        <if test="registratAddress != null and registratAddress != ‘‘">and REGISTRAT_ADDRESS = #{registratAddress}</if>
        <if test="pullCarTime != null and pullCarTime != ‘‘">and PULL_CAR_TIME = #{pullCarTime}</if>
        <if test="remark != null and remark != ‘‘">and REMARK = #{remark}</if>
        <if test="createTime != null and createTime != ‘‘">and CREATE_TIME = #{createTime}</if>
        <if test="payTime != null and payTime != ‘‘">and PAY_TIME = #{payTime}</if>
        <if test="buyName != null and buyName != ‘‘">and buyName like CONCAT(‘%‘,#{buyName},‘%‘)</if>
        <if test="buyMobile != null and buyMobile != ‘‘">and buyMobile like CONCAT(‘%‘,#{buyMobile},‘%‘)</if>
        <if test="startTime !=null and startTime !=‘‘">and CREATE_TIME &gt;#{startTime}</if>
        <if test="endTime !=null and endTime !=‘‘">and CREATE_TIME &lt;#{endTime}</if>
        <if test="state != null and state != ‘‘">and STATE = #{state}</if>
        <if test="orderAmt != null and orderAmt != ‘‘">and ORDER_AMT = #{orderAmt}</if>
        <if test="orderType != null and orderType != ‘‘">and ORDER_TYPE=#{orderType}</if>
        <if test="orderNumber != null and orderNumber != ‘‘">and ORDER_NUMBER like CONCAT(‘%‘,#{orderNumber},‘%‘)</if>
    </select>

 <if test="buyName != null and buyName != ‘‘">and buyName like CONCAT(‘%‘,#{buyName},‘%‘)</if> 注意此处需用别名 不能直接用name 作为条件 否则当页面传值查询时候会报SQL语句查不到相应字段!

页面jsp代码

 

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<%@ taglib uri="/WEB-INF/tld/fmt.tld" prefix="fmt"%>
<c:set var="ctx" value="${pageContext.request.contextPath}" />
<!-- ubo -->
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>订单管理</title>
<meta
    content=‘width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no‘
    name=‘viewport‘>
<link href="${ctx}/resources/css/css.css" rel="stylesheet"
    type="text/css" />
<!-- Bootstrap 3.3.4 -->
<link href="${ctx}/resources/frame/bootstrap/css/bootstrap.min.css"
    rel="stylesheet" type="text/css" />
<!-- Font Awesome Icons -->
<link href="${ctx}/resources/frame/dist/css/font-awesome.min.css"
    rel="stylesheet" type="text/css" />
<!-- Ionicons -->
<link href="${ctx}/resources/frame/dist/css/ionicons.min.css"
    rel="stylesheet" type="text/css" />
<!-- Theme style -->
<link href="${ctx}/resources/frame/dist/css/AdminLTE.min.css"
    rel="stylesheet" type="text/css" />
<!-- AdminLTE Skins. Choose a skin from the css/skins 
         folder instead of downloading all of them to reduce the load. -->
<link href="${ctx}/resources/frame/dist/css/skins/_all-skins.min.css"
    rel="stylesheet" type="text/css" />

<!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
<!-- WARNING: Respond.js doesn‘t work if you view the page via file:// -->
<!--[if lt IE 9]>
        <script src="${ctx}/resources/frame/dist/js/html5shiv.min.js"></script>
        <script src="${ctx}/resources/frame/dist/js/respond.min.js"></script>
    <![endif]-->
    </head>
    <body class="skin-blue sidebar-mini">
        <div class="wrapper">
            <%@ include file="../../main_header.jsp"%>
    
            <%@ include file="../../main_sidebar.jsp"%>
    
            <!-- Content Wrapper. Contains page content -->
            <div class="content-wrapper">
                <!-- Content Header (Page header) -->
                <section class="content-header">
                    <h1>
                        优博车平台 <small>订单管理</small>
                    </h1>
                </section>
    
                <!-- Main content -->
                <section class="content">
                    <div class="row">
                        <div class="col-xs-12">
                            <div class="box">
                                <div class="box-header">
                                    <form method="post" id="queryForm"
                                        action="${ctx }/orderinfo/list" name="form1">
                                        <div class="box-tools">
                                            <input type="hidden" name="currentPage" id="currentPage"
                                                value="${page.currentPage}">
                                        </div>
                                        <div class="box-header">
                                            <div class="">
                                                <input type="text" class="form-control input-sm pull-left" style="width: 150px;" placeholder="订单号" name="orderNumber" value="${orderNumber}" maxlength="30">
                                                <input type="text" class="form-control input-sm pull-left"  placeholder="买方用户查找" name="buyName" value="${buyName}" style="width: 100px; margin-left:15px;"  maxlength="20">
                                                <input type="text" class="form-control input-sm pull-left"  placeholder="买方手机号查找" name="buyMobile" value="${buyMobile}" style="width: 130px; margin-left:15px;"  maxlength="20">
                                                <select
                                                    class= "form-control input-sm pull-left" name="orderType" id="orderType"
                                                    style="width:150px;height:30px; margin-left:20px;">
                                                    <option <c:if test="${orderType == ‘0‘}">selected="selected"</c:if>
                                                        value="">类型</option>
                                                    <option <c:if test="${orderType == ‘1‘}">selected="selected"</c:if>
                                                        value="1">销车订单</option>
                                                    <option <c:if test="${orderType == ‘2‘}">selected="selected"</c:if>
                                                        value="2">普通寻车订单</option>
                                                    <option <c:if test="${orderType == ‘3‘}">selected="selected"</c:if>
                                                        value="3">竞价寻车订单</option>
                                                </select>
                                                <input type="text" class="form-control input-sm pull-left" style="width: 100px; margin-left:20px;" placeholder="创建起始日期" name="startTime" value="${startTime}" readonly="true" onclick="WdatePicker({dateFmt:‘yyyy-MM-dd‘})">
                                                  <input type="text" class="form-control input-sm pull-left" style="width: 100px; margin-left:20px;" placeholder="创建结束日期" name="endTime" value="${endTime}" readonly="true" onclick="WdatePicker({dateFmt:‘yyyy-MM-dd‘})">
                                                <button class="btn btn-sm btn-default" id="queryBtn" style=" margin-left:20px;">查询</button>
                                            </div>
                                        </div>
                                    </form>
                                </div>
                                <!-- /.box-header -->
                                <div class="box-body table-responsive no-padding">
                                    <table class="table table-hover">
                                        <tr>
                                            <th class="col-md-1" style="width: 10%">订单号</th>
                                            <th class="col-md-1" style="width: 6%">买家姓名</th>
                                            <th class="col-md-1" style="width: 8%">买家手机号</th>
                                            <th class="col-md-1" style="width: 6%">卖家姓名</th>
                                            <th class="col-md-1" style="width: 10%">创建时间</th>
                                            <th class="col-md-1" style="width: 8%">订单金额</th>
                                            <th class="col-md-1" style="width: 8%">类型</th>
                                            <th class="col-md-1" style="width:10%">提车时间</th>
                                            <th class="col-md-1" style="width: 8%">状态</th>
                                            <th class="col-md-1" style="width: 15%">操作</th>
                                            <c:if test="${page.items != null}">
                                                <c:forEach items="${page.items}" var="orderinfo">
                                                    <tr>
                                                        <td>${orderinfo.orderNumber }</td>
                                                        <td>${orderinfo.buyName }</td>
                                                        <td>${orderinfo.buyMobile }</td>
                                                        <td>${orderinfo.sellName }</td>
                                                        <td><fmt:formatDate value="${orderinfo.createTime}"
                                                                pattern="yyyy.MM.dd HH:mm:ss" /></td>
                                                        <td>${orderinfo.orderAmt }万元</td>
                                                        <td><c:if test="${orderinfo.orderType==‘1‘}">销车订单
                                                          </c:if> <c:if
                                                                test="${orderinfo.orderType==‘2‘}">普通寻车订单
                                                          </c:if> <c:if
                                                                test="${orderinfo.orderType==‘3‘}">竞价寻车订单 
                                                          </c:if></td>
                                                        <td><fmt:formatDate value="${orderinfo.pullCarTime}"
                                                                pattern="yyyy.MM.dd HH:mm:ss" /></td>
    
                                                        <td><c:if test="${orderinfo.state==‘1‘}">待支付
                                                        </c:if> <c:if
                                                                test="${orderinfo.state==‘2‘}">已冻结订金
                                                        </c:if> <c:if
                                                                test="${orderinfo.state==‘3‘}">已支付订金
                                                        </c:if> <c:if
                                                                test="${orderinfo.state==‘4‘}">已完成
                                                        </c:if> <c:if
                                                                test="${orderinfo.state==‘5‘}">已取消
                                                        </c:if> <c:if
                                                                test="${orderinfo.state==‘6‘}">已删除
                                                        </c:if> <c:if
                                                                test="${orderinfo.state==‘7‘}"><b style="color:red;">纠纷处理中</b>
                                                        </c:if>
                                                         <c:if
                                                                test="${orderinfo.state==‘8‘}"><b style="color:red;">纠纷处理成功</b>
                                                        </c:if></td>
                                                        <td><a
                                                            href="${ctx}/orderinfo/detail?id=${orderinfo.id }"
                                                            class="btn btn-sm btn-primary detailBtn">详细</a> 
                                                            <c:if test="${orderinfo.state==‘7‘}"><b style="color:red;"><a
                                                            href="${ctx}/orderinfo/edit?id=${orderinfo.id }"
                                                            class="btn btn-sm btn-primary detailBtn">违约处理</a></b>
                                                        </c:if>
                                                            </td>
                                                    </tr>
                                                </c:forEach>
                                            </c:if>
                                            <c:if test="${empty page.items}">
                                                <tr>
                                                    <td colspan="10"><p class="text-center text-danger">暂无数据</p></td>
                                                </tr>
                                            </c:if>
                                    </table>
                                </div>
                                <!-- /.box-body -->
                                <c:if test="${not empty page.items}">
                                    <div id="pager" class="box-footer clearfix"></div>
                                </c:if>
                            </div>
                            <!-- /.box -->
                        </div>
                    </div>
                </section>
                <!-- /.content -->
            </div>
            <!-- /.content-wrapper -->
    
            <!-- Modal -->
            <%@ include file="../../main_footer.jsp"%>
        </div>
        <!-- ./wrapper -->

    <!-- jQuery 2.1.4 -->
    <script src="${ctx}/resources/frame/plugins/jQuery/jQuery-2.1.4.min.js"></script>
    <!-- Bootstrap 3.3.2 JS -->
    <script src="${ctx}/resources/frame/bootstrap/js/bootstrap.min.js"
        type="text/javascript"></script>
    <!-- Slimscroll -->
    <script
        src="${ctx}/resources/frame/plugins/slimScroll/jquery.slimscroll.min.js"
        type="text/javascript"></script>
    <!-- FastClick -->
    <script src=‘${ctx}/resources/frame/plugins/fastclick/fastclick.min.js‘></script>
    <!-- AdminLTE App -->
    <script src="${ctx}/resources/frame/dist/js/app.min.js"
        type="text/javascript"></script>
    <!-- AdminLTE for demo purposes -->
    <script src="${ctx}/resources/frame/dist/js/demo.js"
        type="text/javascript"></script>
    <script src="${ctx}/resources/scripts/jquery.pager2.js"
        type="text/javascript"></script>
    <script type="text/javascript"src="${ctx}/resources/scripts/DatePicker/WdatePicker.js"></script>
    <script>
         String.prototype.Trim = function() {
            return this.replace(/(^\s*)|(\s*$)/g, "");
        } 
        $(function() {
            PageClick = function(pageclickednumber) {
                $("#pager").pager({
                    pagenumber : pageclickednumber,
                    pagecount : ${page.totalPage},
                    buttonClickCallback : PageClick
                });
                $("#currentPage").val(pageclickednumber);
                $("#queryForm").submit();
            }

            $("#pager").pager({
                pagenumber : ${page.currentPage},
                pagecount : ${page.totalPage},
                buttonClickCallback : PageClick
            });
            //用于查询
            $("#queryBtn").bind("click", function() {
                $("#currentPage").val("1");//给当前页赋值
                $("#queryForm").submit();//提交表单
            });

        });
    </script>
</body>
</html>

ssm框架下的控制层代码

 

@RequestMapping("list")
    public String list(OrderInfo orderInfo,String startTime,String endTime, 
            Model model, Page page,HttpServletRequest request) {
        Map<String, Object> params = new HashMap<String, Object>();
        page.setPageSize(pagesize);
        String orderNumber=request.getParameter("orderNumber");
        String orderType=request.getParameter("orderType");
        params.put("orderNumber", orderNumber);
        params.put("orderType", orderType);
        params.put("endTime", endTime);
        params.put("startTime", startTime);//时间区间查询
        params.put("buyName", orderInfo.getBuyName()); //(用于用户名查询)
        params.put("buyMobile", orderInfo.getBuyMobile()); //(用于手机查询)
        String num = request.getParameter("currentPage"); 
        if (num != null && !("").equals(num)) {
            page.setCurrentPage(Integer.parseInt(num));
        }
        page = orderInfoService.findByMap(params, page);
        model.addAttribute("page", page);// 查到的值传给页面
        model.addAttribute("orderNumber", orderNumber);
        model.addAttribute("orderType", orderType);
        model.addAttribute("buyName", orderInfo.getBuyName());
        model.addAttribute("buyMobile", orderInfo.getBuyMobile());
        model.addAttribute("endTime", endTime);
        model.addAttribute("startTime", startTime);
        return PATH + "list";
    }

 

以上是关于关于分页SQL的小总结的主要内容,如果未能解决你的问题,请参考以下文章

TP5.0中的小知识总结

Asp.Net北大青鸟总结-使用GridView实现真假分页

关于oracle分页顺序问题,我的代码可以实现分页,但是新添加进去的,顺序不是在最后

小5聊sql server 分页和分组-row_number()和over()rank()和over()的小区别

IFE_part1(task1-7)_blog.html总结

关于SQL SERVER 解析XML遇到的小问题——0xc00ce508