SpringBoot整合mybatis-plus 实现增删改查和分页查询
创始人
2024-04-01 14:35:24

SpringBoot整合mybatis-plus 实现增删改查和分页查询

    • 整体的运行图片:
  • 一、环境搭建:
    • 1、依赖
    • 2、application.yml文件
    • 3、数据库
  • 二、实体类:
  • 三、数据层开发——基础CRUD
  • 四、业务层开发——分页功能制作
    • 4.1分页配置类 configuration
    • 4.2service接口和serviceImpl
  • 五、controller表现层

我相信,每一个初学SpringBoot的人,就特别想实现一个接口,从数据库中查询出数据,进行增删改查。
SpringBoot各种整合,实现增删改查和分页查询

  • 整合JUnit
  • 整合MyBatis
  • 整合MyBatis-Plus
  • 整合Druid

其中分为以下部分:

  1. 实体类开发————使用Lombok快速制作实体类
  2. Dao开发————整合MyBatisPlus,制作数据层测试
  3. Service开发————基于MyBatisPlus进行增量开发,制作业务层测试类
  4. Controller开发————基于Restful开发,使用PostMan测试接口功能

整体的运行图片:

在文章中,我只写写到了后端代码。需要前后端所有代码,可以关注【码小胡】公众号。
gitee地址:https://gitee.com/CodingHu/SSMP.git

在这里插入图片描述

一、环境搭建:

创建module:

在这里插入图片描述

在这里插入图片描述

1、依赖

 com.baomidoumybatis-plus-boot-starter3.4.3com.alibabadruid-spring-boot-starter1.2.6org.projectlomboklombokorg.springframework.bootspring-boot-starter-webmysqlmysql-connector-javaruntimeorg.springframework.bootspring-boot-starter-testtest

2、application.yml文件

server:port: 80spring:datasource:druid:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/ssm_db?serverTimezone=UTCusername: rootpassword: rootmybatis-plus:global-config:db-config:table-prefix: tbl_  #设置表名通用前缀id-type: auto #mybatis默认id生成策略是雪花算法。#设置主键id字段的生成策略为参照数据库设定的策略,当前数据库设置id生成策略为自增configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl# 在控制台上面输出日志

3、数据库

-- ----------------------------
-- Table structure for tbl_book
-- ----------------------------
DROP TABLE IF EXISTS `tbl_book`;
CREATE TABLE `tbl_book`  (`id` int(11) NOT NULL AUTO_INCREMENT,`type` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`description` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 51 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Records of tbl_book
-- ----------------------------
INSERT INTO `tbl_book` VALUES (1, '计算机理论', 'Spring实战 第5版', 'Spring入门经典教程,深入理解Spring原理技术内幕');
INSERT INTO `tbl_book` VALUES (2, '计算机理论', 'Spring 5核心原理与30个类手写实战', '十年沉淀之作,手写Spring精华思想');
INSERT INTO `tbl_book` VALUES (3, '计算机理论', 'Spring 5 设计模式', '深入Spring源码剖析Spring源码中蕴含的10大设计模式');
INSERT INTO `tbl_book` VALUES (4, '计算机理论', 'Spring MVC+MyBatis开发从入门到项目实战', '全方位解析面向Web应用的轻量级框架,带你成为Spring MVC开发高手');
INSERT INTO `tbl_book` VALUES (5, '计算机理论', '轻量级Java Web企业应用实战', '源码级剖析Spring框架,适合已掌握Java基础的读者');
INSERT INTO `tbl_book` VALUES (6, '计算机理论', 'Java核心技术 卷I 基础知识(原书第11版)', 'Core Java 第11版,Jolt大奖获奖作品,针对Java SE9、10、11全面更新');
INSERT INTO `tbl_book` VALUES (7, '计算机理论', '深入理解Java虚拟机', '5个维度全面剖析JVM,大厂面试知识点全覆盖');
INSERT INTO `tbl_book` VALUES (8, '计算机理论', 'Java编程思想(第4版)', 'Java学习必读经典,殿堂级著作!赢得了全球程序员的广泛赞誉');
INSERT INTO `tbl_book` VALUES (9, '计算机理论', '零基础学Java(全彩版)', '零基础自学编程的入门图书,由浅入深,详解Java语言的编程思想和核心技术');
INSERT INTO `tbl_book` VALUES (10, '市场营销', '直播就该这么做:主播高效沟通实战指南', '李子柒、李佳琦、薇娅成长为网红的秘密都在书中');
INSERT INTO `tbl_book` VALUES (11, '市场营销', '直播销讲实战一本通', '和秋叶一起学系列网络营销书籍');
INSERT INTO `tbl_book` VALUES (12, '市场营销', '直播带货:淘宝、天猫直播从新手到高手', '一本教你如何玩转直播的书,10堂课轻松实现带货月入3W+');

二、实体类:

​ 实体类的开发可以自动通过工具手工生成get/set方法,然后覆盖toString()方法,方便调试,等等。不过这一套操作书写很繁琐,有对应的工具可以帮助我们简化开发,介绍一个小工具,lombok。

​ Lombok,一个Java类库,提供了一组注解,简化POJO实体类开发,SpringBoot目前默认集成了lombok技术,并提供了对应的版本控制,所以只需要提供对应的坐标即可,在pom.xml中添加lombok的坐标。

package com.bigtree.domain;import lombok.Data;
import org.springframework.stereotype.Component;@Data  //通过lombok自动写好了set/get/tostring方法
@Component
public class Book {private Integer id;private String type;private String name;private String description;
}

三、数据层开发——基础CRUD

​ 数据层开发本次使用MyBatisPlus技术。单表的增删改查都不需要写语句

package com.bigtree.dao;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.bigtree.domain.Book;
import org.apache.ibatis.annotations.Mapper;// 这是一个Mapper数据层,继承了mp写好的单表增删改查语句
@Mapper
public interface BookDao extends BaseMapper {}

有的同学该疑问了在这里插入图片描述
select语句不写就算了, 表名呢??? mybatis-plus怎么知道我访问的是那个表呢??

其实在application.yml表中,添加了表前缀,表名是来自实体类mapper.Book

mybatis-plus:global-config:db-config:table-prefix: tbl_  # 配置 表前缀

这样拼装起来,就是表名:tbl.book

四、业务层开发——分页功能制作

其中selectPage方法需要传入一个封装分页数据的对象,可以通过new的形式创建这个对象,当然这个对象也是MP提供的,别选错包了。创建此对象时就需要指定分页的两个基本数据

  • 当前显示第几页
  • 每页显示几条数据

4.1分页配置类 configuration

基础操作中有查询全部的功能,而在这个基础上只需要升级一下(PLUS)就可以得到分页操作。所以MP将分页操作做成了一个开关,你用分页功能就把开关开启,不用就不需要开启这个开关。而我们现在没有开启这个开关,所以分页操作是没有的。这个开关是通过MP的拦截器的形式存在的

package com.bigtree.configuration;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;@Configuration
public class MPConfig {@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor(){MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();interceptor.addInnerInterceptor(new PaginationInnerInterceptor());return interceptor;}
}

4.2service接口和serviceImpl

service接口

@Service
public interface BookServiceMy extends IService {public IPage getPage(int currentPage, int pageSize);public IPage getPage(int currentPage, int pageSize,Book book);}

serviceImpl实现接口

/*
* 这个是service业务层的实现类,那么就需要implements实现service类接口
* 该类继承my框架写好的ServiceImpl接口即可,那也就不需要重写自带的实现类的方法。
*
* 如果service接口有自己写的方法,那么该类需要实现接口中的方法。
* */@Service
public class BookServiceMyImpl extends ServiceImpl implements BookServiceMy {@Autowiredprivate BookDao bookDao;// 查询所有的分页	@Overridepublic IPage getPage(int currentPage, int pageSize) {IPage page =new Page(currentPage,pageSize);bookDao.selectPage(page,null);return page;}// 先模糊查询,然后在分页。那么返回到浏览器里面,肯定是页的形式返回@Overridepublic IPage getPage(int currentPage, int pageSize, Book book) {LambdaQueryWrapper lqw = new LambdaQueryWrapper<>();lqw.like(Strings.isNotEmpty(book.getType()),Book::getType,book.getType());lqw.like(Strings.isNotEmpty(book.getName()),Book::getName,book.getName());lqw.like(Strings.isNotEmpty(book.getDescription()),Book::getDescription,book.getDescription());//如果得到的数据不为空,那么执行模糊查询,where book:getName like %book.getName%//分页IPage page =new Page(currentPage,pageSize);bookDao.selectPage(page,lqw);return page;}
}

五、controller表现层

表现层的开发使用基于Restful的表现层接口开发,功能测试通过Postman工具进行

@RequestMapping("/books")
public class BookController {//查询一条数据@GetMapping("/{id}")public Book getId(@PathVariable Integer id){return bookServiceMy.getById(id);}//自动注入service层@Autowiredprivate BookServiceMy bookServiceMy;//获取数据用get.查询所有的数据@GetMapping()public List getAll(){return bookServiceMy.list();}//新增一条数据,用post@PostMapping()public boolean insert(@RequestBody Book book){return bookServiceMy.save(book);}//根据Id更改数据:用put@PutMapping()public boolean update(@RequestBody Book book){return bookServiceMy.updateById(book);}//根据id删除数据,用delete@DeleteMapping("/{id}")  //根据路径传参public boolean delete(@PathVariable Integer id){return bookServiceMy.removeById(id);}//分页查询语句@GetMapping("/{currentPage}/{pageSize}")public IPage getPage(@PathVariable int currentPage, @PathVariable int pageSize){return bookServiceMy.getPage(currentPage,pageSize);}
}

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...