mybatis plus 的一些使用

chatgpt/2023/9/27 6:19:05

简介

官网:http://mp.baomidou.com/
参考教程:https://baomidou.com/pages/24112f/
MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

特性

  • 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑。
  • 损耗小:启动即会自动注入基本 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 操作智能分析阻断,也可自定义拦截规则,预防误操作。

配置数据库环境

DROP TABLE IF EXISTS user;CREATE TABLE user
(id BIGINT(20) NOT NULL COMMENT '主键ID',name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',age INT(11) NULL DEFAULT NULL COMMENT '年龄',email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',PRIMARY KEY (id)
);INSERT INTO user (id, name, age, email) VALUES
(1, 'Jone', 18, 'test1@baomidou.com'),
(2, 'Jack', 20, 'test2@baomidou.com'),
(3, 'Tom', 28, 'test3@baomidou.com'),
(4, 'Sandy', 21, 'test4@baomidou.com'),
(5, 'Billie', 24, 'test5@baomidou.com');

springboot项目环境

1、使用 Spring Initializr 快速初始化一个 Spring Boot 工程

2、引入依赖

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope><exclusions><exclusion><groupId>org.junit.vintage</groupId><artifactId>junit-vintage-engine</artifactId></exclusion></exclusions></dependency><!--mybatis-plus--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.2</version></dependency><!--mysql--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><!--lombok用来简化实体类--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><scope>test</scope></dependency></dependencies>

3、添加 MySQL 数据库的相关配置

#mysql数据库连接
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis-plus?serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=zzybzb

4、在 Spring Boot 启动类中添加 @MapperScan 注解,扫描 Mapper 文件夹在这里插入图片描述

5、创建包 entity 编写实体类 User.java(此处使用了 Lombok 简化代码)在这里插入图片描述

6、创建包 mapper 编写Mapper 接口: UserMapper.java在这里插入图片描述

7、添加测试类,进行功能测试:

@SpringBootTest
@RunWith(SpringRunner.class)
public class MybatisPlusApplicationTests {@AutowiredUserMapper userMapper;/*** 查询所有数据*/@Testpublic void testList() {List<User> users = userMapper.selectList(null);users.forEach(System.out::println);}}

运行结果:

User(id=1, name=Jone, age=18, email=test1@baomidou.com)
User(id=2, name=Jack, age=20, email=test2@baomidou.com)
User(id=3, name=Tom, age=28, email=test3@baomidou.com)
User(id=4, name=Sandy, age=21, email=test4@baomidou.com)
User(id=5, name=Billie, age=24, email=test5@baomidou.com)

插入操作(insert)

    @Testpublic void testInsert(){User user = new User();user.setName("李四");user.setAge(18);user.setEmail("111110000@qq.com");int result = userMapper.insert(user);System.out.println(result); //影响的行数System.out.println(user); //id自动回填}

在这里插入图片描述

逻辑删除

配置类添加插件

    /*** 逻辑删除插件*/@Beanpublic ISqlInjector sqlInjector() {return new LogicSqlInjector();}

实体类添加注解:@TableLogic
在这里插入图片描述

直接使用
在这里插入图片描述

自动填充(自动生成创建时间和修改时间)

@Component
public class MyMetaObjectHandler implements MetaObjectHandler {/*** 新增的方法* @param metaObject*/@Overridepublic void insertFill(MetaObject metaObject) {//属性名称,不是字段名称this.setFieldValByName("gmtCreate", new Date(), metaObject);this.setFieldValByName("gmtModified", new Date(), metaObject);}/*** 修改的方法* @param metaObject*/@Overridepublic void updateFill(MetaObject metaObject) {this.setFieldValByName("gmtModified", new Date(), metaObject);}
}

字段添加注解

@TableField(fill = FieldFill.INSERT)
@TableField(fill = FieldFill.INSERT_UPDATE)

在这里插入图片描述

添加数据时可忽略时间字段
在这里插入图片描述

感觉写得不够好,具体看官网吧:https://baomidou.com/

结束!
hy:22


					感受生命中的每个瞬间,你会发现它们都是如此美好。

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

如若内容造成侵权/违法违规/事实不符,请联系郑州代理记账网进行投诉反馈,一经查实,立即删除!

相关文章

Vue3 复制到剪切板-简单版

添加包依赖 # "clipboard": "^2.0.11" yarn add clipboard 代码中使用 import ClipboardJS from "clipboard";const action: () > {ClipboardJS.copy("123");ClipboardJS.copy(123 "");// 必须是字符串 } 源码定义

热风梳C22.2 NO.3亚马逊加拿大审核标准

加拿大是目前亚马逊所有站点中&#xff0c;商业规模大、发展势头迅猛的站点之一。亚马逊加拿大站每月吸引近1600万访客。其优势在于在加拿大&#xff0c;目前平台的竞争较小&#xff0c;商家容易出单。既然加拿大站有这么多优势&#xff0c;那产品上架需要有哪些检测认证合规方…

使用ts封装axios时增加的一些类型判断

我在ts项目中使用axios时&#xff0c;遇到两个困惑 在定义接口时&#xff0c;写method选项没有提示&#xff0c;容易写错写拦截器时针对自己定义的一些配置选项没有提示或编译报错接口返回的数据没有类型提示 针对以上两三点做了以下封装 import axios from axios import ty…

C++ ——STL容器【list】模拟实现

代码仓库&#xff1a; list模拟实现 list源码 数据结构——双向链表 文章目录 &#x1f347;1. 节点结构体&#x1f348;2. list成员&#x1f349;3. 迭代器模板&#x1f34a;4. 迭代器&#x1f34b;5. 插入删除操作&#x1f34c;5.1 insert & erase&#x1f34c;5.2 push_…

17- C++ const和异常-5 (C++)

第六章 C对C的拓展2 6.1 const详解 6.1.1 const 修饰普通变量 被修饰的对象是只读的 const int a; //a的值是只读的 int const a; const int * p; 该语句表示指向整形常量的 指针&#xff0c;它指向的值不能修改。 int const * p; 该语句与b的含义相同&#xff0c;表…

C++基础篇(二)基本数组及示例

目录 一、一维数组1、定义和初始化2、访问和修改3、元素逆置和冒泡排序 二、二维数组&#xff08;用指针进行访问与修改&#xff09;1、定义和初始化2、访问与修改 三、更高维度的数组1、三维数组2、高维数组 一、一维数组 1、定义和初始化 在 C 中&#xff0c;可以使用下面的…

中国商飞:严控数字化研发安全,践行航空强国使命

随着中国商飞生产的国产大型飞机C919&#xff0c;圆满完成全球首次商业载客飞行&#xff0c;标志着我国向航空强国的目标更加迈进一步。中国商飞作为国家实施“大型飞机重大专项大型客机项目”的主体单位&#xff0c;坚定不移的推进“中国智造”战略与数字化发展战略&#xff0…

oracle建立自动增长字段

oracle数据库与其他的数据库不太一样&#xff0c;比如在mysql里自动增长只要设定“auto_increment”即可。可是在oracle里就没有这种配置了。以oracle11g为例&#xff0c;建立自动增长的字段。操作如下&#xff1a; --创建表 create table USERINFO ( ID NUMBER , …
推荐文章