SpringBoot+MybatisPlus Restful示例

增删改查,分页

SpringBoot+MybatisPlus Restful示例_第1张图片

CREATE TABLE `tbl_book` (
  `id` int NOT NULL AUTO_INCREMENT,
  `type` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  `name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  `desc_ription` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  `sensitive_Info` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  `sensitive_Info2` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  `create_time` datetime DEFAULT NULL,
  `update_time` datetime DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=85 DEFAULT CHARSET=utf8mb3 ROW_FORMAT=DYNAMIC;

INSERT INTO `tbl_book`(`id`, `type`, `name`, `desc_ription`, `sensitive_Info`, `sensitive_Info2`, `create_time`, `update_time`) VALUES (74, '图林原创', 'Nginx经典教程', 'F5 NGINX核心人员倾力打造,关注基础用法和现代场景,新技术趋势下经典全新解读,涵盖容器,Kubernetes,NJS语言,新协议支持等', NULL, NULL, '2023-11-10 21:12:07', NULL);
INSERT INTO `tbl_book`(`id`, `type`, `name`, `desc_ription`, `sensitive_Info`, `sensitive_Info2`, `create_time`, `update_time`) VALUES (75, '全栈开发', 'Vue.Js前端开发基础与项目实战', '系统深入从原理进行分析,详细介绍前端的发展和常用Vue.js功能模块,内容实用,全面讲解Vue.js生态链且涵盖后端架构相关知识,项目实战详细介绍实用插件和构建PC端网站的步骤及前后端开发流程', NULL, NULL, '2023-11-10 21:14:49', NULL);
INSERT INTO `tbl_book`(`id`, `type`, `name`, `desc_ription`, `sensitive_Info`, `sensitive_Info2`, `create_time`, `update_time`) VALUES (76, '架构', '凤凰架构', '从架构演进,架构设计思维,分布式基石,不可变基础设施,技术方法论5个维度全面探索如何构建可靠的大型分布式系统', NULL, NULL, '2023-11-10 21:16:38', NULL);
INSERT INTO `tbl_book`(`id`, `type`, `name`, `desc_ription`, `sensitive_Info`, `sensitive_Info2`, `create_time`, `update_time`) VALUES (77, '华章科技', 'Maven实战', '国内首本Maven著作,内容全面,实战性强,公认的Maven专家执笔,中外技术专家联合推荐,权威性无需置疑', NULL, NULL, '2023-11-10 21:18:31', NULL);
INSERT INTO `tbl_book`(`id`, `type`, `name`, `desc_ription`, `sensitive_Info`, `sensitive_Info2`, `create_time`, `update_time`) VALUES (78, 'Broadview', '深入理解Apache Dubbo与实战', NULL, NULL, NULL, '2023-11-10 21:19:46', NULL);
INSERT INTO `tbl_book`(`id`, `type`, `name`, `desc_ription`, `sensitive_Info`, `sensitive_Info2`, `create_time`, `update_time`) VALUES (79, '图林程序设计丛书', 'SQL查询', '赢得世界赞誉的SQL经典著作', NULL, NULL, '2023-11-10 21:20:27', NULL);
INSERT INTO `tbl_book`(`id`, `type`, `name`, `desc_ription`, `sensitive_Info`, `sensitive_Info2`, `create_time`, `update_time`) VALUES (80, '华章科技', '分布式中间件技术实战', NULL, NULL, NULL, '2023-11-10 21:21:31', NULL);
INSERT INTO `tbl_book`(`id`, `type`, `name`, `desc_ription`, `sensitive_Info`, `sensitive_Info2`, `create_time`, `update_time`) VALUES (81, '异步图书', 'SpringBoot源码解读与原理分析', NULL, NULL, NULL, '2023-11-10 21:22:09', NULL);
INSERT INTO `tbl_book`(`id`, `type`, `name`, `desc_ription`, `sensitive_Info`, `sensitive_Info2`, `create_time`, `update_time`) VALUES (82, '图林程序', 'SQL必知必会', '畅销全球的数据库入门经典', NULL, NULL, '2023-11-10 21:23:03', NULL);
INSERT INTO `tbl_book`(`id`, `type`, `name`, `desc_ription`, `sensitive_Info`, `sensitive_Info2`, `create_time`, `update_time`) VALUES (83, 'Java专家系列', 'JDBC数据库程序设计', '本书讨论的内容主要是如何利用Java程序语言,编写与数据库相关的应用程序.从最开始Java语言与数据库管理系统的介绍,JDBC API的实用,乃至最后Java数据库应用程序开发的实战.都将在本书中详细说明.详细的实例讲解和完整的章节安排,非常适合Java初学者快速学习实用Java开发数据库相关的应用程序,范例程序丰富,代码和运行结果以图文并茂的方式配合呈现', NULL, NULL, '2023-11-10 21:26:50', NULL);
INSERT INTO `tbl_book`(`id`, `type`, `name`, `desc_ription`, `sensitive_Info`, `sensitive_Info2`, `create_time`, `update_time`) VALUES (84, 'GOTOP', '鸟哥的Linux私房菜', '经久不衰的Linux经典教程', NULL, NULL, '2023-11-10 21:27:45', NULL);

SpringBoot+MybatisPlus Restful示例_第2张图片

pom.xml



    4.0.0
    
        org.springframework.boot
        spring-boot-starter-parent
        2.7.2
         
    
    com.example
    ssmp
    0.0.1-SNAPSHOT
    ssmp
    Demo project for Spring Boot
    
        17
    
    
        
            org.springframework.boot
            spring-boot-starter-web
        
        
            com.baomidou
            mybatis-plus-boot-starter
            3.4.3
        
        
            com.alibaba
            druid-spring-boot-starter
            1.2.16
        
        
            mysql
            mysql-connector-java
            runtime
        
        
            org.projectlombok
            lombok
            true
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        
    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
                
                    
                        
                            org.projectlombok
                            lombok
                        
                    
                
            
        
    


application.properties

SpringBoot+MybatisPlus Restful示例_第3张图片

实体类

package com.example.ssmp.pojo;

import com.baomidou.mybatisplus.annotation.*;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.Value;
import lombok.experimental.Accessors;

import java.util.Date;

/**
 * @author hrui
 * @date 2023/11/10 0:34
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
//@TableName("tbl_book")  已全局配置
public class Book {
    //标识id为表的主键
    //value为id的名称(和表字段一样可以不写)  type为主键自增情况
    //auto为数据库自增
    //ASSIGN_UUID 通过uuid进行主键的自增
    //@TableId(value = "id",type=IdType.AUTO)    已全局配置
    private String id;
    private String type;
    private String name;
    private String descRiption;
    //insert的时候触发的时候自动填充
    @TableField(fill = FieldFill.INSERT)
    private Date createTime;
    //update触发的时候自动填充
    @TableField(fill = FieldFill.UPDATE)
    private Date updateTime;

//    @TableField(select = true, insertStrategy = FieldStrategy.NEVER, updateStrategy = FieldStrategy.NEVER)
//    private String sensitiveInfo; // 只在查询中展示
//
//    private transient String sensitiveInfo2;

}

DAO层

SpringBoot+MybatisPlus Restful示例_第4张图片

业务层

SpringBoot+MybatisPlus Restful示例_第5张图片

实现类

SpringBoot+MybatisPlus Restful示例_第6张图片

控制器

SpringBoot+MybatisPlus Restful示例_第7张图片

package com.example.ssmp.controller;


import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.ssmp.pojo.Book;
import com.example.ssmp.service.BookService;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.logging.log4j.util.Strings;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;


/**
 * @author hrui
 * @date 2023/11/10 0:42
 */
@RestController
@RequestMapping("/books")
public class BookController {

    @Autowired
    private BookService bookService;

    @GetMapping
    public R getAllBooks(){
        return new R(true, bookService.list());
    }
    @GetMapping("/{pageNum}/{pageSize}")
    public R getAllBooks(@PathVariable Integer pageNum,@PathVariable Integer pageSize,Book book){

        Page page=new Page<>(pageNum,pageSize);
        LambdaQueryWrapper lambdaQueryWrapper=new LambdaQueryWrapper<>();

        lambdaQueryWrapper.like(Strings.isNotEmpty(book.getName()), Book::getName, book.getName());
        lambdaQueryWrapper.like(Strings.isNotEmpty(book.getType()), Book::getType, book.getType());
        lambdaQueryWrapper.like(Strings.isNotEmpty(book.getDescRiption()), Book::getDescRiption, book.getDescRiption());
        page = bookService.page(page,lambdaQueryWrapper);
        /**
         * 存在情况
         * 比如第三页只有一条数据,删除后getAll,传过来的页面是3  但是返回的是无数据
         */
        if(pageNum>page.getPages()){
            //重查一遍
            page=new Page<>(page.getPages(),pageSize);
            page=bookService.page(page,lambdaQueryWrapper);
        }
        return new R(true, page);
    }

    @GetMapping("/{id}")
    public R getById(@PathVariable String id){
        Book book = bookService.getById(id);
        return new R(book!=null, book,book!=null?"成功":"数据同步失败,自动刷新");
    }

    @PostMapping
    public R save(@RequestBody Book book){
        System.out.println(123);
        boolean save = bookService.save(book);
        R r = new R(save);
        return r;
    }

//    @PutMapping
//    public Object update(@RequestBody Book book){
//        return bookService.updateById(book);
//    }

    @PutMapping
    public R update(@RequestBody List books){//用Book[]也可以  数据格式:[{},{}]
        boolean b = bookService.updateBatchById(books);
        return new R(b,b?"更新成功":"数据同步失败,自动刷新");
    }

//    @DeleteMapping("/{id}")
//    public Object delete(@PathVariable String id){
//        return bookService.removeById(id);
//    }

    @DeleteMapping("/{ids}")//http://localhost:8080/books/52,53
    public R delete(@PathVariable List ids){
        boolean b = bookService.removeByIds(ids);
        return new R(b,b?"删除成功":"数据同步失败,自动刷新");
    }
}

统一返回

package com.example.ssmp.controller;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

/**
 * @author hrui
 * @date 2023/11/10 7:03
 */
@NoArgsConstructor
@AllArgsConstructor
@Data
@Accessors(chain = true)
public class R {
    private Boolean flag;//表示调用是否成功
    private Object data;
    private String msg;

    public R(Boolean flag){
        this.flag=flag;
    }

    public R(String msg){
        this.flag=false;
        this.msg=msg;
    }

    public R(Boolean flag,Object data){
        this.flag=flag;
        this.data=data;
    }

    public R(Boolean flag,String msg){
        this.flag=flag;
        this.msg=msg;
    }
}

全局异常处理

package com.example.ssmp.exception;

import com.example.ssmp.controller.R;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

/**
 * @author hrui
 * @date 2023/11/10 10:39
 */
@RestControllerAdvice
@Slf4j
public class PExceptionAdvice {

    //private static final Logger log= LoggerFactory.getLogger(PExceptionAdvice.class);

    @ExceptionHandler(Exception.class)
    public R doException(Exception e){
        //记录日志
        log.error("exception", e);

        e.printStackTrace();
        return new R("服务器故障,稍后再试");
    }
}

 MybatisPlus 自动填充配置

package com.example.ssmp.congif;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;

import java.util.Date;

/**
 * @author hrui
 * @date 2023/11/10 3:14
 */
@Component
public class DateHandler implements MetaObjectHandler {
    @Override
    public void insertFill(MetaObject metaObject) {
        this.strictInsertFill(metaObject,"createTime", Date.class,new Date());
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        this.strictUpdateFill(metaObject,"updateTime",Date.class,new Date());
    }
}

 MybatisPlus分页配置

package com.example.ssmp.congif;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author hrui
 * @date 2023/11/10 3:10
 */
@Configuration
public class MyBatisPlusPageInterceptor {

    /**
     * 添加分页插件
     */
//    @Bean
//    public MybatisPlusInterceptor mybatisPlusInterceptor() {
//        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
//        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));//如果配置多个插件,切记分页最后添加
//        //interceptor.addInnerInterceptor(new PaginationInnerInterceptor()); 如果有多数据源可以不配具体类型 否则都建议配上具体的DbType
//        return interceptor;
//    }

    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor(){
        MybatisPlusInterceptor mybatisPlusInterceptor=new MybatisPlusInterceptor();
        mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return mybatisPlusInterceptor;
    }
}

前端







    

    

    

    基于SpringBoot整合SSM案例

    

    

    

    

    





图书管理

查询 新建

前端页面网盘地址

链接:https://pan.baidu.com/s/1BcQXH8gdPZuPfxJ0Lx2wcg 
提取码:uude 
--来自百度网盘超级会员V4的分享

你可能感兴趣的:(spring,boot,后端,java)