Springboot整合mybatisplus实战

Springboot整合mybatisplus,纯后端,验证结果是通过postman调用的,记录一下

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,`description` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=10014 DEFAULT CHARSET=utf8INSERT INTO `tbl_book` VALUES (10000, '计算机理论', 'Java编程思想(第4版)', 'Java学习经典,殿堂级著作!赢得了全球程序员的广泛赞誉。');
INSERT INTO `tbl_book` VALUES (10001, '计算机理论', '计算机组成原理', '资深的计算机体系结构教育家Alan Clements博士编写,涵盖计算机系统的组成和体系结构的基本概念、指令系统以及处理器实现等涉及计算机组成原理课程的内容。');
INSERT INTO `tbl_book` VALUES (10002, '程序设计', 'C++ Primer Plus 第6版 中文版', 'C++程序设计经典教程,畅销30年的C++大百科全书全新升级,经典C++入门教程十年新版再现\')');
INSERT INTO `tbl_book` VALUES (10003, '程序设计', 'RocketMQ技术内幕:RocketMQ架构设计与实现原理(第2版)', '畅销书升级,RocketMQ创始人高度评价,深入源码分析技术架构和实现原理,打造高性能、高可用、高吞吐量、低延迟RocketMQ');
INSERT INTO `tbl_book` VALUES (10004, '程序设计', ' 深入理解Java虚拟机:JVM高级特性与实践(第3版)', '周志明虚拟机新作,第3版新增内容近50%,5个维度全面剖析JVM,大厂面试知识点全覆盖。与 Java编程思想、Effective Java、Java核心技术 堪称:Java四大名著');
INSERT INTO `tbl_book` VALUES (10005, '历史', '见识城邦·人类简史:从动物到上帝(新版)', '以色列新锐历史学家尤瓦尔·赫拉利代表作,第十届文津图书奖获奖作品');
INSERT INTO `tbl_book` VALUES (10006, '历史', '中国通史', '吕思勉先生写给普通读者的中国通史入门书,用白话文写成的中国通史,把历史从“帝王的家谱”转变为人类的进化史');
INSERT INTO `tbl_book` VALUES (10007, '哲学', '理想国(柏拉图代表作)', '奠定西方哲学史的源流之作。2021新译本,以斯灵斯校勘本为底本,遵照“字对字”的原则,从古希腊原文直译,兼顾准确性和语言通顺性,助你读懂理想国。');
INSERT INTO `tbl_book` VALUES (10008, '哲学', '苏格拉底的申辩', '《柏拉图注疏集:苏格拉底的申辩》记述的是公元前399年,一个叫莫勒图斯的年轻人在雅典状告哲学家苏格拉底,说他不信城邦诸神,引进新的精灵之事,败坏青年。 于是,苏格拉底被传讯,在500人组成的陪审团面前作了著名的申辩。');
INSERT INTO `tbl_book` VALUES (10009, '文学', '鲁迅全集', '大师全集,完整收录,鲁迅毕生之心血尽归于此。\r\n\r\n  鲁迅是中国20世纪的文学家、思想家、革命家,中国近代文学巨匠。他早年留学于日本,后来弃医从文,他用笔耕不辍的文字为新一代青年们指引方向,在国内外思想文化领域有着极高的声誉。');
INSERT INTO `tbl_book` VALUES (10010, '文学', '人间清醒', '茅盾文学奖获得者梁晓声2021全新力作');
INSERT INTO `tbl_book` VALUES (10011, '经济', '八次危机:中国的真实经验1949-2009', '著名“三农”专家温铁军,用经济的独特视角,重新审视中国的1949-2009,历史给我了我们怎样的真实经验?');

2、项目目录

 3、pom文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.1.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.example</groupId><artifactId>springboot</artifactId><version>0.0.1-SNAPSHOT</version><name>springboot</name><description>Demo project for Spring Boot</description><properties><java.version>8</java.version></properties><dependencies><!--web--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--mysql-connector--><!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.20</version></dependency><!--lombok--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!--mybatis-plus--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.1.1</version></dependency><!--druid--><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>1.2.6</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><excludes><exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></exclude></excludes></configuration></plugin></plugins></build></project>

4、application文件

spring:datasource:druid:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/myproject?serverTimezone=UTCusername: rootpassword: root
mybatis-plus:global-config:db-config:table-prefix: tbl_id-type: autoconfiguration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl  #开启MP运行日志信息

5、PO类以及VO类

package com.example.po;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@AllArgsConstructor
@NoArgsConstructor
public class Book {private Integer id;private String type;private String name;private String description;
}
package com.example.vo;
/*** 供页面显示使用的类*/import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;@Data
@AllArgsConstructor
@NoArgsConstructor
public class BookVo {private String type;private String name;private String description;
}

6、Dao层

package com.example.dao;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.po.Book;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Component;@Mapper
@Component
public interface BookDao extends BaseMapper<Book> {
}

7、service以及实现类

package com.example.service;import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.example.po.Book;/*** 基于 mybatisplus 实现CRUD快速开发*/
public interface IBookService extends IService<Book> {IPage<Book> getPage(Integer currentPage,Integer pageSize);IPage<Book> getPage(Integer currentPage,Integer pageSize,Book book);
}
package com.example.service.impl;import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.dao.BookDao;
import com.example.po.Book;
import com.example.service.IBookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;@Service
public class IBookServiceImpl extends ServiceImpl<BookDao, Book> implements IBookService {@Autowiredprivate BookDao bookDao;@Overridepublic IPage<Book> getPage(Integer currentPage, Integer pageSize) {Page<Book> page = new Page<>(currentPage,pageSize);bookDao.selectPage(page,null);return page;}@Overridepublic IPage<Book> getPage(Integer currentPage, Integer pageSize, Book book) {LambdaQueryWrapper<Book> queryWrapper = new LambdaQueryWrapper<Book>();queryWrapper.like(!StringUtils.isEmpty(book.getType()),Book::getType,book.getType());queryWrapper.like(!StringUtils.isEmpty(book.getName()),Book::getName,book.getName());queryWrapper.like(!StringUtils.isEmpty(book.getDescription()),Book::getDescription,book.getDescription());Page<Book> page = new Page<>(currentPage,pageSize);bookDao.selectPage(page,queryWrapper);return page;}
}

8、controller层

package com.example.controller;import com.baomidou.mybatisplus.core.metadata.IPage;
import com.example.global.PlatErrorCodeEnum;
import com.example.po.Book;
import com.example.global.Response;
import com.example.global.ResponseBuilder;
import com.example.service.IBookService;
import com.example.vo.BookVo;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.List;
import java.util.stream.Collectors;@RestController
@RequestMapping("/books")
public class BookController {@Autowiredprivate IBookService bookService;//查询所有数据@GetMappingpublic Response<List<BookVo>> getBooks(){List<BookVo> bookList = bookService.list().stream().map(po -> {BookVo vo = new BookVo();//将两个字段相同的对象进行属性值的复制BeanUtils.copyProperties(po, vo);return vo;}).collect(Collectors.toList());return ResponseBuilder.buildNormalResponse(bookList);}//添加数据@PostMapping("/save")public Response<Boolean> saveBook(@RequestBody Book book){Boolean flag = bookService.save(book);return flag == true ? ResponseBuilder.buildNormalResponse() : ResponseBuilder.buildErrorResponse(PlatErrorCodeEnum.ADD_DATA_FAILED);}@PutMapping("/update")public Response<Boolean> updateBook(@RequestBody Book book){boolean flag = bookService.updateById(book);return flag == true ? ResponseBuilder.buildNormalResponse() : ResponseBuilder.buildErrorResponse(PlatErrorCodeEnum.UPDATE_DATA_FAILED);}//查询单个数据@GetMapping("{id}")public Response<BookVo> getBookById(@PathVariable Integer id){Book book = bookService.getById(id);BookVo vo = new BookVo();BeanUtils.copyProperties(book,vo);return ResponseBuilder.buildNormalResponse(vo);}//删除单个数据@DeleteMapping("{id}")public Response<Boolean> deleteBook(@PathVariable Integer id){boolean flag = bookService.removeById(id);return flag == true ? ResponseBuilder.buildNormalResponse() : ResponseBuilder.buildErrorResponse(PlatErrorCodeEnum.DELETE_DATA_FAILED);}//分页查询数据@GetMapping("{currentPage}/{pageSize}")public Response<List<BookVo>> getBooksByPage(@PathVariable Integer currentPage,@PathVariable Integer pageSize){IPage<Book> page = bookService.getPage(currentPage,pageSize);//避免查出来所有的数据,增加一个vo类,只展示需要的字段List<BookVo> bookVos = page.getRecords().stream().map(po -> {BookVo vo = new BookVo();//将两个字段相同的对象进行属性值的复制BeanUtils.copyProperties(po, vo);return vo;}).collect(Collectors.toList());return ResponseBuilder.buildNormalResponse(bookVos);}}

9、为了给前端返回统一的值,再加一些优化

package com.example.global;public enum PlatErrorCodeEnum {ADD_DATA_FAILED("10000", "添加数据失败"),UPDATE_DATA_FAILED("10001", "更新数据失败"),DELETE_DATA_FAILED("10001", "删除数据失败"),;public static final String ERROR_CODE="000";private String code;private String message;PlatErrorCodeEnum(String code, String message) {this.code = code;this.message = message;}public String getCode() {return code;}public String getMessage() {return message;}}
package com.example.global;import lombok.Data;
import lombok.ToString;import java.io.Serializable;@Data
@ToString(callSuper = true)
public class Response<T> implements Serializable {private static final long serialVersionUID = -2644259941898334897L;private String returnCode;private String returnMsg;private T returnData;public Response(){}public Response(String returnCode){this.returnCode = returnCode;}public Response(String returnCode, String returnMsg){this.returnCode = returnCode;this.returnMsg = returnMsg;}public Response(String returnCode, String returnMsg, T returnData){this.returnCode = returnCode;this.returnMsg = returnMsg;this.returnData = returnData;}public T getReturnData() {return returnData;}public Response<T> setReturnData(T returnData) {this.returnData = returnData;return this;}
}
package com.example.global;/*** 构造响应结果*/
public final class ResponseBuilder {/*** 返回成功.*/public static final String RESPONSE_OK = "0000";public static final String RESPONSE_MESSAGE = "响应成功";/*** 构造一个失败响应*/public static <T> Response<T> buildErrorResponse(PlatErrorCodeEnum enums) {Response<T> entity = new Response<>();entity.setReturnCode(String.valueOf(enums.getCode()));entity.setReturnMsg(enums.getMessage());return entity;}/*** 构造一个失败响应*/public static <T> Response<T> buildErrorResponse(String error, String message) {Response<T> entity = new Response<>();entity.setReturnCode(error);entity.setReturnMsg(message);return entity;}/*** 构造一个正常的没有返回数据的响应*/public static <T> Response<T> buildNormalResponse() {return new Response<T>(RESPONSE_OK, RESPONSE_MESSAGE);}/*** 构造一个正常的有返回数据的响应* @param returnData* @param <T>* @return*/public static <T> Response<T> buildNormalResponse(T returnData) {Response<T> entity = buildNormalResponse();entity.setReturnData(returnData);return entity;}}

10、mybatisplus分页插件配置

package com.example.config;/*** 配置mybatisplus分页插件*/import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
@MapperScan("com.example.dao")
public class MyBatisPlusConf {@Beanpublic PaginationInterceptor mybatisPlusInterceptor(){//创建拦截器 SpringBoot 低版本用 PaginationInterceptor 高版本用 MybatisPlusInterceptorPaginationInterceptor interceptor = new PaginationInterceptor();return interceptor;}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/5435.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Binder系列--获取ServiceManager

获取ServiceManager hongxi.zhu 2023-7-1 以SurfaceFlinger为例&#xff0c;分析客户端进程如何获取ServiceManager代理服务对象 主要流程 SurfaceFlinger中获取SM服务 frameworks/native/services/surfaceflinger/main_surfaceflinger.cpp // publish surface flingersp<…

进制转换(十进制与十六进制互转)

之前的一家公司基本上都是基于单片机进行开发&#xff0c;一般与上位机的通信都是按照自定义的协议进行操作&#xff0c;测试的时候会经常都对协议进行修改并且涉及到进制之间的转换&#xff0c;例如获取版本是十六进制的需要转换成十进制的版本信息&#xff0c;例如修改时间需…

主流特征工程平台(一)

一. 目标 对于Feature Store的能力与边界&#xff0c;每家的定义略微不同&#xff0c;《Feature Stores - A Hierarchy of Needs》&#xff09;这篇文章做了很好的总结&#xff0c;大体分为如下几个层次&#xff1a; 特征管理&#xff1a;特征抽取、处理、存储、元数据管理&am…

【复杂网络建模】——使用PyTorch和DGL库实现图神经网络进行链路预测

&#x1f935;‍♂️ 个人主页&#xff1a;Lingxw_w的个人主页 ✍&#x1f3fb;作者简介&#xff1a;计算机科学与技术研究生在读 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4a…

05-Redis初步使用

关系型数据的ACID特性:事务的四大特性:原子性,一致性,隔离性,持久性 关系型数据库应对的三高问题:高并发,高效率,高扩展 关系型数据库和非关系型数据库 关系型数据库的数据存储在表中,无法应对陡增的数据 非关系型数据库使用键值对的方式进行存储数据:redis可以用作缓存 r…

【运维工程师学习二】OS系统管理

【运维工程师学习二】OS系统管理 1、操作系统管理2、进程管理3、进程的启动4、进程信息的查看4.1、STAT 进程的状态&#xff1a;进程状态使用字符表示的&#xff08;STAT的状态码&#xff09;,其状态码对应的含义&#xff1a;4.2、ps命令常用用法&#xff08;方便查看系统进程&…

go语言环境安装

文章目录 环境介绍安装软件包步骤环境变量设置来一个经典的hello worldNice 最近的项目需要用到go来开发了&#xff0c;前几天就已经在看书了&#xff0c;今天是个周末&#xff0c;先在家里的机器上把环境搭好&#xff0c;特此记录一下。 环境介绍 下载地址&#xff1a;https:…

oracle 过滤字段中的中文,不再洋不洋土不土

目录 前言&#xff1a; 一、知己知彼 1.1业务场景 1.2错误案例 二、思路整理 2.1存储长度与字符串长度比较 三、还有没有其他思路 3.1ascii表查找法 3.2正式案例 四、总结 前言&#xff1a; 随着数字化建设的不断深入&#xff0c;企业越来越注重&#xff0c;企业数据治理&am…

算法笔记——排序算法

&#x1f44c;&#xff0c;begin&#xff1a; 排序算法很重要&#xff0c;它可以使数据按照一定的规律进行排序&#xff0c;各个语言的代码都有自己的排序函数&#xff0c;那么排序到底有哪几种方法&#xff0c;✌&#xff0c;如下&#xff1a; 按照效率分类如上图&#xff1a…

【Spring】设计思想

一、Spring 是什么&#xff1f; Spring是一个开源的Java框架&#xff0c;有着活跃而庞大的社区&#xff08;例如&#xff1a;Apache&#xff09;&#xff0c;Spring 提供了一系列的工具和库&#xff0c;可以帮助开发者构建高效、可靠、易于维护的企业级应用程序。Spring的核心…

短信压力测试系统,支持自定义接口

短信压力测试系统,支持自定义接口 支持卡密充值&#xff0c;短信压力测试系统&#xff0c;解决一切骚扰电话&#xff0c;教程在压缩包里面 可多个服务器挂脚本分担压力&#xff0c;套了cdn导致无法正常执行脚本可以尝试添加白名单 这边建议使用MySQL方式 同服务器下直接配置…

lesson 12 Zigbee绑定通信

目录 Zigbee绑定通信 通信原理 实验过程 实现步骤 实验现象 实验分析 Zigbee绑定通信 通信原理 1、Zigbee一共有五种通信方式&#xff1a;单播、广播、组播、MAC、广播 2、绑定是Zigbee的一种基本通信方式&#xff0c;具体绑定通信又分为三种模式&#xff0c;模式大同…