Mybatis Plus -1
写在前面:
介绍了mp的基础使用方法,看完即可简化mybatis的开发,实现一些初学阶段的curd
对于复杂情况的curd,可以对官网进行查阅,不断进行积累经验。
一个 MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生
支持任何能使用 Mybatis
进行 CRUD, 并且支持标准 SQL 的数据库。
官网:https://baomidou.com/
简单来说:就是简化mybatis的开发,内置了一些sql,不用每个CURD都手写。
入门案例
BaseMapper是MyBatis-Plus提供的模板mapper。
我们创建操作对应数据库的mapper 后,继承BaseMapper 即可。
|
|
记得添加 @Mapper
或在启动类添加 @MapperScan
指定对应的mapper,使其交给IOC容器管理。
测试:
|
|
tips: 开启日志输出,输出在控制台。 方便检查sql 的执行情况以及找出错误。
|
|
基本的CURD
最基础的增删改查,在baseMapper中均已定义,可以直接使用。
insert
没什么好说的,传入一个实体类就会插入。返回受影响的行数。
|
|
值得一说的是:其id 策略默认是 基于雪花算法生成的。(可以在实体类中通过注解修改,或进行配置)
delete
- deleteById
- deleteBatchIds
- deleteByMap 可以为删除设置条件。
Update
updateById 需要传入一个有id值的实体类对象。
Select
- selectById
- selectBatchIds
- selectByMap
- selectList 查询所有信息
BaseMapper中大多方法中都有Wrapper类型的形参,此为条件构造器
可针对于SQL语句设置不同的条件,若没有条件赋值null,即查询(删除/修改)所有数据
自定义功能
是对mybatis的增强,因此也可以自定义sql语句,创建对应的映射文件。
- 同包同名 resource下
- namspace属性 — mapper的全类名
- id属性 — 方法名
通用service - iservice
service 接口继承 iservice
|
|
service接口
|
|
就可以使用内置的方法了。见官网。
常用注解:
@tableName
解决实体类名和数据库表名不同。 也可以通过全局配置解决
@tableId
: 解决属性名和数据库表id名不同。
如果表中的id名不为id 需用 value属性进行指定。type属性,指定主键策略。
- dType.ASSIGN_ID(默认):基于雪花算法的策略生成数据id,与数据库id是否设置自增无关
- IdType.AUTO:使用数据库的自增策略,要确保数据库设置了id自增, 否则无效
也可以全局配置:
|
|
@tableField
: 解决属性名和列名不同。
实体类中的属性使用的是驼峰命名风格,而表中的字段使用的是下划线命名风格
如实体类属性userName,表中字段user_name
此时MyBatis-Plus会自动将下划线命名风格转化为驼峰命名风格,相当于在MyBatis中配置
如果是单纯的不一样,则需要通过该注解指定。
@TableLogic
: 逻辑删除
表中有字段 is_delete, 如果执行了 delete 操作,就会将字段转化为0,而不是真的删除。
(例如回收站,可以恢复数据)
条件构造器和通用接口
字面意思:构造CURD的条件,搭配baseMapper 中的方法进行使用。
wrapper
Wrapper : 条件构造抽象类,最顶端父类 AbstractWrapper : 用于查询条件封装,生成 sql 的 where 条件 QueryWrapper : 查询条件封装 UpdateWrapper : Update 条件封装 AbstractLambdaWrapper : 使用Lambda 语法 LambdaQueryWrapper :用于Lambda语法使用的查询Wrapper LambdaUpdateWrapper : Lambda 更新封装Wrapper
使用
|
|
具体的可以参考官网: https://baomidou.com/guides/wrapper/
也就是构造自己想要的条件,需要什么去官网找(或者在idea中看源码)。用多了自然就会了。
Condition:
在开发过程中,组装条件是常见的功能,而这些条件数据来源于用户输入,是可选的,因此我们在组装这些条件时,必须先判断用户是否选择了这些条件,若选择则需要组装该条件,若没有选择则一定不能组装,以免影响SQL执行的结果。
思路1: 可以用 if 语句进行判断。但是太冗余了。
思路2:使用带condition参数的重载方法构建查 询条件,简化代码的编写。
|
|
通过Lambda访问实体类属性对应的字段,避免使用字符串表示字段,防止运行时错误
|
|
还可以对分页插件、乐观锁等插件、通用枚举、代码生成器、多数据源和MybatisX 进行学习.