写点什么

公开!阿里 p7 大佬首发 MyBatis 知识手册,看后发现差距不止一点点

发布于: 2021 年 06 月 04 日
公开!阿里p7大佬首发MyBatis知识手册,看后发现差距不止一点点

今日分享开始啦,请大家多多指教~

一,MyBatis-Plus 简介

MyBatis-Plus 是一个 MyBatis 增强工具,在 MyBatis 的基础上制作增强不做改变,为简化开发,提高效率而生。

下面这幅来自 MyBatis-Plus 官网的图,形象地体现了 MyBatis 与 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

在正式讲 MyBatis-Plus 之前,假设你已经:

  • 拥有 Java 开发环境以及相应 IDE

  • 熟练掌握 Java 语言编程

  • 熟悉 Spring Boot

  • 熟悉 Maven(这些内容我以前或多或少都有写过,有兴趣的可以点我主页去看看)

首先使用以下 SQL 脚本建表并插入数据:

初始化 Spring Boot 工程:

创建一个空的 Spring Boot 工程 。

(创建 Spring Boot 工程的博客我写过,需要的话可以去我的主页参考)

添加依赖:

引入 Spring Boot Starter 父工程:

引入 spring-boot-starter、spring-boot-starter-test、mybatis-plus-boot-starter、mysql 依赖:

配置

在 application.yml 配置文件中添加数据库相关配置

在 Spring Boot 启动类中添加 @MapperScan 注解,扫描 Mapper 文件夹:

编码

编写实体类 User.java


编写 Mapper 接口 UserMapper.java 实现 BaseMapper 接口

public interface UserMapper extends BaseMapper<User> { }

测试

编写测试类,进行功能测试:

控制台输出:

五,MyBatis-Plus 常用注解

介绍一下 MyBatis-Plus 中最常用的几个注解

@TableName

描述:表名注解

关于 autoResultMap 的说明:

mp 会自动构建一个 ResultMap 并注入到 mybatis 里(一般用不上).下面讲两句: 因为 mp 底层是 mybatis,所以一些 mybatis 的常识你要知道,mp 只是帮你注入了常用 crud 到 mybatis 里 注入之前可以说是动态的(根据你 entity 的字段以及注解变化而变化),但是注入之后是静态的(等于你写在 xml 的东西) 而对于直接指定 typeHandler,mybatis 只支持你写在 2 个地方:

  1. 定义在 resultMap 里,只作用于 select 查询的返回结果封装

  2. 定义在 insert 和 updatesql 的 #{property}里的 property 后面(例:#{property,typehandler=xxx.xxx.xxx}),只作用于设置值 而除了这两种直接指定 typeHandler,mybatis 有一个全局地扫描你自己的 typeHandler 包的配置,这是根据你的 property 的类型去找 typeHandler 并使用.

@TableId

描述:主键注解

IdType

@TableField

描述:字段注解(非主键)


关于 jdbcType 和 typeHandler 以及 numericScale 的说明:

numericScale 只生效于 update 的 sql. jdbcType 和 typeHandler 如果不配合 @TableName#autoResultMap = true 一起使用,也只生效于 update 的 sql. 对于 typeHandler 如果你的字段类型和 set 进去的类型为 equals 关系,则只需要让你的 typeHandler 让 Mybatis 加载到即可,不需要使用注解

FieldStrategy

FieldFill

@Version

描述:乐观锁注解、标记 @Verison 在字段上

@EnumValue

描述:通枚举类注解(注解在枚举字段上)

@TableLogic

描述:表字段逻辑处理注解(逻辑删除)

@KeySequence

描述:序列主键策略(oracle)

属性:value,resultMap

@OrderBy

描述:内置 SQL 默认指定排序,优先级低于 wrapper 条件查询

今日份分享已结束,请大家多多包涵和指点!

用户头像

还未添加个人签名 2021.04.20 加入

Java工具与相关资料获取等WX: pfx950924(备注来源)

评论

发布
暂无评论
公开!阿里p7大佬首发MyBatis知识手册,看后发现差距不止一点点