MyBatis-Plus入门之ActiveRecord模式

ActiveRecord介绍

  • 每一个数据库表对应创建一个类,类的每一个对象实例对应于数据库中表的一行记录; 通常表的每个字段在类中都有相应的 Field;
  • ActiveRecord 负责把自己持久化. 在 ActiveRecord 中封装了对数据库的访问,通过对象自己实现 CRUD,实现优雅的数据库操作。
  • ActiveRecord 也封装了部分业务逻辑。可以作为业务对象使用。

AR 之 insert

dept 表设计:

create database dept;
use dept;
CREATE TABLE `dept` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `name` varchar(50) DEFAULT NULL,
 `mobile` varchar(50) DEFAULT NULL,
 `manager` int(11) DEFAULT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

在这里插入图片描述
更改springboot配置文件
在这里插入图片描述
代码模板:

将连接信息改为自己的

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/dept
    username: root
    password: root
    
#开启日志
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

实体类
在这里插入图片描述
必须继承 Model,Model 定义了表的 CRUD 方法,Dept 属性名和列名是一样的。

mapper

创建DeptMapper接口,继承BaseMapper
在这里插入图片描述
不使用 mapper,也需要定义这个类,Mybatis-Plus通过 mapper 获取到表的结构;
不定义时,Mybatis-Plus报错无法获取表的结构信息。

接下来测试AR的CRUD


AR 之 Insert

在这里插入图片描述
返回值是 boolean,true 添加成功。没有添加记录是 false。

日志:
在这里插入图片描述
数据库:
在这里插入图片描述

AR 之 update

在这里插入图片描述
创建实体对象,对要更新的属性赋值,null 的属性不更新,根据主键更新记录。
返回值是 boolean,true 更新成功。没有更新记录是 false。

日志:
在这里插入图片描述
数据库:
在这里插入图片描述

AR 之 delete

在这里插入图片描述
使用主键作为删除条件,deleteById()参数是主键值,sql 语句条件是 where id=1。
返回值始终是 true。通过源码查看:
在这里插入图片描述
可以看到deleteById内部调用了delBool
在这里插入图片描述
删除返回值判断条件是 result >=0 ,只有 sql 语法是正确的,返回就是 true。和删除记录的数量无关。

日志:
在这里插入图片描述
此时数据库已经为空!

为了方便演示后面的查询操作,将 AR 之 Insert的操作多运行几次,保证数据库有数据
这里我就运行3次

在这里插入图片描述

AR 之 select

对象调用 selectById()

在这里插入图片描述
对象提供主键值,调用 selectById()无参数,使用 id=2 作为查询条件,返回值是查询的结果对象:
在这里插入图片描述
没有查询到对象不会报错,返回是 null:
在这里插入图片描述

selectById(主键)

不需要依赖对象提供主键值,直接selectById(主键值)
在这里插入图片描述
创建对象,不设值 id 主键值, selectById 的参数是查询条件,和对象的属性值
无关。返回值是结果对象,id 不存在返回 null。

不提供主键 id 值会报错:
在这里插入图片描述
报错如下:

com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: selectById primaryKey is null.

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

selectAll

查询所有数据,返回值是List集合
在这里插入图片描述
日志:
在这里插入图片描述

查询操作是最多的,其它方法的使用在介绍 Wrapper 对象后讲解

在这里插入图片描述

表和列

主键 ,TableName, TableId

主键类型

IdType 枚举类,主键定义如下:
在这里插入图片描述

  • 0.none 没有主键
  • 1.auto 自动增长(mysql, sql server)
  • 2.input 手工输入
  • 3.id_worker: 实体类用 Long id , 表的列用 bigint ,int 类型大小不够
  • 4.id_worker_str 实体类使用 String id, 表的列使用 varchar 50
  • 5.uuid 实体类使用 String id, 列使用 varchar 50
  • id_worker: Twitter 雪花算法-分布式 ID

指定表名

定义实体类,默认的表名和实体类同名;如果不一致,在实体类定义上面使用@TableName 说明表名称。

例如:@TableName(value=”数据库表名”)

步骤:

CREATE TABLE `user_address` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `city` varchar(50) DEFAULT NULL,
  `street` varchar(255) DEFAULT NULL,
  `zipcode` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

在这里插入图片描述

实体类

创建实体类UserAddress

在这里插入图片描述
mapper

创建UserAddressMapper接口

在这里插入图片描述
测试

注入mapper对象

在这里插入图片描述
insert 记录:
在这里插入图片描述
日志:
在这里插入图片描述

指定列名

CREATE TABLE `salary` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `empid` int(11) NOT NULL,
  `empsal` float(10,2) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

在这里插入图片描述

实体类
在这里插入图片描述
mapper
在这里插入图片描述
测试

注入mapper对象
在这里插入图片描述
添加
在这里插入图片描述
日志
在这里插入图片描述

驼峰命名

列名使用下划线,属性名是驼峰命名方式。MyBatis 默认支持这种规则。

表定义

CREATE TABLE `customer` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `cust_name` varchar(50) DEFAULT NULL,
  `cust_age` int(11) DEFAULT NULL,
  `cust_email` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

在这里插入图片描述

实体类
在这里插入图片描述

mapper
在这里插入图片描述
测试

注入mapper对象
在这里插入图片描述
添加
在这里插入图片描述
日志
在这里插入图片描述
数据库
在这里插入图片描述

自定义 sql

定义表

CREATE TABLE `student` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(80) DEFAULT NULL,
  `age` int(11) DEFAULT NULL,
  `email` varchar(80) DEFAULT NULL,
  `status` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
insert into student values(null,'张三',22,'zs@sina.com',1);

在这里插入图片描述
实体
在这里插入图片描述
创建 Mapper
在这里插入图片描述
新建 sql 映射 xml 文件
在这里插入图片描述

配置 xml 文件位置

application.yml

mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  mapper-locations: classpath*:xml/*Mapper.xml

在这里插入图片描述
测试
在这里插入图片描述
日志:
在这里插入图片描述

查询和分页

查询构造器:Wrapper
在这里插入图片描述

QueryWrapper(LambdaQueryWrapper) 和UpdateWrapper(LambdaUpdateWrapper)的父类用于生成 sql 的 where 条件, entity 属性也用于生成 sql 的 where 条件. MP3.x开始支持lambda表达式,LambdaQueryWrapper,LambdaUpdateWrapper支持 lambda表达式的构造查询条件。

条件:

条件说明
allEq基于 map 的相等
eq等于 =
ne不等于 <>
gt大于 >
ge大于等于 >=
lt小于 <
le小于等于 <=
betweenBETWEEN 值1 AND 值2
norBetweenNOT BETWEEN 值1 AND 值2
likeLIKE ‘%值%’
notLikeNOT LIKE ‘%值%’
likeLeftLIKE ‘%值’
likeRightLIKE ‘值%’
isNull字段 IS NULL
isNotNull字段 IS NOT NULL
in字段 IN (value1, value2, …)
notIn字段 NOT IN (value1, value2, …)
inSql字段 IN ( sql 语句 )
notInSql字段 NOT IN ( sql 语句 )
groupByGROUP BY 字段
orderByAsc升序 ORDER BY 字段, … ASC
orderByDesc降序 ORDER BY 字段, … DESC
orderBy自定义字段排序
having条件分组
orOR 语句,拼接 + OR 字段=值
andAND 语句,拼接 + AND 字段=值
apply拼接 sql
last在 sql 语句后拼接自定义条件
exists拼接 EXISTS ( sql 语句 )
notExists拼接 NOT EXISTS ( sql 语句 )
nested正常嵌套 不带 AND 或者 OR

QueryWrapper:查询条件封装类

方法说明
select设置查询字段 select 后面的内容

UpdateWrapper:更新条件封装类

方法说明
set设置要更新的字段,MP 拼接 sql 语句
setSql参数是 sql 语句,MP 不在处理语句

查询

Student 表:初始数据
在这里插入图片描述

allEq

以 Map 为参数条件

a) 条件:name 是张三,age 是 22
在这里插入图片描述
日志:where name=”张三” and age = 22
在这里插入图片描述
b) 查询条件有 null
在这里插入图片描述
true 日志:
在这里插入图片描述

false日志:
在这里插入图片描述

eq

name 等于李四

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

ne

ne 不等于

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

gt

gt 大于
在这里插入图片描述
日志
在这里插入图片描述

ge

ge 大于等于
在这里插入图片描述
日志
在这里插入图片描述

lt

lt 小于
在这里插入图片描述
日志
在这里插入图片描述

le

le 小于等于 <=
在这里插入图片描述
日志
在这里插入图片描述

between

between 在两个值范围之间
在这里插入图片描述
日志
在这里插入图片描述

notBetween

notBetween 不在两个值范围之间
在这里插入图片描述
日志
在这里插入图片描述

like , notLike

like 匹配值 “%值%”
notLike 不匹配 “%值%”
在这里插入图片描述
日志
在这里插入图片描述

likeLeft, likeRight

likeLeft 匹配 like “%值”
likeRight 匹配 like “值%”
在这里插入图片描述
日志
在这里插入图片描述

isNull , isNotNull

isNull 判断字段值为 null
isNotNull 字段值不为 null
在这里插入图片描述
日志
在这里插入图片描述

in , notIn

in 后面值列表, 在列表中都是符合条件的。
notIn 不在列表中的
在这里插入图片描述
将values存在list集合的方式
在这里插入图片描述

日志
在这里插入图片描述

inSql, notInSql

inSql 常用来做子查询 类似 in()
notInSql 类似 notIn()
在这里插入图片描述
日志
在这里插入图片描述

groupBy

groupBy 基于多个字段分组
在这里插入图片描述
日志
在这里插入图片描述

orderByAsc ,orderyByDesc , orderBy

orderByAsc 按字段升序
orderByDesc 按字段降序
orderBy 每个字段指定排序方向
在这里插入图片描述
日志
在这里插入图片描述

or , and

or 连接条件用 or,默认是 and
and 连接条件用 and
在这里插入图片描述
日志:
在这里插入图片描述

last

last 拼接 sql 语句
在这里插入图片描述
日志:
在这里插入图片描述

exists ,notExists

exists 拼接 EXISTS ( sql 语句 )
notExists 是 exists 的相反操作
在这里插入图片描述
日志:
在这里插入图片描述

分页

前提: 配置分页插件,实现物理分页。默认是内存分页
在这里插入图片描述
分页查询:
在这里插入图片描述
日志:
在这里插入图片描述
输出:
在这里插入图片描述

MP 生成器

准备条件:

<!-- 模板引擎 -->
<dependency>
 <groupId>org.apache.velocity</groupId>
 <artifactId>velocity-engine-core</artifactId>
 <version>2.0</version>
</dependency>

创建生成类:
在这里插入图片描述
全局配置
在这里插入图片描述
数据源配置
在这里插入图片描述
其它配置
在这里插入图片描述

  • 6
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

花伤情犹在

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值