1.简介
MyBatis-Plus (简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
1.1.特性
- 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
- 损耗小:启动即会自动注入基本 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 操作智能分析阻断,也可自定义拦截规则,预防误操作
1.2.支持数据库
任何能使用
mybatis
进行 CRUD, 并且支持标准 SQL 的数据库,具体支持情况如下,如果不在下列表查看分页部分教程 PR 您的支持。
- mysql,oracle,db2,h2,hsql,sqlite,postgresql,sqlserver,Phoenix,Gauss ,clickhouse,Sybase,OceanBase,Firebird,cubrid,goldilocks,csiidb
- 达梦数据库,虚谷数据库,人大金仓数据库,南大通用(华库)数据库,南大通用数据库,神通数据库,瀚高数据库
1.3.框架结构
2.快速上手
2.1.pom.xml导入MyBatis Plus依赖
1 | xml复制代码<dependency> |
2.2.在application.yml中配置数据源
1 | yaml复制代码# 配置数据源 |
2.3.根据数据库表创建实体类
1 | java复制代码@Data |
2.4.创建Mapper接口
1 | java复制代码//在对应的mapper上面继承基本的接口BaseMapper |
2.5.测试
启动类需要加 @MapperScan(“mapper所在的包”),否则无法加载mapper bean
1 | java复制代码@SpringBootTest |
那么我的sql 谁写的,方法又去哪了,其实都是mybatis plus。
3.配置日志
我们所有的sql现在是不可见的,我们希望知道他是怎么执行的,所以我们必须要看日志!
1 | yaml复制代码# 配置日志 |
4.CRUD
4.1.Service CRUD 接口
4.1.1.Save
1 | java复制代码// 插入一条记录(选择字段,策略插入) |
4.1.2.SaveOrUpdate
1 | java复制代码// TableId 注解存在更新记录,否插入一条记录 |
4.1.3.Remove
1 | java复制代码// 根据 entity 条件,删除记录 |
4.1.4.Update
1 | java复制代码// 根据 UpdateWrapper 条件,更新记录 需要设置sqlset |
4.1.5.Get
1 | java复制代码// 根据 ID 查询 |
4.1.6.List
1 | java复制代码// 查询所有 |
4.1.7.Page
1 | java复制代码// 无条件分页查询 |
4.1.8.Count
1 | java复制代码// 查询总记录数 |
4.1.9.Chain
query
1 | java复制代码// 链式查询 普通 |
update
1 | java复制代码// 链式更改 普通 |
4.2.Mapper CRUD 接口
4.2.1.Insert
1 | java复制代码// 插入一条记录 |
4.2.2.Delete
1 | java复制代码// 根据 entity 条件,删除记录 |
4.2.3.Update
1 | java复制代码// 根据 whereWrapper 条件,更新记录 |
4.2.4.Select
1 | java复制代码// 根据 ID 查询 |
案例
1 | java复制代码List<User> userList1 = user.selectList( |
分页
1 | java复制代码// 分页查询 10 条姓名为‘wyl’的用户记录 |
结合
1 | java复制代码// 分页查询 10 条姓名为‘wyl’、性别为男,且年龄在18至50之间的用户记录 |
4.3.mapper 层 选装件
AlwaysUpdateSomeColumnById
1 | java复制代码int alwaysUpdateSomeColumnById(T entity); |
insertBatchSomeColumn
1 | java复制代码int insertBatchSomeColumn(List<T> entityList); |
logicDeleteByIdWithFill
1 | java复制代码int logicDeleteByIdWithFill(T entity); |
4.4.条件构造器
十分重要:Wappper
我们写一些复杂的SQL就可以使用他来替代!
1、测试一,记住查看输出的SQL进行分析
1 | java复制代码@Test |
2、测试二,记住查看输出的SQL进行分析
1 | java复制代码@Test |
3、测试三
1 | java复制代码@Test |
4、测试四,记住查看输出的SQL进行分析
1 | java复制代码//模糊查询 |
5、测试五
1 | java复制代码@Test |
6、测试六
1 | java复制代码@Test |
5.代码生成器
dao、pojo、service、controller都给我自己去编写完成!
AutoGenerator 是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码,极大的提升了开发效率。
5.1.导入依赖
1 | xml复制代码<!-- 代码生成器依赖 --> |
5.2、启动类,任意一个main、@Test方法都行
1 | java复制代码package com.wyl.mybatisplus; |
以上两步即可完成生成代码功能!
启动类上扫描
1 | java复制代码@SpringBootApplication // 启动类 |
测试类上扫描
1 | java复制代码@SpringBootTest |
5.3.测试MVC
5.3.1.后端:controller.java
1 | java复制代码package com.wyl.mybatisplus.generator.controller; |
5.3.2.前端:html
记得放在templates下哦
index.html
1 | html复制代码<h1>Index Page...</h1> |
succuss.html
1 | html复制代码<!DOCTYPE html> |
前端用到thymeleaf模板引擎,需要配置application.yml
1 | yaml复制代码spring: |
6.MybatisX 快速开发插件
MybatisX 是一款基于 IDEA 的快速开发插件,为效率而生。
功能
XML跳转跳转
生成代码(需先在idea配置Database配置数据源)
重置模板生成代码
JPA提示
生成新增
生成查询
生成修改
生成删除
8.乐观锁
在面试过程中,我们经常会被问到乐观锁,悲观锁!这个其实非常简单!
原子引用!
乐观锁:顾名思义十分乐观,他总是认为不会出现问题,无论干什么不去上锁!如果出现了问题,再次更新值测试!
悲观锁:顾名思义十分悲观,他总是任务总是出现问题,无论干什么都会上锁!再去操作!
我们这里主要讲解,乐观锁机制!
乐观锁实现方式:
- 取出记录,获取当前version
- 更新时,带上这个version
- 执行更新时,set version = new version where version = oldversion
- 如果version不对,就更新失败
1 | sql复制代码乐观锁:1、先查询,获得版本号 version = 1 |
测试一下MP的乐观锁插件
1、给数据库中增加version字段!
1 | java复制代码//测试乐观锁成功! |
9.全局策略配置:
通过上面的小案例我们可以发现,实体类需要加@TableName注解指定数据库表名,通过@TableId注解指定id的增长策略。实体类少倒也无所谓,实体类一多的话也麻烦。所以可以在spring-dao.xml的文件中进行全局策略配置。
1 | xml复制代码<!-- 5、mybatisplus的全局策略配置 --> |
这里配置了还没用,还需要在sqlSessionFactory中注入配置才会生效。如下:
1 | xml复制代码<!-- 3、配置mybatisplus的sqlSessionFactory --> |
如此一来,实体类中的@TableName注解和@TableId注解就可以去掉了。
本文转载自: 掘金