在前面一节咱们已经完成后台管理界面的一个实现,在这一节我完成其中的博客类别管理中若是分页显示博客类别信息。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层的功能已经实现