描述
有一个请求查询oralce表,希望返回结果是排序分页给出。那么它和一般的mysql请求有何不同呢。
代码
1
@ResponseBody
@RequestMapping(value = "/xx/queryCustInfo",method = RequestMethod.POST,produces = "application/json; charset=utf-8")
public JSONObject querySecurityCustInfo(@RequestBody String json, @RequestHeader(value="access_token") String access_token) {
JSONObject resObject = new JSONObject();
try {
json = new String(json.getBytes(), Charset.forName("utf-8"));
JSONObject jsonObject = JSONObject.parseObject(json);
String mobile = jsonObject.getString("mobile");
String PageCount = jsonObject.getString("PageCount"); //分页后一页多少条数据
String PageLocate = jsonObject.getString("PageLocate"); //分页后的哪一页数据
String OrderType = jsonObject.getString("OrderType");
2
int startPage = pageSize * (pageNumber - 1) + 1;
int endPage = startPage + pageSize;
String order;
if(OrderType!=null && OrderType.equals("1")) {
order = "asc";
}
else{
order = "desc";
}
// oracle 查询分页 rownum 行数从1开始计数
list = dao.querySecurityCustInfo(mobile,startPage,endPage,order); //手机号,开始计数的是第几条,结束到第几条,排序
3
@Select("<script>" +
" Select * from " +
" ( " +
" SELECT row_number() over(order by KHH ${order}) num, KHH, KHMC, SJ FROM xx.Table where khzt = 0 " +
" <when test='![请添加图片描述](https://img-blog.csdnimg.cn/17661fc35f294d64b85c44f3225ff1e2.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5o6o6I2Q54ix5L2gSm9uYWg=,size_20,color_FFFFFF,t_70,g_se,x_16)
!=null'>" +
" AND SJ = #{mobile}" +
" </when>" +
" ) ct " +
" <when test='Pages!=null and PageSize != null'> " +
" where ct.num >= #{Pages} and ct.num < #{PageSize} "+
" </when> " +
" </script>" )
public List<Map<String,String>> querySecurityCustInfo(@Param("mobile") String mobile, @Param("Pages") Integer startPage,
@Param("PageSize") Integer endPage, @Param("order")String order
);
备注
处理分页排序,与sql的不同之处有两点。
1. 首先需要对查询结果加一个row_number() over ( order by KHH ${order} ) num 用来 分页。 不然无法做到取从第1条到第100条,也就是后面的ct,num >= 和 < 。
2. mysql表统计数据从0条开始取,oracle里的num要从1开始取