MyBatis-Plus

一、MyBatis-Plus简介
1、简介
2、特性
3、支持数据库
4、框架结构
5、代码及文档地址
二、入门案例
1、开发环境
2、创建数据库及表
a>创建表
b>添加数据
3、创建Spring Boot工程
a>初始化工程
b>引入依赖
c>idea中安装lombok插件
4、编写代码
a>配置application.yml
注意:
b>启动类
c>添加实体
d>添加mapper
e>测试
结果:
注意:
f>添加日志
三、基本CRUD
1、BaseMapper
2、插入
3、删除
a>通过id删除记录
b>通过id批量删除记录
c>通过map条件删除记录
4、修改
5、查询
a>根据id查询用户信息
b>根据多个id查询多个用户信息
c>通过map条件查询用户信息
d>查询所有数据
6、通用Service
a>IService
b>创建Service接口和实现类
c>测试查询记录数
d>测试批量插入
四、常用注解
1、@TableName
a>问题
b>通过@TableName解决问题
c>通过全局配置解决问题
2、@TableId
a>问题
b>通过@TableId解决问题
c>@TableId的value属性
d>@TableId的type属性
常用的主键策略:
配置全局主键策略:
更多Java –大数据 – 前端 – UI/UE - Android - 人工智能资料下载,可访问百度:尚硅谷官网(www.atguigu.com)e>雪花算法
3、@TableField
a>情况1
b>情况2
4、@TableLogic
a>逻辑删除
b>实现逻辑删除
五、条件构造器和常用接口
1、wapper介绍
2、QueryWrapper
a>例1:组装查询条件
b>例2:组装排序条件
c>例3:组装删除条件
d>例4:条件的优先级
e>例5:组装select子句
f>例6:实现子查询
3、UpdateWrapper
4、condition
思路一:
思路二:
5、LambdaQueryWrapper
6、LambdaUpdateWrapper
六、插件
1、分页插件
a>添加配置类
b>测试
2、xml自定义分页
a>UserMapper中定义接口方法
b>UserMapper.xml中编写SQL
c>测试
3、乐观锁
a>场景
b>乐观锁与悲观锁
c>模拟修改冲突
数据库中增加商品表
添加数据
添加实体
添加mapper
测试
d>乐观锁实现流程
e>Mybatis-Plus实现乐观锁
修改实体类
添加乐观锁插件配置
测试修改冲突
优化流程
七、通用枚举
a>数据库表添加字段sex
b>创建通用枚举类型
c>配置扫描通用枚举
d>测试
八、代码生成器
1、引入依赖
2、快速生成
九、多数据源
1、创建数据库及表
2、引入依赖
3、配置多数据源
4、创建用户service
更多Java –大数据 – 前端 – UI/UE - Android - 人工智能资料下载,可访问百度:尚硅谷官网(www.atguigu.com)5、创建商品service
6、测试
十、MyBatisX插件
一、MyBatis-Plus简介
1、简介
MyBatis-Plus(简称 MP)是一个 MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为
简化开发、提高效率而生。
愿景
我们的愿景是成为 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 操作智能分析阻断,也可自定义拦截规则,预防
误操作
更多Java –大数据 – 前端 – UI/UE - Android - 人工智能资料下载,可访问百度:尚硅谷官网(www.atguigu.com)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: https://github.com/baomidou/mybatis-plus
Gitee: https://gitee.com/baomidou/mybatis-plus
文档发布地址: https://baomidou.com/pages/24112f
二、入门案例
1、开发环境
IDE:idea 2019.2
JDK:JDK8+
构建工具:maven 3.5.4
MySQL版本:MySQL 5.7
更多Java –大数据 – 前端 – UI/UE - Android - 人工智能资料下载,可访问百度:尚硅谷官网(www.atguigu.com)Spring Boot:2.6.3
MyBatis-Plus:3.5.1
2、创建数据库及表
a>创建表
b>添加数据
3、创建Spring Boot工程
a>初始化工程
使用 Spring Initializr 快速初始化一个 Spring Boot 工程
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;
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’);
更多Java –大数据 – 前端 – UI/UE - Android - 人工智能资料下载,可访问百度:尚硅谷官网(www.atguigu.com)b>引入依赖


org.springframework.boot
spring-boot-starter


org.springframework.boot
更多Java –大数据 – 前端 – UI/UE - Android - 人工智能资料下载,可访问百度:尚硅谷官网(www.atguigu.com)c>idea中安装lombok插件
4、编写代码
a>配置application.yml
注意:
1、驱动类driver-class-name
spring boot 2.0(内置jdbc5驱动),驱动类使用:
spring-boot-starter-test
test


com.baomidou
mybatis-plus-boot-starter
3.5.1


org.projectlombok
lombok
true


mysql
mysql-connector-java
runtime


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
更多Java –大数据 – 前端 – UI/UE - Android - 人工智能资料下载,可访问百度:尚硅谷官网(www.atguigu.com)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包
c>添加实体
User类编译之后的结果:
@SpringBootApplication
@MapperScan(“com.atguigu.mybatisplus.mapper”)
public class MybatisplusApplication {
public static void main(String[] args) {
SpringApplication.run(MybatisplusApplication.class, args);
}
}
@Data //lombok注解
public class User {
private Long id;
private String name;
private Integer age;
private String email;
}
更多Java –大数据 – 前端 – UI/UE - Android - 人工智能资料下载,可访问百度:尚硅谷官网(www.atguigu.com)d>添加mapper
BaseMapper是MyBatis-Plus提供的模板mapper,其中包含了基本的CRUD方法,泛型为操作的
实体类型
e>测试
结果:
注意:
public interface UserMapper extends BaseMapper {
}
@SpringBootTest
public class MybatisPlusTest {
@Autowired
private UserMapper userMapper;
@Test
public void testSelectList(){
//selectList()根据MP内置的条件构造器查询一个list集合,null表示没有条件,即查询所有
userMapper.selectList(null).forEach(System.out::println);
}
}
更多Java –大数据 – 前端 – UI/UE - Android - 人工智能资料下载,可访问百度:尚硅谷官网(www.atguigu.com)IDEA在 userMapper 处报错,因为找不到注入的对象,因为类是动态创建的,但是程序可以正确
的执行。
为了避免报错,可以在mapper接口上添加 @Repository 注解
f>添加日志
在application.yml中配置日志输出
三、基本CRUD
1、BaseMapper
MyBatis-Plus中的基本CRUD在内置的BaseMapper中都已得到了实现,我们可以直接使用,接口如
下:

配置MyBatis日志

mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
package com.baomidou.mybatisplus.core.mapper;
public interface BaseMapper extends Mapper {
/**

  • 插入一条记录
  • @param entity 实体对象
    /
    int insert(T entity);
    /
    *
  • 根据 ID 删除
  • @param id 主键ID
    /
    int deleteById(Serializable id);
    /
    *
  • 根据实体(ID)删除
  • @param entity 实体对象
  • @since 3.4.4
    /
    更多Java –大数据 – 前端 – UI/UE - Android - 人工智能资料下载,可访问百度:尚硅谷官网(www.atguigu.com)int deleteById(T entity);
    /
    *
  • 根据 columnMap 条件,删除记录
  • @param columnMap 表字段 map 对象
    /
    int deleteByMap(@Param(Constants.COLUMN_MAP) Map<String, Object> columnMap);
    /
    *
  • 根据 entity 条件,删除记录
  • @param queryWrapper 实体对象封装操作类(可以为 null,里面的 entity 用于生成 where
    语句)
    /
    int delete(@Param(Constants.WRAPPER) Wrapper queryWrapper);
    /
    *
  • 删除(根据ID 批量删除)
  • @param idList 主键ID列表(不能为 null 以及 empty)
    /
    int deleteBatchIds(@Param(Constants.COLLECTION) Collection<? extends
    Serializable> idList);
    /
    *
  • 根据 ID 修改
  • @param entity 实体对象
    /
    int updateById(@Param(Constants.ENTITY) T entity);
    /
    *
  • 根据 whereEntity 条件,更新记录
  • @param entity 实体对象 (set 条件值,可以为 null)
  • @param updateWrapper 实体对象封装操作类(可以为 null,里面的 entity 用于生成
    where 语句)
    /
    int update(@Param(Constants.ENTITY) T entity, @Param(Constants.WRAPPER)
    Wrapper updateWrapper);
    /
    *
  • 根据 ID 查询
  • @param id 主键ID
    /
    T selectById(Serializable id);
    /
    *
  • 查询(根据ID 批量查询)
  • @param idList 主键ID列表(不能为 null 以及 empty)
    /
    List selectBatchIds(@Param(Constants.COLLECTION) Collection<? extends
    Serializable> idList);
    /
    *
  • 查询(根据 columnMap 条件)
  • @param columnMap 表字段 map 对象
    /
    List selectByMap(@Param(Constants.COLUMN_MAP) Map<String, Object>
    columnMap);
    /
    *
    更多Java –大数据 – 前端 – UI/UE - Android - 人工智能资料下载,可访问百度:尚硅谷官网(www.atguigu.com)* 根据 entity 条件,查询一条记录
  • 查询一条记录,例如 qw.last("limit 1") 限制取一条记录, 注意:多条数据会报异常

* @param queryWrapper 实体对象封装操作类(可以为 null) */ default T selectOne(@Param(Constants.WRAPPER) Wrapper queryWrapper) { List ts = this.selectList(queryWrapper); if (CollectionUtils.isNotEmpty(ts)) { if (ts.size() != 1) { throw ExceptionUtils.mpe("One record is expected, but the query result is multiple records"); } return ts.get(0); } return null; } /** * 根据 Wrapper 条件,查询总记录数 * @param queryWrapper 实体对象封装操作类(可以为 null) */ Long selectCount(@Param(Constants.WRAPPER) Wrapper queryWrapper); /** * 根据 entity 条件,查询全部记录 * @param queryWrapper 实体对象封装操作类(可以为 null) */ List selectList(@Param(Constants.WRAPPER) Wrapper queryWrapper); /** * 根据 Wrapper 条件,查询全部记录 * @param queryWrapper 实体对象封装操作类(可以为 null) */ List
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值