官网:http://mp.baomidou.com/
参考教程:http://mp.baomidou.com/guide/
MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
- 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
- 损耗小:启动即会自动注入基本 CURD,性能基本无损耗,直接面向对象操作
- 强大的 CRUD 操作:内置通用 Mapper、通用 Service,仅仅通过少量配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求
- 支持 Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件,无需再担心字段写错
- 支持多种数据库:支持 MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer2005、SQLServer 等多种数据库
- 支持主键自动生成:支持多达 4 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题
- 支持 XML 热加载:Mapper 对应的 XML 支持热加载,对于简单的 CRUD 操作,甚至可以无 XML 启动
- 支持 ActiveRecord 模式:支持 ActiveRecord 形式调用,实体类只需继承 Model 类即可进行强大的 CRUD 操作
- 支持自定义全局通用操作:支持全局通用方法注入( Write once, use anywhere )
- 支持关键词自动转义:支持数据库关键词(order、key…)自动转义,还可自定义关键词
- 内置代码生成器:采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用
- 内置分页插件:基于 MyBatis 物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通 List 查询
- 内置性能分析插件:可输出 Sql 语句以及其执行时间,建议开发测试时启用该功能,能快速揪出慢查询
- 内置全局拦截插件:提供全表 delete 、 update 操作智能分析阻断,也可自定义拦截规则,预防误操作
- 内置 Sql 注入剥离器:支持 Sql 注入剥离,有效预防 Sql 注入攻击
1、使用步骤
(1)引入依赖
spring-boot-starter、spring-boot-starter-test
添加:mybatis-plus-boot-starter、MySQL、lombok、
在项目中使用Lombok可以减少很多重复代码的书写。比如说getter/setter/toString等方法的编写
注意:引入 之后请不要再次引入 以及 ,以避免因版本差异导致的问题。
使用lombok的时候,idea中要安装lombok的插件
(2)配置数据源
在 配置文件中添加 MySQL 数据库的相关配置:
mysql5
mysql8以上(spring boot 2.1)
**注意:**driver和url的变化
- 这里的 url 使用了 ?serverTimezone=GMT%2B8 后缀,因为Spring Boot 2.1 集成了 8.0版本的jdbc驱动,这个版本的 jdbc 驱动需要添加这个后缀,否则运行测试用例报告如下错误:(时区的设置)
java.sql.SQLException: The server time zone value ‘Öйú±ê׼ʱ¼ä’ is unrecognized or represents more
- 这里的 driver-class-name 使用了 com.mysql.cj.jdbc.Driver ,在 jdbc 8 中 建议使用这个驱动,之前的 com.mysql.jdbc.Driver 已经被废弃,否则运行测试用例的时候会有 WARN 信息
(3)实体类的创建
略
(4)mapper的创建(持久层)
创建包 mapper 编写Mapper 接口:
baseMapper中封装了一些简单的方法,我们继承之后调用即可!!!
IDEA在 userMapper 处报错,因为找不到注入的对象,因为类是动态创建的,但是程序可以正确的执行。
为了避免报错,可以在 dao 层 的接口上添加 @Repository 注解
(5)配置日志
这个使用之后就可以不用日志文件的配置了,在控制台就会出现SQL语句的执行以及数据的显示过程!
2、使用好处
使用它的时候,我们使用简单的CRUD的时候就不需要书写SQL语句,框架就给我们封装好了,在遇到复杂的业务,使用复杂的SQL语句时,我们配置
1、主键策略
(1)ID_WORKER
MyBatis-Plus默认的主键策略是:ID_WORKER 全局唯一ID
参考资料:分布式系统唯一ID生成方案汇总:https://www.cnblogs.com/haoxinyue/p/5208136.html
2、自增策略
-
要想主键自增需要配置如下主键策略
-
- 需要在创建数据表的时候设置主键自增
- 实体字段中配置 @TableId(type = IdType.AUTO)
要想影响所有实体的配置,可以设置全局主键配置
3、其它主键策略
分析 IdType 源码可知
4、总结主键策略
主键生成策略
(1)主键自动增长
(2)UUID
(3)Redis实现生成
(4)mp自带策略(生成一个19位的id值)
在实体类id属性添加注解配置策略
@TableId(type = IdType.ID_WORKER)
(1)AUTO:自增长
(2)INPUT:手动输入id值
(3)UUID:生成uuid值
(4)NONE:没有策略
(5)ID_WORKER:mp自带策略
- 如果实体类id属性是数字类型Long,使用这个策略
(6)ID_WORKER_STR:mp自带策略
- 如果实体类id属性是字符串类型,使用这个策略
5、自动填充
1、不需要set添加值,使用mp方式实现添加操作
2、向user表添加两个字段 create_time update_time
3、user表对应实体类添加两个属性
4、在属性上加上注解
5、书写自动填充的类
6、总结使用步骤
(1)在需要自动填充的属性上添加注解@TableFilled
(2)书写自动填充类
(3)在填充类上添加注入IOC容器的注解(@Compontent就行)
6、实现乐观锁
主要适用场景: 当要更新一条记录的时候,希望这条记录没有被别人更新,也就是说实现线程安全的数据更新
乐观锁实现方式:
-
取出记录时,获取当前version
-
更新时,带上这个version
-
执行更新时, set version = newVersion where version = oldVersion
-
如果version不对,就更新失败
乐观锁一种问题解决丢失更新的方案
(1)数据库中添加version字段
(2)数据库中添加version字段
并添加 @Version 注解
(3)元对象处理器接口添加version的insert默认值
特别说明:
-
支持的数据类型只有 int,Integer,long,Long,Date,Timestamp,LocalDateTime
-
整数类型下 newVersion = oldVersion + 1
-
newVersion 会回写到 entity 中
-
仅支持 updateById(id) 与 update(entity, wrapper) 方法
-
在 update(entity, wrapper) 方法下, wrapper 不能复用!!!
(4)在 MybatisPlusConfig 中注册 Bean
(5)测试成功
(6)总结乐观锁的使用步骤
第一步 表添加版本号字段,对应实体类添加版本号属性
第二步 在实体类版本号属性上面添加注解 @Version
第三步 配置乐观锁插件
7、CRUD操作
(1)查询
-
根据id查询
-
批量查询
-
简单条件查询
-
分页查询
-
多条件查询
多条件查询需要用到的类结构体系图
Wrapper : 条件构造抽象类,最顶端父类
AbstractWrapper : 用于查询条件封装,生成 sql 的 where 条件
QueryWrapper : Entity 对象封装操作类,不是用lambda语法
UpdateWrapper : Update 条件封装,用于Entity对象更新操作
AbstractLambdaWrapper : Lambda 语法使用 Wrapper统一处理解析 lambda 获取 column。
LambdaQueryWrapper :看名称也能明白就是用于Lambda语法使用的查询Wrapper
LambdaUpdateWrapper : Lambda 更新封装Wrapper上图中一般经常使用的是QueryWrapper这个类
-
ge gt le lt: >= > <= <
-
eq ne: = !=
-
between: 区间范围值
-
like:模糊查询
-
orderByDesc orderByAsc : 排序
-
select:查询指定的列
-
ge、gt、le、lt、isNull、isNotNull
-
eq、ne
-
between、notBetween
-
allEq
-
like、notLike、likeLeft、likeRight
-
in、notIn、inSql、notinSql、exists、notExists inSql、notinSql:可以实现子查询
-
or、and
注意:这里使用的是 UpdateWrapper
不调用or则默认为使用 and 连 -
嵌套or、嵌套and
这里使用了lambda表达式,or中的表达式最后翻译成sql时会被加上圆括号 -
orderBy、orderByDesc、orderByAsc
-
last
直接拼接到 sql 的最后
注意:只能调用一次,多次调用以最后一次为准 有sql注入的风险,请谨慎使用 -
指定要查询的列
SELECT id,name,age FROM user WHERe deleted=0
-
set、setSql
最终的sql会合并 user.setAge(),以及 userUpdateWrapper.set() 和 setSql() 中 的字段UPDATE user SET age=?, update_time=?, name=?, email = ‘123@qq.com’ WHERe deleted=0 AND name LIKE ?
-
-
多条件分页查询
(2)添加
添加时候,没有设置id值,添加之后在表生成一个19位的id值(MybatisPlus使用的是id自增长策略)
(3)修改
(4)删除
-
根据id删除
-
逻辑删除(重点)
第一步 在user表添加字段作为删除标志,对应实体类添加删除标志属性
第二步 实体类删除标志属性添加注解
第三步 配置逻辑删除插件
注意:mp中默认0表示没有删除,1表示已经删除
mybatis-plus.global-config.db-config.logic-delete-value=1
mybatis-plus.global-config.db-config.logic-not-delete-value=0
以上就是本篇文章【MybatisPlus入门使用】的全部内容了,欢迎阅览 ! 文章地址:http://dfvalve.xrbh.cn/news/1157.html 资讯 企业新闻 行情 企业黄页 同类资讯 首页 网站地图 返回首页 迅博思语资讯移动站 http://keant.xrbh.cn/ , 查看更多