本文例程下载: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--