目錄html
步驟 1 : Mybatis CRUD和分頁java
步驟 2 : 先運行,看到效果,再學習mysql
步驟 3 : 模仿和排錯git
步驟 4 : 基於前面的知識點github
步驟 5 : pom.xmlweb
步驟 6 : PageHelperConfigspring
步驟 7 : CategoryMappersql
步驟 8 : CategoryControllerapache
步驟 9 : listCategory.jspapi
步驟 10 : editCategory.jsp
步驟 11 : 重啓測試訪問
步驟 1 : Mybatis CRUD和分頁
這裏使用Mybatis來作一個完整的CRUD和分頁。 其中分頁使用Mybatis 裏講解的PageHelper插件。
步驟 2 : 先運行,看到效果,再學習老規矩,先下載下載區(點擊進入)的可運行項目,配置運行起來,確承認用以後,再學習作了哪些步驟以達到這樣的效果。
測試地址:
http://127.0.0.1:8080/listCategory |
注: 啓動方式是Springboot特有的,直接運行類:com.how2java.springboot.Application 的主方法。
在確保可運行項目可以正確無誤地運行以後,再嚴格照着教程的步驟,對代碼模仿一遍。
模仿過程不免代碼有出入,致使沒法獲得指望的運行結果,此時此刻經過比較正確答案 ( 可運行項目 ) 和本身的代碼,來定位問題所在。
採用這種方式,學習有效果,排錯有效率,能夠較爲明顯地提高學習速度,跨過學習路上的各個檻。
推薦使用diffmerge軟件,進行文件夾比較。把你本身作的項目文件夾,和個人可運行項目文件夾進行比較。
這個軟件很牛逼的,能夠知道文件夾裏哪兩個文件不對,而且很明顯地標記出來
這裏提供了綠色安裝和使用教程:diffmerge 下載和使用教程
本知識點基於Springboot 中 Mybatis 的基本用法 進行擴展學習
步驟 5 : pom.xml增長對PageHelper的支持
<dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>4.1.6</version> </dependency> |
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.how2java</groupId> <artifactId>springboot</artifactId> <version>0.0.1-SNAPSHOT</version> <name>springboot</name> <description>springboot</description> <packaging>war</packaging> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.9.RELEASE</version> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <!-- servlet依賴. --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> </dependency> <!-- tomcat的支持.--> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> <!-- 這個須要爲 true 熱部署纔有效 --> </dependency> <!-- mybatis --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.1.1</version> </dependency> <!-- mysql --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.21</version> </dependency> <!-- pagehelper --> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper</artifactId> <version>4.1.6</version> </dependency> </dependencies> <properties> <java.version>1.8</java.version> </properties> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project> |
註解@Configuration 表示PageHelperConfig 這個類是用來作配置的。
註解@Bean 表示啓動PageHelper這個攔截器。
新增長一個包 com.how2java.springboot.config, 而後添加一個類PageHelperConfig ,其中進行PageHelper相關配置。
offsetAsPageNum:設置爲true時,會將RowBounds第一個參數offset當成pageNum頁碼使用.
p.setProperty("offsetAsPageNum", "true"); |
rowBoundsWithCount:設置爲true時,使用RowBounds分頁會進行count查詢.
p.setProperty("rowBoundsWithCount", "true"); |
reasonable:啓用合理化時,若是pageNum<1會查詢第一頁,若是pageNum>pages會查詢最後一頁。
p.setProperty("reasonable", "true"); |
注:RowBounds是什麼鬼?我也沒搞太清楚。。。反正這麼複製粘貼就對了 :|
package com.how2java.springboot.config; import java.util.Properties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import com.github.pagehelper.PageHelper; @Configuration public class PageHelperConfig { @Bean public PageHelper pageHelper() { PageHelper pageHelper = new PageHelper(); Properties p = new Properties(); p.setProperty("offsetAsPageNum", "true"); p.setProperty("rowBoundsWithCount", "true"); p.setProperty("reasonable", "true"); pageHelper.setProperties(p); return pageHelper; } } |
修改CategoryMapper,增長CRUD方法的支持。 其實就是調用不一樣的SQL語句。
package com.how2java.springboot.mapper; import java.util.List; import org.apache.ibatis.annotations.Delete; import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Select; import org.apache.ibatis.annotations.Update; import com.how2java.springboot.pojo.Category; @Mapper public interface CategoryMapper { @Select("select * from category_ ") List<Category> findAll(); @Insert(" insert into category_ ( name ) values (#{name}) ") public int save(Category category); @Delete(" delete from category_ where id= #{id} ") public void delete(int id); @Select("select * from category_ where id= #{id} ") public Category get(int id); @Update("update category_ set name=#{name} where id=#{id} ") public int update(Category category); } |
爲CategoryController添加: 增長、刪除、獲取、修改映射
@RequestMapping("/addCategory") public String listCategory(Category c) throws Exception { categoryMapper.save(c); return "redirect:listCategory"; } @RequestMapping("/deleteCategory") public String deleteCategory(Category c) throws Exception { categoryMapper.delete(c.getId()); return "redirect:listCategory"; } @RequestMapping("/updateCategory") public String updateCategory(Category c) throws Exception { categoryMapper.update(c); return "redirect:listCategory"; } @RequestMapping("/editCategory") public String listCategory(int id,Model m) throws Exception { Category c= categoryMapper.get(id); m.addAttribute("c", c); return "editCategory"; } |
修改查詢映射
@RequestMapping("/listCategory") public String listCategory(Model m,@RequestParam(value = "start", defaultValue = "0") int start,@RequestParam(value = "size", defaultValue = "5") int size) throws Exception { PageHelper.startPage(start,size,"id desc"); List<Category> cs=categoryMapper.findAll(); PageInfo<Category> page = new PageInfo<>(cs); m.addAttribute("page", page); return "listCategory"; } |
1. 在參數裏接受當前是第幾頁 start ,以及每頁顯示多少條數據 size。 默認值分別是0和5。
@RequestParam(value = "start", defaultValue = "0") int start,@RequestParam(value = "size", defaultValue = "5" |
2. 根據start,size進行分頁,而且設置id 倒排序
PageHelper.startPage(start,size,"id desc"); |
3. 由於PageHelper的做用,這裏就會返回當前分頁的集合了
List<Category> cs=categoryMapper.findAll(); |
4. 根據返回的集合,建立PageInfo對象
PageInfo<Category> page = new PageInfo<>(cs); |
5. 把PageInfo對象扔進model,以供後續顯示
m.addAttribute("page", page); |
6. 跳轉到listCategory.jsp
return "listCategory"; |
package com.how2java.springboot.web; 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.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.how2java.springboot.mapper.CategoryMapper; import com.how2java.springboot.pojo.Category; @Controller public class CategoryController { @Autowired CategoryMapper categoryMapper; @RequestMapping("/addCategory") public String listCategory(Category c) throws Exception { categoryMapper.save(c); return "redirect:listCategory"; } @RequestMapping("/deleteCategory") public String deleteCategory(Category c) throws Exception { categoryMapper.delete(c.getId()); return "redirect:listCategory"; } @RequestMapping("/updateCategory") public String updateCategory(Category c) throws Exception { categoryMapper.update(c); return "redirect:listCategory"; } @RequestMapping("/editCategory") public String listCategory(int id,Model m) throws Exception { Category c= categoryMapper.get(id); m.addAttribute("c", c); return "editCategory"; } @RequestMapping("/listCategory") public String listCategory(Model m,@RequestParam(value = "start", defaultValue = "0") int start,@RequestParam(value = "size", defaultValue = "5") int size) throws Exception { PageHelper.startPage(start,size,"id desc"); List<Category> cs=categoryMapper.findAll(); PageInfo<Category> page = new PageInfo<>(cs); m.addAttribute("page", page); return "listCategory"; } } |
經過page.getList遍歷當前頁面的Category對象。
在分頁的時候經過page.pageNum獲取當前頁面,page.pages獲取總頁面數。
注:page.getList會返回一個泛型是Category的集合。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <div align="center"> </div> <div style="width:500px;margin:20px auto;text-align: center"> <table align='center' border='1' cellspacing='0'> <tr> <td>id</td> <td>name</td> <td>編輯</td> <td>刪除</td> </tr> <c:forEach items="${page.list}" var="c" varStatus="st"> <tr> <td>${c.id}</td> <td>${c.name}</td> <td><a href="editCategory?id=${c.id}">編輯</a></td> <td><a href="deleteCategory?id=${c.id}">刪除</a></td> </tr> </c:forEach> </table> <br> <div> <a href="?start=1">[首 頁]</a> <a href="?start=${page.pageNum-1}">[上一頁]</a> <a href="?start=${page.pageNum+1}">[下一頁]</a> <a href="?start=${page.pages}">[末 頁]</a> </div> <br> <form action="addCategory" method="post"> name: <input name="name"> <br> <button type="submit">提交</button> </form> </div> |
修改分類的頁面
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false"%> <div style="margin:0px auto; width:500px"> <form action="updateCategory" method="post"> name: <input name="name" value="${c.name}"> <br> <input name="id" type="hidden" value="${c.id}"> <button type="submit">提交</button> </form> </div> |
由於在pom中增長了新jar的依賴,因此要手動重啓,重啓後訪問測試地址:
http://127.0.0.1:8080/listCategory?start=2 |