Mybatis-Plus 实现增删改查 -- Mybatis-Plus 快速入门保姆级教程(一)

简介: Mybatis-Plus 实现增删改查 -- Mybatis-Plus 快速入门保姆级教程(一)

前言

为了巩固所学的知识,作者尝试着开始发布一些学习笔记类的博客,方便日后回顾。当然,如果能帮到一些萌新进行新技术的学习那也是极好的。作者菜菜一枚,文章中如果有记录错误,欢迎读者朋友们批评指正。

(博客的参考源码可以在我主页的资源里找到,如果在学习的过程中有什么疑问欢迎大家在评论区向我提出)


一、MyBatis-Plus是什么?

1.MyBatis-plus简介

MyBatis-Plus (opens new window)(简称 MP)是一个 MyBatis (opens new window) 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

2.MyBatis-plus特性

  • 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
  • 损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作
  • 强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求
  • 支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错
  • 支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题
  • 支持 ActiveRecord 模式:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操作
  • 支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )
  • 内置代码生成器:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用
  • 内置分页插件:基于 MyBatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通 List 查询分页插件支持多种数据库:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer 等多种数据库
  • 内置性能分析插件:可输出 SQL 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询
  • 内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,也可自定义拦截规则,预防误操作

二、MyBatis-Plus入门案例(数据库连接与MP接口调用)

1.设计并编写数据库表

代码如下(示例):

Drop database if EXISTS mybatisplus_db;
CREATE SCHEMA `mybatisplus_db` DEFAULT CHARACTER SET utf8mb4;
use `mybatisplus_db`;
-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`  (
  `id` int(11) NOT NULL,
  `name` varchar(20),
  `password` varchar(50) ,
  `age` int(10) ,
  `tel` varchar(255) ,
  PRIMARY KEY (`id`) 
);
-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES (1, 'tom', 'tom', 3 , '188666888');
INSERT INTO `user` VALUES (2, 'jerry', 'jerry',  4 , '166888666');
INSERT INTO `user` VALUES (3, 'jock', '123456',  41 , '400618400');
INSERT INTO `user` VALUES (4, '传智播客', 'itcast', 23 , '400617500');

效果如下:

2.创建springboot工程并勾选相关依赖

(此处只是示例,具体命名根据自己情况决定,操作步骤如图)

3.手动导入相关坐标

  1. 在pom.xml文件中导入mybatis-plus的起步依赖
<dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.1</version>
        </dependency>
  1. 导入druid数据源坐标
<dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.16</version>
        </dependency>

4.编写数据库配置文件application.yml

(数据库名称以及用户名密码要用自己的)

spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    driver-class-name: com.mysql.cj.jdbc.Driver
    //数据库名称示例:mybatisplus_db
    url: jdbc:mysql://localhost:3306/mybatisplus_db?serverTimezone=UTC
    //用户名示例:root
    username: root
    //用户密码示例:root
    password: root

5.编写数据层功能

(一定要注意文件之间的层级关系,搞错了可能导致无法自动装配bean等问题)

  1. 创建名称为domain的包,用于封装数据,根据设计的数据库表在doamin包下创建编辑名称为user的实体类
//lombok
//@Data 注解的主要作用是提高代码的简洁,
// 使用这个注解可以省去代码中大量的get()、 set()、 toString()等方法(这些通用方法可以一键生成);
//要使用 @Data 注解要先引入lombok,它是一个工具类库,可以用简单的注解形式来简化代码,提高开发效率。
@Data
public class User {
    private Long id;
    private String name;
    private String password;
    private Integer age;
    private String tel;
}
  1. 创建名称为dao的包,用于编写数据层接口,并创建名称为UserDao的接口
//继承BaseMapper接口,泛型填写实体类名称
@Mapper
public interface UserDao extends BaseMapper<User> {
}
  1. 编写测试类

@SpringBootTest
class DlMpApplicationTests {
    //将Userdao接口装配bean到IOC容器
    @Autowired
    private UserDao userDao;
    //查询全部
    @Test
    void testGetAll() {
        List<User> userList = userDao.selectList(null);
        System.out.println(userList);
    }
}
  1. 测试类运行结果

三、CRUD(增删改查)接口介绍

1.Mybatis-plus CRUD接口详细介绍

Mybatis-plus CRUD接口详细介绍

2.Service CRUD 与 Mapper CRUD的区别与联系

  • Service CRUD 返回的boolean的值,Mapper CRUD 返回的是int值
  • Mapper简化了单表的sql操作步骤(CRUD),而Serivce则是对Mapper的功能增强,比如Service 还提供了一些批量方法(批量插入、批量更新数据),这是 Mapper 没有的
  • 在运用CRUD上两者区别不大,Service以业务功能为主,更加复杂(底层)的SQL查询还是要靠Mapper去编写SQL语句
  • 为了避免混淆,Service 与 Mapper 的 CRUD 方法前缀有所区别:
  1. Mapper 的方法前缀是:select(查询)、insert(插入)、update(更新)、delete(删除)
  2. Service 的方法前缀是:get(查询单行)、list(查询集合)、page(分页查询)、save(插入)、update(更新)、remove(删除)

四、标准CRUD开发

(在入门案例的测试类上进行编码)

1.增(Mapper CRUD接口 insert() )

@Test
    void testSave(){
        User user = new User();
        user.setId(12L);
        user.setName("黑马程序员");
        user.setAge(12);
        user.setPassword("itheima");
        user.setTel("400418400");
        //实现增加操作的Mapper CRUD接口: int insert(T entity);
        userDao.insert(user);
    }

2.删(Mapper CRUD接口 deleteById() )

@Test
    void testDelete(){
        //实现删除操作的Mapper CRUD接口: int deleteById(Serializable id);
        userDao.deleteById(12L);
    }

3.改(Mapper CRUD接口 updateById() )

@Test
    void testUpdate(){
        User user = new User();
        user.setId(1L);
        user.setName("Tom666");
        user.setPassword("tom888");
        // 实现修改操作的Mapper CRUD接口: int updateById(@Param(Constants.ENTITY) T entity);;
        userDao.updateById(user);
    }

4.查全部(Mapper CRUD接口 selectList() )

(上面的入门案例做过)

@Test
    void testGetAll() {
        //实现了Mapper CRUD 的 selectList 接口,根据 entity 条件,查询全部记录
        //List<T> selectList(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper)
        List<User> userList = userDao.selectList(null);
        System.out.println(userList);
    }

5. 查单个(Mapper CRUD接口 selectById() )

@Test
    void testGetById(){
        // 实现了Mapper CRUD的selectById接口,根据 ID 查询
        // T selectById(Serializable id);
        User user = userDao.selectById(1L);
        System.out.println(user);
    }

6.分页查询(Mapper CRUD接口 selectPage() )

  1. 在src/main/java/com.example.dl_mp目录下创建名称为config的包并创建MpConfig类
  2. 编写Mpconfig类构建拦截器
@Configuration
public class MpConfig {
    @Bean
    public MybatisPlusInterceptor mpInterceptor(){
        //1.定义Mp拦截器
        MybatisPlusInterceptor mpInterceptor = new MybatisPlusInterceptor();
        //2.添加具体的拦截器
        mpInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());
        return mpInterceptor;
    }
}
  1. 在测试类编写分页查询代码
//分页查询
    //ctrl + H 查看类的继承关系
    //ctrl + 鼠标左键 查看源码
    //Alt + 7 查看类中的所有方法列表
    @Test
    void testGetPage(){
        //current : 1 代表当前查第几页,size : 2 代表每页有多少条
        IPage page = new Page(1, 2);
        // 实现Mapper CRUD中的selectPage接口,根据 entity 条件,查询全部记录(并翻页)
        //IPage<T> selectPage(IPage<T> page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
        userDao.selectPage(page, null);
        System.out.println("当前页码值:" + page.getCurrent());
        System.out.println("每页显示数:" + page.getSize());
        System.out.println("一共多少页:" + page.getPages());
        System.out.println("一共多少条数据:" + page.getTotal());
        System.out.println("数据:" + page.getRecords());
    }
  1. 测试方法运行结果

`博客内容借鉴了bilibili黑马程序员SSM课程资料,如有侵权,请联系作者删除`

总结

欢迎各位留言交流以及批评指正,如果文章对您有帮助或者觉得作者写的还不错可以点一下关注,点赞,收藏支持一下。


相关文章
|
5天前
|
SQL Java 数据库连接
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
MyBatis-Plus是一个MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。本文讲解了最新版MP的使用教程,包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段等核心功能。
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
|
15天前
|
SQL 缓存 Java
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
本文详细介绍了MyBatis的各种常见用法MyBatis多级缓存、逆向工程、分页插件 包括获取参数值和结果的各种情况、自定义映射resultMap、动态SQL
【详细实用のMyBatis教程】获取参数值和结果的各种情况、自定义映射、动态SQL、多级缓存、逆向工程、分页插件
|
22天前
|
SQL 存储 数据库
深入理解@TableField注解的使用-MybatisPlus教程
`@TableField`注解在MyBatis-Plus中是一个非常灵活和强大的工具,能够帮助开发者精细控制实体类与数据库表字段之间的映射关系。通过合理使用 `@TableField`注解,可以实现字段名称映射、自动填充、条件查询以及自定义类型处理等高级功能。这些功能在实际开发中,可以显著提高代码的可读性和维护性。如果需要进一步优化和管理你的MyBatis-Plus应用程
98 3
|
21天前
|
SQL Java 数据库连接
MyBatis-Plus快速入门:从安装到第一个Demo
本文将带你从零开始,快速入门 MyBatis-Plus。我们将首先介绍如何安装和配置 MyBatis-Plus,然后通过一个简单的示例演示如何使用它进行数据操作。无论你是 MyBatis 的新手还是希望提升开发效率的老手,本文都将为你提供清晰的指导和实用的技巧。
107 0
MyBatis-Plus快速入门:从安装到第一个Demo
|
1月前
|
前端开发 Java Apache
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
本文详细讲解了如何整合Apache Shiro与Spring Boot项目,包括数据库准备、项目配置、实体类、Mapper、Service、Controller的创建和配置,以及Shiro的配置和使用。
300 1
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
|
2月前
|
SQL XML Java
mybatis复习02,简单的增删改查,@Param注解多个参数,resultType与resultMap的区别,#{}预编译参数
文章介绍了MyBatis的简单增删改查操作,包括创建数据表、实体类、配置文件、Mapper接口及其XML文件,并解释了`#{}`预编译参数和`@Param`注解的使用。同时,还涵盖了resultType与resultMap的区别,并提供了完整的代码实例和测试用例。
mybatis复习02,简单的增删改查,@Param注解多个参数,resultType与resultMap的区别,#{}预编译参数
|
1月前
|
Java 数据库连接 mybatis
Springboot整合Mybatis,MybatisPlus源码分析,自动装配实现包扫描源码
该文档详细介绍了如何在Springboot Web项目中整合Mybatis,包括添加依赖、使用`@MapperScan`注解配置包扫描路径等步骤。若未使用`@MapperScan`,系统会自动扫描加了`@Mapper`注解的接口;若使用了`@MapperScan`,则按指定路径扫描。文档还深入分析了相关源码,解释了不同情况下的扫描逻辑与优先级,帮助理解Mybatis在Springboot项目中的自动配置机制。
129 0
Springboot整合Mybatis,MybatisPlus源码分析,自动装配实现包扫描源码
|
2月前
|
SQL XML Java
springboot整合mybatis-plus及mybatis-plus分页插件的使用
这篇文章介绍了如何在Spring Boot项目中整合MyBatis-Plus及其分页插件,包括依赖引入、配置文件编写、SQL表创建、Mapper层、Service层、Controller层的创建,以及分页插件的使用和数据展示HTML页面的编写。
springboot整合mybatis-plus及mybatis-plus分页插件的使用
|
2月前
|
SQL XML Java
mybatis :sqlmapconfig.xml配置 ++++Mapper XML 文件(sql/insert/delete/update/select)(增删改查)用法
当然,这些仅是MyBatis功能的初步介绍。MyBatis还提供了高级特性,如动态SQL、类型处理器、插件等,可以进一步提供对数据库交互的强大支持和灵活性。希望上述内容对您理解MyBatis的基本操作有所帮助。在实际使用中,您可能还需要根据具体的业务要求调整和优化SQL语句和配置。
44 1
|
1月前
|
Java 数据库连接 Maven
mybatis使用一:springboot整合mybatis、mybatis generator,使用逆向工程生成java代码。
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和MyBatis Generator,使用逆向工程来自动生成Java代码,包括实体类、Mapper文件和Example文件,以提高开发效率。
108 2
mybatis使用一:springboot整合mybatis、mybatis generator,使用逆向工程生成java代码。