MyBatis-Plus(一)

一、 MyBatis-Plus简介

1、简介

MyBatis-Plus (简称 MP)是一个 MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为 简化开发、提高效率而生。Mybatis-Plus提供了通用的Mapper和Service,可以在不编写任何SQL语句的前提下,快速的实现单表的增删改查(CURD),批量,逻辑删除,分页等操作。只要把MyBatis-Plus的特性到优秀插件,以及多数据源的配置进行详细讲解。

愿景

我们的愿景是成为 MyBatis 最好的搭档,就像魂斗罗中的 1P、2P ,基友搭配,效率翻倍。

2、特性

  无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑

  损耗小:启动即会自动注入基本 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 操作智能分析阻断,也可自定义拦截规则,预防 误操作

3、支持数据库

任何能使用MyBatis进行 CRUD, 并且支持标准 SQL 的数据库,具体支持情况如下

   MySQL ,Oracle , DB2 , H2 , HSQL ,SQLite , PostgreSQL ,SQLServer , Phoenix ,Gauss , ClickHouse ,Sybase ,OceanBase , Firebird ,Cubrid ,Goldilocks ,csiidb

  达梦数据库,虚谷数据库,人大金仓数据库,南大通用(华库)数据库,南大通用数据库,神通数据 库,瀚高数据库

4、框架结构

5、代码及文档地址

官方地址: http://mp.baomidou.com

代码发布地址:

Github: GitHub - baomidou/mybatis-plus: An powerful enhanced toolkit of MyBatis for simplify development

Gitee: mybatis-plus: mybatis 增强工具包,简化 CRUD 操作。 文档 http://baomidou.com低代码组件库 http://aizuda.com

文档发布地址: https://baomidou.com/pages/24112f

二、入门案例

1、开发环境

IDE: idea 2019.2

JDK:JDK8+

构建工具:  maven 3.5.4

MySQL版本:  MySQL 5.

Spring Boot:2.6.3

MyBatis-Plus:3.5.1

2、创建数据库及表

a>创建表

b>添加数据

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');

3、创建Spring Boot工程

a>初始化工程

CREATE DATABASE `mybatis_plus` /*!40100 DEFAULT CHARACTER SET utf8mb4 */; use `mybatis_plus`;

CREATE TABLE `user` (

`id` bigint(20) NOT NULL COMMENT '主键ID',

`name` varchar(30) DEFAULT NULL COMMENT '姓名 ',

`age` int(11) DEFAULT NULL COMMENT '年龄 ',

`email` varchar(50) DEFAULT NULL COMMENT '邮箱 ',

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

b>引入依赖

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');

3、创建Spring Boot工程

a>初始化工程

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

b>引入依赖

<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>

</dependency>

<dependency>

<groupId>com.baomidou</groupId>

<artifactId>mybatis-plus-boot-starter</artifactId>

<version>3.5.1</version>

</dependency>

<dependency>

<groupId>org.projectlombok</groupId>

<artifactId>lombok</artifactId>

<optional>true</optional>

</dependency>

<dependency>

<groupId>mysql</groupId>

<artifactId>mysql-connector-java</artifactId>

<scope>runtime</scope>

</dependency>

</dependencies>

c>idea中安装lombok插件

4、编写代码

a>配置application.yml

spring:

# 配置数据源信息

datasource:

# 配置数据源类型

type: com.zaxxer.hikari.HikariDataSource

# 配置连接数据库信息

driver-class-name: com.mysql.cj.jdbc.Driver

url: jdbc:mysql://localhost:3306/mybatis_plus?characterEncoding=utf- 8&useSSL=false

username: root

password: 123456

注意:

1、驱动类driver-class-name

spring boot 2.0(内置jdbc5驱动),驱动类使用:

driver-class-name: com.mysql.jdbc.Driver

spring boot 2.1及以上(内置jdbc8驱动),驱动类使用:

driver-class-name: com.mysql.cj.jdbc.Driver

否则运行测试用例的时候会有 WARN 信息

2、连接地址url

MySQL5.7版本的url:

jdbc:mysql://localhost:3306/mybatis_plus?characterEncoding=utf-8&useSSL=false

MySQL8.0版本的url:

jdbc:mysql://localhost:3306/mybatis_plus?

serverTimezone=GMT%2B8&characterEncoding=utf-8&useSSL=false

否则运行测试用例报告如下错误:

java.sql.SQLException: The server time zone value'Öйú±ê׼ʱ¼ä' is unrecognized or represents more

b>启动类

    在Spring Boot启动类中添加@MapperScan注解,扫描mapper包

@SpringBootApplication

@MapperScan("com.atguigu.mybatisplus.mapper")

public class MybatisplusApplication {

public static void main(String[] args) {

SpringApplication.run(MybatisplusApplication.class, args); }

}

c>添加实体

@Data //lombok注解

public class User {

private Long id;

private String name;

private Integer age;

private String email;

}

User类编译之后的结果:

d>添加mapper

BaseMapper是MyBatis-Plus提供的模板mapper,其中包含了基本的CRUD方法,泛型为操作的 实体类型

public interface UserMapper extends BaseMapper<User> {

}

e>测试

@SpringBootTest

public class MybatisPlusTest {

@Autowired

private UserMapper userMapper;

@Test

public void testSelectList(){

//selectList()根据MP内置的条件构造器查询一个list集合,null表示没有条件,即查询所有

userMapper.selectList(null).forEach(System.out::println);

}

}

结果:

注意:

IDEA在 userMapper 处报错,因为找不到注入的对象,因为类是动态创建的,但是程序可以正确 的执行。

为了避免报错,可以在mapper接口上添加 @Repository 注解

f>添加日志

在application.yml中配置日志输出

# 配置MyBatis日志

mybatis-plus:

configuration:

log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

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

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

相关文章

跟着AI 学AI开发二,本地部署自己的Chat GPT

这里要安装的是Open Web UI &#xff0c;用一张架构图说明AI 前端与后端的关系。 之前的Python 的方法已经做过多次介绍&#xff0c;这里不做赘述。 顺序&#xff1a;1&#xff0c;Ollama。 2&#xff0c;Docker。 3&#xff0c;Open WebUI。 Ollama 安装下载地址&#xff1…

204页PPT金税四期监管要求与最新政策及风险防范-培训课件

这份资料是关于金税四期监管要求、最新政策及风险防范的培训课件&#xff0c;包含204页PPT内容。核心内容涉及金税四期的发展历程、与金税三期的主要变化、指挥决策系统、税务风险预警指标、重点监控行为、税务稽查重点领域、避税方法及处罚、以及企业自查和税务风险管控原理。…

超声波流量计的原理及应用简介

一 概念 超声波流量计是利用超声波测量管道或导管中流体流速的装置。 它们由放置在管道或管道相对两侧的两个超声波换能器组成&#xff0c;它们发射和接收超声波。 二 技术路径 1.时差 (TT) 超声波技术 最常见的技术是传输时间测量。超声波穿过流体返回到相反的传感器&#…

线性规划中的几种逻辑表达式

线性规划中的几种逻辑表达式 注意&#xff1a; 摘录字刘博士的《数学建模与数学规划》&#xff0c; 以便用时可查。 实际上Gurobi API 中自身放啊变的逻辑表达式函数&#xff0c;下面列出自定义的实现方式。 1 逻辑与 如果 x 1 1 x_1 1 x1​1, x 2 1 x_2 1 x2​1, 那…

knife4j增强swagger

背景 swagger很好用&#xff0c;但是UI不够友好 导入maven依赖 使用maven-search在common模块中导入依赖 <!-- knife4j --><dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId&g…

iOS - 超好用的隐私清单修复脚本(持续更新)

文章目录 前言开发环境项目地址下载安装隐私访问报告隐私清单模板最后 前言 在早些时候&#xff0c;提交应用到App Store审核&#xff0c;大家应该都收到过类似这样的邮件&#xff1a; Although submission for App Store review was successful, you may want to correct th…

es使用knn向量检索中numCandidates和k应该如何配比更合适

在Elasticsearch&#xff08;ES&#xff09;中&#xff0c;KNN&#xff08;k-最近邻&#xff09;向量检索是一种高效的向量相似性搜索方法&#xff0c;广泛应用于推荐系统、图像搜索、自然语言处理等领域。在KNN检索中&#xff0c;k 和 numCandidates 是两个关键参数&#xff0…

记录一下自己对网络安全法的笔记

仅记录一下自己对网络安全法的笔记 文章来源&#xff08;https://www.cac.gov.cn/2016-11/07/c_1119867116_2.htm&#xff09;&#xff08;2016年11月7日第十二届全国人民代表大会常务委员会第二十四次会议通过&#xff09;该法自2017年6月1日起施行。《网络安全法》是我国第一…

mvc如何给action传递参数

步骤(常规方法) 新建一个控制器--LarsController.cs using Microsoft.AspNetCore.Mvc; namespace Blog.Controller; public class LarsController:Controller -----继承 {public IActionResult Index(){return View();} }获取id // program.cs中默认值是idpublic IAction…

Java爬虫️ 使用Jsoup库进行API请求有什么优势?

在Java的世界里&#xff0c;Jsoup库以其强大的HTML解析能力而闻名。它不仅仅是一个简单的解析器&#xff0c;更是一个功能齐全的工具箱&#xff0c;为开发者提供了从网页抓取到数据处理的一站式解决方案。本文将深入探讨使用Jsoup库进行API请求的优势&#xff0c;并提供代码示例…

NX二次开发通过内部函数获取面的面积MW_face_ask_area

获取动态库libmold.dll的路径 void TcharToChar(const TCHAR* tchar, char* _char) {int iLength; #if UNICODE//获取字节长度 iLength WideCharToMultiByte(CP_ACP, 0, tchar, -1, NULL, 0, NULL, NULL);//将tchar值赋给_char WideCharToMultiByte(CP_ACP, 0, tchar, -…

2024.12.19总结

今天跑了数据采集和端口扫描&#xff0c;对于容器化和虚拟机的概念不是很理解。然后是北向接口文档&#xff0c;在跟其他人交流时&#xff0c;问原理把我给问住了。在安全这块&#xff0c;要学的的东西很多&#xff0c;确实不是三五个月就能搞定的事。 如今&#xff0c;我要做…

同态加密算法详解及Python实现

目录 同态加密算法详解及Python实现第一部分:同态加密概述与原理1.1 什么是同态加密?同态加密的定义:1.2 同态加密的分类1.3 同态加密的优势与挑战优势挑战第二部分:常见同态加密算法及其应用场景2.1 RSA同态加密支持操作应用场景2.2 Paillier加密支持操作应用场景2.3 Gent…

【WRF教程第四期】WRF 初始化概述:以4.5版本为例

WRF 初始化&#xff08;WRF Initialization&#xff09; Building Initialization Programs编译方式 理想案例初始化&#xff08;Initialization for Idealized Cases&#xff09;理想化案例的输入可用的理想化案例 现实案例初始化&#xff08;Initialization for Real Data Ca…

测试工程师八股文04|计算机网络 和 其他

一、计算机网络 1、http和https的区别 HTTP和HTTPS是用于在互联网上传输数据的协议。它们都是应用层协议&#xff0c;建立在TCP/IP协议栈之上&#xff0c;用于客户端&#xff08;如浏览器&#xff09;和服务器之间的通信。 ①http和https的主要区别在于安全性。http是一种明…

Firewalld 防火墙全面解析与配置指南

在当今网络环境中,网络安全至关重要,而防火墙作为网络安全的关键防线,在Linux系统中扮演着极其重要的角色。本文将深入探讨Firewalld防火墙,涵盖其基础概念,优势特点,配置方法等多面内容,为您提供全面的Firewalld防火墙知识体系 一,Linux防火墙基础 (一) 防火墙内核…

【C++】inline函数(内联函数)

文章目录 前言一、宏函数的缺陷二、inline函数1.inline函数的展开规则2.inline的设计分析3.inline函数不建议声明和定义分离 前言 C程序频繁调用函数会使代码效率降低&#xff0c;因为创建函数栈帧需要消耗时间。于是C语言引入宏函数的概念&#xff0c;使用宏函数来替代一些功能…

.Net_比对Json文件是否一致

简介 该方法用于比较两个Json文件是否完全一致&#xff0c;仅考虑内容若两个文件中的内容只是顺序不一致&#xff0c;内容是一样的&#xff0c;那么也代表这两个文件是相等的 实现代码 调用 using CompareJsonFiles;Console.WriteLine(" 输入信息 ");Console.WriteL…

Android OpenGLES2.0开发(九):图片滤镜

“当你改变想法的时候&#xff0c;记得也要改变你的世界。”——诺曼文森特皮尔 Android OpenGLES开发&#xff1a;EGL环境搭建Android OpenGLES2.0开发&#xff08;一&#xff09;&#xff1a;艰难的开始Android OpenGLES2.0开发&#xff08;二&#xff09;&#xff1a;环境搭…

易语言OCR证件照文字识别

一.引言 文字识别&#xff0c;也称为光学字符识别&#xff08;Optical Character Recognition, OCR&#xff09;&#xff0c;是一种将不同形式的文档&#xff08;如扫描的纸质文档、PDF文件或数字相机拍摄的图片&#xff09;中的文字转换成可编辑和可搜索的数据的技术。随着技…