在前面一節我們已經完成後臺管理界面的一個實現,在這一節我完成其中的博客類別管理中如果分頁顯示博客類別信息。
在寫之前,先看一下數據庫中的表的情況
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',
`typeName` VARCHAR(30) DEFAULT NULL COMMENT '博客類別',
`orderNum` INT(11) DEFAULT NULL COMMENT '博客排序',
PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8;
一張表 三個字段 自增主鍵
接下來我們需要寫出表對應的實體類 以及mapper文件
這裏有兩種方法可以完成
1、手寫
2、通過mybatis generator自動生成
前期我還是覺得手寫比較這樣我們對錶結構更加了解在這裏我使用手寫的方式
1、 在ssm.blog.entity包中新建BlogType.java
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類 沒有什麼好需要解釋的。
2、在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方法
- 兩個參數分別是 start 與 end 其中對應 sql語句中的 limit start,end.
- 在我們分頁中 start對應的(page-1)✖️pageSize ,end對應的是page✖️pageSize
- 由於是兩個參數 無法使用parameterType 但是mybatis給我們提供了兩種方法 1 封裝成Map對象 2使用@Param(value=”name”)註解 默認value=可以省略也就是這樣子 @Param(“name”)在這裏我使用@Param註解 這樣我們在mapper文件中就可以直接通過#{name}獲取參數中的值
在這個dao接口聲明瞭博客類別的增刪改查 分頁 查詢總記錄等方法
但是這裏只是方法的聲明並沒有具體的實現,所以我們還需要新建mapper文件對接口中的方法進行實現。
3、在resource目錄的mapper文件夾新建BlogTypeMapper.xml
爲什麼要將mapper文件放在這裏呢?
因爲我們整合spring與mybatis的時候設置mapper掃描路徑就這個路徑不知道大家還有沒有映像!
<?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接口的方法就實現了 我們可以新建測試類來測試一下
這裏我主要測試分頁方法
4、測試dao接口
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層的功能已經實現