MP的使用

mp的使用

mp现状

MyBatis vs JPA

而言MyBatis劣势

  • 简单CRUD操作还得写SQL语句
  • XML中有大量的SQL要维护
  • MyBatis自身功能很有限,但支持Plugin
    在这里插入图片描述

MP特性

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

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
在这里插入图片描述

快速小例子

pom.xml

在这里插入图片描述

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

在这里插入图片描述

application.yml 的配置

在这里插入图片描述
application.yml日志的输出
在这里插入图片描述

启动类增加mapper的注解

在这里插入图片描述

实体类

在这里插入图片描述

Mapper接口

在这里插入图片描述

测试类查询

在这里插入图片描述

测试类插入

在这里插入图片描述
如果列为null 则修改或插入不会出现在SQL语句
如果不插入ID则进行雪花算法默认补列
在这里插入图片描述

指定表名@TableName

在这里插入图片描述

指定主键@TableId

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

指定列名@TableField

在这里插入图片描述

排除某字段不是表字段

第一种方式transient关键字

在这里插入图片描述

第二种方式将static修饰

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

第三种方式exist=false

在这里插入图片描述
false 不是数据库表中的字段

Mapper查询

按条件查询

在这里插入图片描述

selectById()

在这里插入图片描述
在这里插入图片描述

selectIds

在这里插入图片描述

selectByMap

在这里插入图片描述
传的值必须是数据库列名,而不是类的属性名
在这里插入图片描述

按条件查询QueryWrapper

源码理论

在这里插入图片描述

QueryWrapper构建

在这里插入图片描述

对象化条件查询1

在这里插入图片描述

对象化复杂查询2

名字中包含雨年并且龄大于等于20且小于等于40并且email不为空
name like ‘%雨%’ and age between 20 and 40 and email is not null
在这里插入图片描述

对象化or查询orderby

在这里插入图片描述

对象化日期查询及子查询

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

对象化 in(30,31,45)

在这里插入图片描述

只返回一条

在这里插入图片描述

Select只要其中的几列

在这里插入图片描述

排除create_time 与 manager_id 两列

在这里插入图片描述

页面传了值或没传值

在这里插入图片描述
上面左面是传统写法,右面是简洁写法

用PO进行查询

在这里插入图片描述

在实体列上设置条件

在这里插入图片描述
我感觉不太实用 花架子

allEq即Map条件查询

在这里插入图片描述
当为false时当age=null会忽略方法
如果为true时当age=null 会生 age isNull 的sql
在这里插入图片描述
将map中的某个条件过滤掉
在这里插入图片描述

Select返回Map<列,值>

在这里插入图片描述

Select聚合函数的查询

在这里插入图片描述

SelectObjs只返回第一个字段的值

在这里插入图片描述
在这里插入图片描述

Select查询Count

在这里插入图片描述

selectOne只返回一条记录

查询结果必须是一条 或者为没有 如果多条会报错
在这里插入图片描述
如果返回多条会报错
在这里插入图片描述

Lambda条件构造器

可以通过三种方式创建Lambda构造器
在这里插入图片描述
用法
在这里插入图片描述
List userList = userMapper .selectList(ambdaQuery);
userList.forEach(System. out:println);
第二个例子
在这里插入图片描述

LambdaQueryChainWrapper

在这里插入图片描述

自定义SQL

版本大于3.0.7

将自定义SQL写在注解里

在这里插入图片描述

自定义SQL写在xml里

application.yml
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

分页查询

注入PaginationInterceptor

在这里插入图片描述

分页接口

在这里插入图片描述

分页返回对象

在这里插入图片描述
在这里插入图片描述

分页返回Map

下面的这个是返回Map<String,Object> 类型
在这里插入图片描述
在这里插入图片描述

自定义分页

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

更新

按ID更新

在这里插入图片描述
在这里插入图片描述

按set,where更新

第一种写法

在这里插入图片描述
第一个参数是set条件 第二个参数是where条件
在这里插入图片描述
在这里插入图片描述

第二种写法UpdateByWrapper

也可以通过set来设置条件
在这里插入图片描述

第二种写法UpdateByWrapperLambda

在这里插入图片描述

第二种写法LambdaUpdateChainWrapper

在这里插入图片描述

删除方法

deleteById

在这里插入图片描述

deleteByMap

在这里插入图片描述

deleteBatchIds

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

AR模式

继承Model

在这里插入图片描述

对象操作insert

在这里插入图片描述

对象操作selectById

在这里插入图片描述

对象操作updateByID

在这里插入图片描述

对象操作insertOrUpdate

这个没有设置id 通过insertOrUpdate直接插入
在这里插入图片描述
如果有id的话会去库里更新
在这里插入图片描述
查到了 去更新 查不到去插入

主键

IdType.AUTO

在这里插入图片描述

IdType.NONE

代表跟随全局
在这里插入图片描述

IdType.ID_WORKER_STR

字符串类型的雪花算法
在这里插入图片描述

全局主键配置

在这里插入图片描述
全局的主健类型配置为uuid

基本配置

config-location

在这里插入图片描述

classpath*

在这里插入图片描述
在这里插入图片描述

type-aliases-package作用

在这里插入图片描述

configuration

在这里插入图片描述
在这里插入图片描述

config-location与configuration是互斥

在这里插入图片描述
Config-location与configuration这两个不能同时出现
在这里插入图片描述

fieldStrategy

not_null

当为not_null时 insert update语句 属性字段不设置值是不会加入SQL语句中去的
默认的值为 not-null
在这里插入图片描述

Ignored

设置ignored后 所有的字段都会列出在属性中
在这里插入图片描述
在这里插入图片描述
最好别这么设置

notEmpty

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

局部FieldStrategy设置

在这里插入图片描述
这是配置局部字段的

表名前缀设置

在这里插入图片描述

Service

接口及实现类

在这里插入图片描述

Service.getOne

在这里插入图片描述

service批量插入

在这里插入图片描述

Service的chain的list

在这里插入图片描述

Service的chain的update

在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值