mp的使用

mp现状

MyBatis vs JPA

而言MyBatis劣势

  • 简单CRUD操作还得写SQL语句
  • XML中有大量的SQL要维护
  • MyBatis自身功能很有限,但支持Plugin
    mp的使用

MP特性

  • 无侵入、损耗小、强大的CRUD操作
  • 支持Lambda形式调用、支持多种数据库
  • 支持主键自动生成、 支持ActiveRecord模式
  • 支持自定义全局通用操作、支持关键词自动转义
  • 内置代码生成器、内置分页插件、内置性能分析插件
  • 内置全局拦截插件、内置Sql注入剥离器

MP架构

mp的使用

Mp地址

官网地址: https://mybatis.plus/
github: https://github.com/baomidou/mybatis-plus
码云: https://gitee.com/baomidou/mybatis-plus
码云各种sample: https://gitee.com/baomidou/mybatis-plus-samples

优秀案例
https://mybatis.plus/guide/#%E4%BC%98%E7%A7%80%E8%A7%86%E9%A2%91
mp的使用

快速小例子

pom.xml

mp的使用

分析mybatis-plus-boot-stater的依赖关系

mp的使用

application.yml 的配置

mp的使用
application.yml日志的输出
mp的使用

启动类增加mapper的注解

mp的使用

实体类

mp的使用

Mapper接口

mp的使用

测试类查询

mp的使用

测试类插入

mp的使用
如果列为null 则修改或插入不会出现在SQL语句
如果不插入ID则进行雪花算法默认补列
mp的使用

指定表名@TableName

mp的使用

指定主键@TableId

mp的使用
如果你主键策略默认什么也没配,MP会自动找ID作为主键 而你没配@TableId但是主键不是ID而是user_id 此时MP会报错
解决方式 要么改成ID后MP会自动找,要么还使用user_id同时加上@TableId
mp的使用

指定列名@TableField

mp的使用

排除某字段不是表字段

第一种方式transient关键字

mp的使用

第二种方式将static修饰

当使用static修饰后mp不会与表名关联转换
mp的使用
静态变量也能进行忽略 ,而类在正常序列化的时候也可以

第三种方式exist=false

mp的使用
false 不是数据库表中的字段

Mapper查询

按条件查询

mp的使用

selectById()

mp的使用
mp的使用

selectIds

mp的使用

selectByMap

mp的使用
传的值必须是数据库列名,而不是类的属性名
mp的使用

按条件查询QueryWrapper

源码理论

mp的使用

QueryWrapper构建

mp的使用

对象化条件查询1

mp的使用

对象化复杂查询2

名字中包含雨年并且龄大于等于20且小于等于40并且email不为空
name like ‘%雨%’ and age between 20 and 40 and email is not null
mp的使用

对象化or查询orderby

mp的使用

对象化日期查询及子查询

mp的使用

对象化 条件1 and (条件2 or 条件3) 复用函数式表达式JDK8

mp的使用

对象化条件1 or (条件2 and 条件3)

mp的使用

对象化 (条件1 or 条件2) and 条件3

mp的使用

对象化 in(30,31,45)

mp的使用

只返回一条

mp的使用

Select只要其中的几列

mp的使用

排除create_time 与 manager_id 两列

mp的使用

页面传了值或没传值

mp的使用
上面左面是传统写法,右面是简洁写法

用PO进行查询

mp的使用

在实体列上设置条件

mp的使用
我感觉不太实用 花架子

allEq即Map条件查询

mp的使用
当为false时当age=null会忽略方法
如果为true时当age=null 会生 age isNull 的sql
mp的使用
将map中的某个条件过滤掉
mp的使用

Select返回Map<列,值>

mp的使用

Select聚合函数的查询

mp的使用

SelectObjs只返回第一个字段的值

mp的使用
mp的使用

Select查询Count

mp的使用

selectOne只返回一条记录

查询结果必须是一条 或者为没有 如果多条会报错
mp的使用
如果返回多条会报错
mp的使用

Lambda条件构造器

可以通过三种方式创建Lambda构造器
mp的使用
用法
mp的使用
List userList = userMapper .selectList(ambdaQuery);
userList.forEach(System. out:println);
第二个例子
mp的使用

LambdaQueryChainWrapper

mp的使用

自定义SQL

版本大于3.0.7

将自定义SQL写在注解里

mp的使用

自定义SQL写在xml里

application.yml
mp的使用
mp的使用
mp的使用

分页查询

注入PaginationInterceptor

mp的使用

分页接口

mp的使用

分页返回对象

mp的使用
mp的使用

分页返回Map

下面的这个是返回Map<String,Object> 类型
mp的使用
mp的使用

自定义分页

mp的使用
mp的使用
mp的使用

更新

按ID更新

mp的使用
mp的使用

按set,where更新

第一种写法

mp的使用
第一个参数是set条件 第二个参数是where条件
mp的使用
mp的使用

第二种写法UpdateByWrapper

也可以通过set来设置条件
mp的使用

第二种写法UpdateByWrapperLambda

mp的使用

第二种写法LambdaUpdateChainWrapper

mp的使用

删除方法

deleteById

mp的使用

deleteByMap

mp的使用

deleteBatchIds

mp的使用
mp的使用
mp的使用

AR模式

继承Model

mp的使用

对象操作insert

mp的使用

对象操作selectById

mp的使用

对象操作updateByID

mp的使用

对象操作insertOrUpdate

这个没有设置id 通过insertOrUpdate直接插入
mp的使用
如果有id的话会去库里更新
mp的使用
查到了 去更新 查不到去插入

主键

IdType.AUTO

mp的使用

IdType.NONE

代表跟随全局
mp的使用

IdType.ID_WORKER_STR

字符串类型的雪花算法
mp的使用

全局主键配置

mp的使用
全局的主健类型配置为uuid

基本配置

config-location

mp的使用

classpath*

mp的使用
mp的使用

type-aliases-package作用

mp的使用

configuration

mp的使用
mp的使用

config-location与configuration是互斥

mp的使用
Config-location与configuration这两个不能同时出现
mp的使用

fieldStrategy

not_null

当为not_null时 insert update语句 属性字段不设置值是不会加入SQL语句中去的
默认的值为 not-null
mp的使用

Ignored

设置ignored后 所有的字段都会列出在属性中
mp的使用
mp的使用
最好别这么设置

notEmpty

设置notEmpty 则 “” 和NULL的都会被忽略 不会放在SQL中

局部FieldStrategy设置

mp的使用
这是配置局部字段的

表名前缀设置

mp的使用

Service

接口及实现类

mp的使用

Service.getOne

mp的使用

service批量插入

mp的使用

Service的chain的list

mp的使用

Service的chain的update

mp的使用

相关文章:

  • 2022-12-23
  • 2021-06-08
  • 2022-03-10
  • 2022-01-22
  • 2022-02-13
  • 2022-12-23
  • 2021-12-21
  • 2021-05-26
猜你喜欢
  • 2021-12-20
  • 2022-12-23
  • 2021-08-10
  • 2021-12-21
  • 2021-11-21
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案