您的位置:首页 > 其它

【ssm个人博客项目实战04】mybatis实现博客类别的增删改查分页

2017-04-14 19:00 567 查看
在前面一节我们已经完成后台管理界面的一个实现,在这一节我完成其中的博客类别管理中如果分页显示博客类别信息。

在写之前,先看一下数据库中的表的情况

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.
b24d
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层的功能已经实现
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: