• agumaster 分页方案


    本文例程下载:https://files.cnblogs.com/files/xiandedanteng/agumaster20200430-1.zip

    之前的分页方案有点小瑕疵,这回修正了一下。

    控制类:

    package com.ufo.hy.agumaster.ctrl;
    
    import java.util.List;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    
    import com.ufo.hy.agumaster.dao.StockMapper;
    import com.ufo.hy.agumaster.entity.Stock;
    
    @Controller
    public class ActionController {
        @Autowired
        private StockMapper stockMapper=null;
        
        /**
         * 
         * @param m:model
         * @param pageNo:page number
         * @param pageSize:how many records in a page
         * @param keyword:key word
         * @return
         */
        @RequestMapping("/liststock")
        public String liststock(Model m,@RequestParam(value="pageNo",defaultValue="0") int pageNo,
                                           @RequestParam(value="pageSize",defaultValue="20") int pageSize,
                                           @RequestParam(value="keyword",defaultValue="") String keyword) {
            
            int start=pageNo*pageSize;
            int end=start+pageSize;
            List<Stock> list=stockMapper.pagedSearch(start, end,keyword);
            m.addAttribute("list", list);
            
            int count=stockMapper.getPagedSearchCount(keyword);
            int pageCount=count/pageSize;
            m.addAttribute("pageCount", pageCount);
    
            m.addAttribute("pageNo", pageNo);
            
            return "liststock";
        }
    }

    Mapper类:

    package com.ufo.hy.agumaster.dao;
    
    import java.util.List;
    
    import org.apache.ibatis.annotations.Mapper;
    import org.apache.ibatis.annotations.Param;
    import org.apache.ibatis.annotations.Select;
    import org.apache.ibatis.annotations.SelectProvider;
    
    import com.ufo.hy.agumaster.entity.Stock;
    
    @Mapper
    public interface StockMapper {
    
        /**
         * Paged search stocks
         * @param start:Start line
         * @param end: End line
         * @param keyword: Search keyword
         * @return
         */
        @SelectProvider(type=StockSql.class,method="pagedSearch")
        List<Stock> pagedSearch(int start,int end,String keyword);
        
        /**
         * get all records' count of pagedSearch
         * @param keyword
         * @return
         */
        @Select("select count(*) from hy_stock where name like '%${keyword}%' or code like '%${keyword}%' ")
        int getPagedSearchCount(@Param("keyword") String keyword);
    }

    分页SQL:

    package com.ufo.hy.agumaster.dao;
    
    public class StockSql {
        public String pagedSearch(int start,int end,String keyword) {
            StringBuilder sb = new StringBuilder();
    
            sb.append(" select b.* from                       ");
            sb.append(" (select a.*,rownum as rn from         ");
            sb.append(" (select * from hy_stock where name like '%"+keyword+"%' or code like '%"+keyword+"%' order by id) a  ");
            sb.append(" where rownum<="+end+") b               ");
            sb.append(" where b.rn>"+start+"                  ");
    
            return sb.toString();
        }
    }

    页面:

    <!DOCTYPE html>
    <html xmlns:th="http://www.thymeleaf.org">
    <head>
    <meta charset="UTF-8">
    <title>List Stocks</title>
    </head>
    <body>
        <div>
        共:<span th:text="${pageCount}">pageCount</span>页
        当前第:<span th:text="${pageNo}">pageIndex</span></div>
    
        <table border="0px" width="160px">
            <tr><td colspan="10"><input type="text" /></td></tr>
            <tr>
                <td><a th:href="@{/liststock?pageNo=1&pageSize=20}">首页</a></td>
                <td><a th:href="'/liststock?pageNo=' + ${pageCount} +'&pageSize=20' ">末页</a></td>
                <td>
                    <a th:if="${pageNo ne 1}" th:href="'/liststock?pageNo=' + ${pageNo - 1} +'&pageSize=20' ">上页</a>
                    <span th:if="${pageNo eq 1}">上页</span>
                </td>
                <td>
                    <a th:if="${pageNo ne pageCount}" th:href="'/liststock?pageNo=' + ${pageNo + 1} +'&pageSize=20' ">下页</a>
                    <span th:if="${pageNo eq pageCount}">下页</span>
                </td>
            </tr>
        </table>
        
        <table border="1px" width="160px">
            <caption>All Stocks</caption>
            <thead>
                <tr><th>id</th><th>code</th><th>name</th></tr>
            </thead>
            <tbody>
                <tr th:each="item:${list}">
                    <td th:text="${item.id}">id</td>
                    <td th:text="${item.code}">name</td>
                    <td th:text="${item.name}">salary</td>
                </tr>
            </tbody>
        </table>
    </body>
    </html>

    结果:

    本例还增加了热启动部署:

            <!-- Hot deployment -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-devtools</artifactId>
            </dependency>

    另外将 application.properties 中内容改为:

    spring.profiles.active=oracle

    而增加了文件application-oracle.properties,其中内容是:

    spring.profiles.active=oracle
    
    spring.datasource.url=jdbc:oracle:thin:@dev-dm-XXXXX1z.dev.jp.local:2050/SV_TRTMSAPDB
    spring.datasource.username=RTMXXXXMIN2
    spring.datasource.password=teXXXXXX01
    spring.datasource.driver-class-name=oracle.jdbc.OracleDriver
    
    logging.level.com.ufo.hy.agumaster.dao.StockMapper=debug
    logging.config=classpath:logback.xml

    这是为了未来迁移到MySQL数据库做准备,届时再增加一个application-mysql.properties,再将application.properties 中spring.profiles.active改为mysql即可。

    --2020-04-30--

  • 相关阅读:
    使 Asp.net Core Hosting Bundle 立即生效
    Hosted Services require keep alive
    VS 高级保存选项,解决文件内容编码问题
    asp.net core localhost https 证书
    阿里云K8S下玩.NET CORE 3.1
    cmd 域名生效检测
    c# 通过win32 api 得到指定Console application Content
    .net framework msbuild环境搭建 (不装vs)
    Python常用模块——目录
    Python——爬虫进阶
  • 原文地址:https://www.cnblogs.com/heyang78/p/12808358.html
Copyright © 2020-2023  润新知