文档章节

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

YuKongA
 YuKongA
发布于 2017/05/16 09:17
字数 1332
阅读 78
收藏 1

在前面一节我们已经完成后台管理界面的一个实现,在这一节我完成其中的博客类别管理中如果分页显示博客类别信息。

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

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文件
这里有两种方法可以完成
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扫描路径就这个路径不知道大家还有没有映像!


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层的功能已经实现

© 著作权归作者所有

共有 人打赏支持
YuKongA
粉丝 6
博文 10
码字总数 15504
作品 0
ZHENFENGSHISAN/perfect-ssm

Quick Start 项目简介 ssm系列 ssm-demo:Spring+SpringMVC+Mybatis+easyUI整合 perfect-ssm:RESTful API+redis缓存 ssm-cluster:前后端分离+集群部署 ssm-dubbo:dubbo服务化 ssm-micro-se......

ZHENFENGSHISAN
2017/09/18
0
0
springMVC+spring+mybatis集成

在上一博客讲到如何在maven上创建springMVC项目 通过Maven创建SprinvMVC项目 下面我们接着说如果把SSM框架初步搭建完成,感谢 http://blog.csdn.net/gebitan505/article/details/44455235 我...

minidai
2015/12/03
830
1
MP实战系列(十四)之分页使用

MyBatis Plus的分页,有插件式的,也有其自带了,插件需要配置,说麻烦也不是特别麻烦,不过觉得现有的MyBatis Plus足以解决,就懒得配置插件了。 MyBatis Plus的资料不算是太多,与MyBatis...

youcongtech
09/04
0
0
shenzhanwang/SSM

SSM SpringMVC,Mybatis,Spring三大框架的整合总是很麻烦,在此提供一个已经整合好三大框架的包,可以直接下载导入Myeclipse使用,项目基于Maven做依赖管理。项目基于Mysql自带的Sakila数据库...

shenzhanwang
2016/11/16
0
0
Mybatis-Plus 2.1-gamma 发布

Mybatis-Plus是一款 mybatis 动态SQL 自动注入 mybatis增删改查 crud 操作中间件。启动加载 XML 配置时注入 mybatis动态sql 操作,为简化开发工作、提高生产率而生。Mybatis-Plus 启动注入非...

青苗
2017/06/29
1K
7

没有更多内容

加载失败,请刷新页面

加载更多

Spring的Resttemplate发送带header的post请求

private HttpHeaders getJsonHeader() { HttpHeaders headers = new HttpHeaders(); MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8"); ......

qiang123
昨天
0
0
Spring Cloud Gateway 之 Only one connection receive subscriber allowed

都说Spring Cloud Gateway好,我也来试试,可是配置了总是报下面这个错误: java.lang.IllegalStateException: Only one connection receive subscriber allowed. 困扰了我几天的问题,原来...

ThinkGem
昨天
5
0
学习设计模式——观察者模式

1. 认识观察者模式 1. 定义:定义对象之间一种一对多的依赖关系,当一个对象状态发生变化时,依赖该对象的其他对象都会得到通知并进行相应的变化。 2. 组织结构: Subject:目标对象类,会被...

江左煤郎
昨天
0
0
emoji

前言:随着iOS系统版本的升级,对原生emoji表情的支持也越来越丰富。emoji表情是unicode码中为表情符号设计的一组编码,当然,还有独立于unicode的另一套编码SBUnicode,在OS系统中,这两种编...

HeroHY
昨天
2
0
rabbitmq学习(二)

生产者消费者初级案列 ChannelUtils package com.hensemlee.rabbitmq;import com.rabbitmq.client.Channel;import com.rabbitmq.client.Connection;import com.rabbitmq.client.Connecti......

hensemlee
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部