【个人博客项目 6】使用Mybatis生成的Example的使用、PageHelper分页插件的使用、 ssm框架下做基本的增删改查 本blog为例

背景分析

因为是由Mybatis逆向生成的,所以service生成的一些方法我们并不采用,首先清空TbBlogService 与TbBlogServiceImpl里面的方法,并新建增删改查方法:

    int insertBlog(TbBlog record);

    TbBlog selectBlog(Integer id);

    PageInfo<TbBlog> selectAllBlog(String username,int pageNum, int pageSize);

    int updateBlog(TbBlog record);
     @Override
    public int deleteBlog(Integer id) ;
    }
  @Resource
    private TbBlogMapper tbBlogMapper;
    @Override
    public int insertBlog(TbBlog record) {
        return 0;
    }

    @Override
    public TbBlog selectBlog(Integer id) {
        //查询使用Example类
        TbBlogExample tbBlogExample = new TbBlogExample();
        //单个查询条件
        return null;
    }

   @Override
   PageInfo<TbBlog> selectAllBlog(String username,int pageNum, int pageSize){
        return null;
    }
    @Override
    public int updateBlog(TbBlog record) {
        return 0;
    }
     @Override
    public int deleteBlog(Integer id) {
        return 0;
    }

基本增删改查以及Example、PageHelper的使用

数据插入

  • service方法 其他数据由页面提供
 @Override
    public int insertBlog(TbBlog record) {
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        String format1 = format.format(new Date());
        Date date = java.sql.Date.valueOf(format1);
        //blog中插入当前时间
        record.setDdate(date);
        tbBlogMapper.insert(record);
        return 1;
    }
  • controller
package com.swyee01.controller;

import com.swyee01.model.AllResultMessage;
import com.swyee01.model.TbBlog;
import com.swyee01.service.TbBlogService;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

/**
 * @author swyee
 * @Program Blog
 * @Description:
 * @date 2020/9/6  17:55
 **/
@RestController
@RequestMapping("blog")
public class BlogController {

    @Resource
    TbBlogService tbBlogService;

    @RequestMapping("/addBlog")
    public AllResultMessage<String> addBlog(TbBlog tbBlog){
        //查询插入用户 从登陆用户中取结果,在这里暂时写死为“张三”
        tbBlog.setUsername("张三");

        //调用service方法
        tbBlogService.insertBlog(tbBlog);
        return new AllResultMessage<>("SUCCESS","blog插入成功","");
    }


}

  • 测试
    http://localhost:8880/blog/addBlog.do?tid=1&title=第四次插入测试&content=第四次插入测试内容&wordType=1
    在这里插入图片描述

数据库查询

使用Example进行数据查询
以相等条件查询
 TbBlogExample tbBlogExample = new TbBlogExample();

        TbBlogExample.Criteria criteria = tbBlogExample.createCriteria();

        //查询条件 可以单个单个写 也可以一行代码一直.下去
//        criteria.andIdEqualTo(8);
//        criteria.andWordTypeEqualTo("1");
        criteria.andIdEqualTo(8).andWordTypeEqualTo("1");
        List<TbBlog> tbBlogs = tbBlogMapper.selectByExample(tbBlogExample);
非空查询
criteria.andIdIsNull();
排序
    TbBlogExample tbBlogExample = new TbBlogExample();
        tbBlogExample.setOrderByClause("DDATE ASC");//正序
         tbBlogExample.setOrderByClause("DDATE DESC");//倒序
     
模糊查询
criteria.andTitleLike("%aa%");
去重
   TbBlogExample tbBlogExample = new TbBlogExample();
        tbBlogExample.setOrderByClause("ASC");//正序
        tbBlogExample.setDistinct(false);//去重
最终根据id单个查询过程与结果
  • service
  @Override
    public TbBlog selectBlog(Integer id) {
        //查询使用Example类
        TbBlogExample tbBlogExample = new TbBlogExample();
//        tbBlogExample.setOrderByClause("DDATE DESC");//倒序
//        tbBlogExample.setDistinct(false);//去重
        TbBlogExample.Criteria criteria = tbBlogExample.createCriteria();

        //查询条件 可以单个单个写 也可以一行代码一直.下去
//        criteria.andIdEqualTo(8);
//        criteria.andWordTypeEqualTo("1");
//        criteria.andIdEqualTo(8).andWordTypeEqualTo("1");
//        List<TbBlog> tbBlogs = tbBlogMapper.selectByExample(tbBlogExample);

//        criteria.andIdIsNull();
//        criteria.andTitleLike("%aa%");
        criteria.andIdEqualTo(id);

        List<TbBlog> tbBlogs = tbBlogMapper.selectByExample(tbBlogExample);
        if(tbBlogs.size()==0){
            //返回自定义异常
            throw new CustomException("BLOGISNULL", "此blog不存在");
        }

        return tbBlogs.get(0);
    }
  • Controller
@RequestMapping("/selectBlog")
    public AllResultMessage<TbBlog> selectBlog(Integer id){
        TbBlog tbBlog = tbBlogService.selectBlog(id);
        return new AllResultMessage<>("SUCCESS","blog查询成功",tbBlog);
    }
  • 结果 http://localhost:8880/blog/selectBlog.do?id=5
    在这里插入图片描述
PageHelper分页插件使用
  • 在mybatis文件下新建mybatis-config.xml
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <plugins>
        <plugin interceptor="com.github.pagehelper.PageInterceptor">
            <!--指明数据库 4.0.0以后不需要设置此属性-->
            <!-- 该参数默认为false -->
            <!-- 设置为true时,会将RowBounds第一个参数offset当成pageNum页码使用 -->
            <!-- 和startPage中的pageNum效果一样-->
            <property name="offsetAsPageNum" value="true"/>
            <!-- 该参数默认为false -->
            <!-- 设置为true时,使用RowBounds分页会进行count查询 -->
            <property name="rowBoundsWithCount" value="true"/>
            <!-- 设置为true时,如果pageSize=0或者RowBounds.limit = 0就会查询出全部的结果 -->
            <!-- (相当于没有执行分页查询,但是返回结果仍然是Page类型)-->
            <property name="pageSizeZero" value="true"/>
            <!-- 3.3.0版本可用 - 分页参数合理化,默认false禁用 -->
            <!-- 启用合理化时,如果pageNum<1会查询第一页,如果pageNum>pages会查询最后一页 -->
            <!-- 禁用合理化时,如果pageNum<1或pageNum>pages会返回空数据 -->
            <property name="reasonable" value="true"/>
            <!-- 3.5.0版本可用 - 为了支持startPage(Object params)方法 -->
            <!-- 增加了一个`params`参数来配置参数映射,用于从Map或ServletRequest中取值 -->
            <!-- 可以配置pageNum,pageSize,count,pageSizeZero,reasonable,orderBy,不配置映射的用默认值 -->
            <!-- 不理解该含义的前提下,不要随便复制该配置 -->
            <property name="params" value="pageNum=start;pageSize=limit;"/>
            <!-- 支持通过Mapper接口参数来传递分页参数 -->
            <property name="supportMethodsArguments" value="true"/>
            <!-- always总是返回PageInfo类型,check检查返回类型是否为PageInfo,none返回Page -->
            <property name="returnPageInfo" value="check"/>
        </plugin>
    </plugins>
</configuration>

  • 修改applicationContext.xml中的sqlSessionFactory 添加为:
 <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- mybatis配置文件路径 -->
        <property name="configLocation" value="classpath:mybatis/mybatis-config.xml" />
        <property name="dataSource" ref="dataSource" />
        <!-- 自动加载mapper映射文件 -->
        <property name="mapperLocations" value="classpath:mybatis/mapper/*.xml" />
    </bean>
  • 查询 service
  @Override
    public PageInfo<TbBlog> selectAllBlog(String username,int pageNum, int pageSize) {
        //查询使用Example类
        TbBlogExample tbBlogExample = new TbBlogExample();
       tbBlogExample.setOrderByClause("DDATE DESC");//倒序

        TbBlogExample.Criteria criteria = tbBlogExample.createCriteria();
        //查询当前用户所写的blog
        criteria.andIdIsNotNull().andUsernameEqualTo(username);
        //这一段必须在想要被分页的查询之前写
        //pageNum 当前页
        //pageSize 每页展示个数
        PageHelper.startPage(pageNum,pageSize);
        List<TbBlog> tbBlogs = tbBlogMapper.selectByExample(tbBlogExample);

        return new PageInfo<TbBlog>(tbBlogs);
    }
  • Controller
    @RequestMapping("/selectAllBlog")
    //RequestParam(defaultValue = "5") 可以设置默认值
    public AllResultMessage<PageInfo<TbBlog>> selectAllBlog(String userName , @RequestParam(defaultValue = "5") Integer pageSize, @RequestParam(defaultValue = "1")Integer pageNum){

        PageInfo<TbBlog> tbBlogPageInfo = tbBlogService.selectAllBlog(userName, pageNum, pageSize);



        return new AllResultMessage<>("SUCCESS","blog查询成功",tbBlogPageInfo);
    }
  • 结果
    只传userName
    http://localhost:8880/blog/selectAllBlog.do?userName=张三
    在这里插入图片描述
    传送pageSize和pageNum
    http://localhost:8880/blog/selectAllBlog.do?userName=张三&pageSize=5&pageNum=3

在这里插入图片描述

修改数据 updateByPrimaryKeySelective 与updateByPrimaryKey的区别

  • service
    @Override
    public int updateBlog(TbBlog record) {

        //带有Selective会自动过滤没有赋值的字段,不做修改
        tbBlogMapper.updateByPrimaryKeySelective(record);
        //会把所有字段进行修改
        tbBlogMapper.updateByPrimaryKey(record);
        return 1;
    }
  • controller
 @RequestMapping("/updateBlog")
    //RequestParam(defaultValue = "5") 可以设置默认值
    public AllResultMessage<String> updateBlog(TbBlog tbBlog){

        tbBlogService.updateBlog(tbBlog);
        return new AllResultMessage<>("SUCCESS","blog修改成功","");
    }
  • 结果
    使用 updateByPrimaryKey

修改之前:
在这里插入图片描述
访问 http://localhost:8880/blog/updateBlog.do?content=第一次插入测试内容1111111&id=6&tid=1&username=张三

在这里插入图片描述

修改之后:
在这里插入图片描述
使用:updateByPrimaryKeySelective
修改之前:
在这里插入图片描述
访问:http://localhost:8880/blog/updateBlog.do?content=第一次插入测试内容1111111&id=7&tid=1&username=张三
在这里插入图片描述
结果:
在这里插入图片描述

删除数据

  • service
  @Override
    public int deleteBlog(Integer id) {
        int i = tbBlogMapper.deleteByPrimaryKey(id);
        return i;
    }

-controller

   @RequestMapping("/deleteBlog")
    //RequestParam(defaultValue = "5") 可以设置默认值
    public AllResultMessage<String> deleteBlog(Integer id){

        int i = tbBlogService.deleteBlog(id);
        //如果不能正确删除,抛出异常
        if(i!=1){
            throw new CustomException("DELETEERROR","删除异常");
        }
        return new AllResultMessage<>("SUCCESS","blog删除成功","");
    }
  • 结果 执行http://localhost:8880/blog/deleteBlog.do?id=6

在这里插入图片描述
再次执行:http://localhost:8880/blog/deleteBlog.do?id=6

因为id=6的数据已经不存在了,所有抛出异常

在这里插入图片描述

结束

上一篇:【个人博客项目 5】ssm整合redis,并对数据做简单的插入,实现验证码的功能

上一篇:【个人博客项目 5】ssm整合redis,并对数据做简单的插入,实现验证码的功能

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值