在前面一節咱們已經完成後臺管理界面的一個實現,在這一節我完成其中的博客類別管理中若是分頁顯示博客類別信息。java
在寫以前,先看一下數據庫中的表的狀況mysql
DROP DATABASE IF EXISTS db_blog; /*建立數據庫,並設置編碼*/ CREATE DATABASE db_blog DEFAULT CHARACTER SET utf8; USE db_blog; CREATE TABLE `t_blogtype` ( `id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '博客id', `type_name` VARCHAR(30) DEFAULT NULL COMMENT '博客類別', `order_num` INT(11) DEFAULT NULL COMMENT '博客排序', PRIMARY KEY (`id`) ) ENGINE=INNODB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8;
一張表 三個字段 自增主鍵
接下來咱們須要寫出表對應的實體類 以及mapper文件
這裏有兩種方法能夠完成
一、手寫
二、經過mybatis generator自動生成
前期我仍是以爲手寫比較這樣咱們對錶結構更加了解在這裏我使用手寫的方式spring
一、 在ssm.blog.entity包中新建BlogType.javasql
package ssm.blog.entity; import java.io.Serializable; /** * Created by xp on 2017/4/14. * @author xp * @Description 博客類別實體類 */ public class BlogType implements Serializable{ private Integer id; private String typeName; private Integer orderNum; public BlogType(Integer id, String typeName, Integer orderNum) { this.id = id; this.typeName = typeName; this.orderNum = orderNum; } public BlogType(String typeName, Integer orderNum) { this.typeName = typeName; this.orderNum = orderNum; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getTypeName() { return typeName; } public void setTypeName(String typeName) { this.typeName = typeName; } public Integer getOrderNum() { return orderNum; } public void setOrderNum(Integer orderNum) { this.orderNum = orderNum; } @Override public String toString() { return "BlogType{" + "id=" + id + ", typeName='" + typeName + '\'' + ", orderNum=" + orderNum + '}'; } }
pojo類 沒有什麼好須要解釋的。
二、在ssm.blog.dao包下新建 BlogTypeDao.java數據庫
package ssm.blog.dao; import org.apache.ibatis.annotations.Param; import org.springframework.stereotype.Repository; import ssm.blog.entity.BlogType; import ssm.blog.entity.Blogger; import java.util.List; /** * Created by xp on 2017/4/14. * @author xp * @Description 博客類別dao */ @Repository public interface BlogTypeDao { /** * 添加博客類別信息 * @param blogType * @return */ Integer addBlogType(BlogType blogType); /** * 刪除博客類別信息 * @param id * @return */ Integer deleteBlogType(Integer id); /** * 更新博客類別信息 * @param blogType * @return */ Integer updateBlogType(BlogType blogType); /** * 根據id查詢博客類別信息 * @param id * @return */ BlogType getById(Integer id); /** * 分頁查詢博客類別信息 * @param start * @param end * @return */ List<BlogType> listByPage(@Param("start") Integer start, @Param("end") Integer end); /** * 查詢總記錄數 * @return */ Long getTotal(); }
使用@Repository 在spring中註冊爲持久層的bean
在這裏主要講一下 listByPage方法apache
在這個dao接口聲明瞭博客類別的增刪改查 分頁 查詢總記錄等方法
可是這裏只是方法的聲明並無具體的實現,因此咱們還須要新建mapper文件對接口中的方法進行實現。mybatis
三、在resource目錄的mapper文件夾新建BlogTypeMapper.xml
爲何要將mapper文件放在這裏呢?
由於咱們整合spring與mybatis的時候設置mapper掃描路徑就這個路徑不知道你們還有沒有映像!app
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!-- mapper實現的接口的路徑(包名+接口名)--> <mapper namespace="ssm.blog.dao.BlogTypeDao"> <!-- 返回結果映射 type使用mybatis-conf中的別名 能夠省略包名--> <resultMap id="BlogTypeResult" type="BlogType"> <!-- id主鍵字段映射--> <id property="id" column="id" /> <!-- 普通屬性映射--> <result property="typeName" column="type_name"/> <result property="orderNum" column="order_num"/> </resultMap> <!-- id爲具體實現接口中的方法名--> <insert id="addBlogType" parameterType="BlogType" keyProperty="id" useGeneratedKeys="true"> insert into db_blog.t_blogtype <!-- 動態sql拼接 prefix前綴 suffix後綴 suffixOverrides除去最後多餘的,--> <trim prefix="(" suffix=")" suffixOverrides=","> <if test="typeName!=null and typeName!=''"> type_name, </if> <if test="orderNum!=null and orderNum!=''"> order_num, </if> </trim> <trim prefix="values(" suffix=")" suffixOverrides=","> <if test="typeName!=null and typeName!=''"> #{typeName}, </if> <if test="orderNum!=null and orderNum!=''"> #{orderNum}, </if> </trim> </insert> <delete id="deleteBlogType" parameterType="java.lang.Integer"> DELETE FROM db_blog.t_blogtype where id=#{id} </delete> <update id="updateBlogType" parameterType="BlogType"> update db_blog.t_blogtype <set > <if test="typeName!=null and typeName!=''"> type_name = #{typeName}, </if> <if test="orderNum!=null and orderNum!=''"> order_num = #{orderNum}, </if> </set> WHERE id = #{id} </update> <select id="getById" parameterType="java.lang.Integer" resultMap="BlogTypeResult" > SELECT id,type_name,order_num from db_blog.t_blogtype where id = #{id} </select> <select id="listByPage" resultMap="BlogTypeResult"> SELECT id,type_name,order_num from db_blog.t_blogtype limit #{start} ,#{end} </select> <select id="getTotal" resultType="java.lang.Long"> SELECT COUNT(id) from db_blog.t_blogtype </select> </mapper>
如今咱們dao接口的方法就實現了 咱們能夠新建測試類來測試一下
這裏我主要測試分頁方法
四、測試dao接口ide
package ssm.blog.dao; import org.apache.ibatis.annotations.Param; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import ssm.blog.entity.BlogType; import javax.annotation.Resource; import java.util.List; import static org.junit.Assert.*; /** * Created by xp on 2017/4/14. * @author xp * @Description 博客類別dao測試類 */ @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = "classpath:spring-beans.xml") public class BlogTypeDaoTest { @Resource private BlogTypeDao blogTypeDao; @Test public void addBlogType() throws Exception { BlogType blogType = new BlogType("Mysql",10); int result = blogTypeDao.addBlogType(blogType); System.out.println(result); } @Test public void deleteBlogType() throws Exception { int result = blogTypeDao.deleteBlogType(19); System.out.println(result); } @Test public void updateBlogType() throws Exception { // 先查詢出要更新的記錄而後修改 BlogType blogType = blogTypeDao.getById(19); //而後提交更新 blogType.setTypeName("更新mysql"); //更新 blogTypeDao.updateBlogType(blogType); //查詢更新後的值 而且打印 System.out.println(blogTypeDao.getById(19)); } @Test public void getById() throws Exception { BlogType blogType = blogTypeDao.getById(19); System.out.println(blogType); } @Test public void listByPage(){ Integer page = 1; //第一頁 Integer pageSize = 2; //一頁顯示兩條 Integer start =(page-1)*pageSize; Integer end = page*pageSize; List<BlogType> blogTypeList = blogTypeDao.listByPage(start,end); for (BlogType b: blogTypeList) { System.out.println(b); } } @Test public void getTotal(){ long total = blogTypeDao.getTotal(); System.out.println(total); } }
這裏使用springtest測試
至此博客類別dao層的功能已經實現