mybatis plus 学习笔记

目录

零.引言

一.快速开始

二.Mapper 的 CRUD

1.insert 操作

2.update 操作

3.delete 操作

4.select 操作

 三 ActiveRecord(AR)

1 ActiveRecord 简介

2 准备

3 insert

4 update

5 delete

6 select

四.常用注解

1 主键注解 @TableId 

2 指定表名 @TableName(value="数据库表名")

3 指定列名 @TableField(value = "数据库字段名")

4 驼峰命名

 五.自定义sql

1.创建数据库和相关文件

2 测试

 六.查询构造器 Wrapper(重点)

1.概念

2 例子

2.1 初始数据(mapper,实体类已省略)

2.2 allEq

2.3 eq,ne,gt,ge,lt,le

​2.4 between,notBetween

​2.5 like,notLike

​2.6 likeLeft,likeRight

2.7 isNull ,isNotNull

​2.8 in,notInin 后面值列表, 在列表中都是符合条件的。

​2.9 inSql,notInSql

​2.10 groupBy

​2.11 orderByAsc,orderByDesc,orderBy

2.12 or,and

​2.13 last

2.14 exists,notExists

3.分页

七.MP生成器


零.引言

1.必备的知识 

mybatis

spring或springboot

maven

2.非必要掌握的知识

lambda表达式

3.开发环境

idea,mysql5.x,maven 3,spring boot 2.x

一.快速开始

1.idea配置maven

2.创建spring boot项目,并添加依赖

3.application.yml添加数据库配置

mybatis plus 学习笔记_第1张图片

4.数据库创建测试表,项目创建实体类

mybatis plus 学习笔记_第2张图片

mybatis plus 学习笔记_第3张图片

@TableId 设置主键,type指定主键的类型 ,如IdType.AUTO 主键自动增长

 5.mapper文件

 mapper文件一定要继承mybatis plus中的 baseMapper 

6.添加@mapperScan 扫描Mapper文件夹

mybatis plus 学习笔记_第4张图片

7.测试

 mybatis plus 学习笔记_第5张图片

8.配置mybatis 日志

application.yml

 

二.Mapper 的 CRUD

CURD的操作是来自 BaseMapper 中的方法。BaseMapper 中共有 17 个方法,

BaseMapper 方法列表:

mybatis plus 学习笔记_第6张图片

1.insert 操作

mybatis plus 学习笔记_第7张图片

 注:insert()返回值 int,数据插入成功的行数,成功的记录数。getId()获取主键值

2.update 操作

mybatis plus 学习笔记_第8张图片

注意:null 的字段不更新

 mybatis plus 学习笔记_第9张图片

 日志:

mybatis plus 学习笔记_第10张图片

 email 没有赋值,是 null ,所有没有出现在 set 语句中;

如果将age的类型从Integer 改为 int,age 有默认 0,被更新了。

3.delete 操作

删除有多个方法

mybatis plus 学习笔记_第11张图片

 3.1 deleteById:按主键删除

mybatis plus 学习笔记_第12张图片

3.2 根据 Map 中条件删除

mybatis plus 学习笔记_第13张图片

注:删除条件封装在 Map 中,key 是列名,value 是值,多个 key 之间 and 联接。

日志

3.3 批量删除

mybatis plus 学习笔记_第14张图片

 注:list 集合的创建可以使用 lambda 表达式,也可以使用 add()。例如: idlist.add(1); idlist.add(2);idlist.add(3)…

把要删除的 id 放入 List ,传给 deleteBatchIds()。 批量操作使用 in(…)

4.select 操作

4.1 根据 id 主键查询

mybatis plus 学习笔记_第15张图片

注:没有查询结果,不会报错。但是对象是空值,需要做是否为空的判断

日志:

mybatis plus 学习笔记_第16张图片

4.2 批量查询记录

mybatis plus 学习笔记_第17张图片

 注:根据 id 查询记录,把需要查询的多个 id 存入到 List,调用 selectBatchIds(), 传入 List,返回值也是 List。 查询条件是 from user where in id (1,2)

4.3 使用 Map 的条件查询

mybatis plus 学习笔记_第18张图片

 把要查询的条件字段 put 到 Map,key 是字段,value 是条件值。多个条件是 and 联接。调用 selectByMap(),传入 Map 作为参数,返回值是 List 集合。

 三 ActiveRecord(AR)

1 ActiveRecord 简介

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

2 准备

2.1 创建数据库

sql:
DROP TABLE IF EXISTS `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;

2.2 创建实体类

mybatis plus 学习笔记_第19张图片

 必须继承 Model,Model 定义了表的 CRUD 方法,Dept 属性名和列名是一样的。

2.3 mapper文件

mybatis plus 学习笔记_第20张图片

 不使用 mapper,也需要定义这个类,MP 通过 mapper 获取到表的结构;不定义时,MP 报错无法获取表的结构信息。

3 insert

mybatis plus 学习笔记_第21张图片

4 update

mybatis plus 学习笔记_第22张图片

 创建实体对象,对要更新的属性赋值,null 的属性不更新,根据主键更新记录。 返回值是 boolean,true 更新成功。没有更新记录是 false。

日志:

5 delete

mybatis plus 学习笔记_第23张图片

 使用主键作为删除条件,deleteById()参数是主键值,sql 语句条件是 where id=1。 返回值始终是 true。通过源码查看:

 删除返回值判断条件是 result >=0 ,只有 sql 语法是正确的,返回就是 true。和 删除记录的数量无关。

日志:

mybatis plus 学习笔记_第24张图片

6 select

6.1 对象调用selectById()

mybatis plus 学习笔记_第25张图片

对象提供主键值,调用 selectById()无参数,使用 id=2 作为查询条件,返回值是查询的结果对象;没有查询到对象,返回是 null;不提供主键 id 值,报错如下: com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: selectById primaryKey is null.

6.2 selectById(主键)

mybatis plus 学习笔记_第26张图片

 创建对象,不设值 id 主键值, selectById 的参数是查询条件,和对象的属性值 无关。返回值是结果对象,id 不存在返回 null。

四.常用注解

1 主键注解 @TableId 

mybatis plus 学习笔记_第27张图片

IdType 枚举类,主键定义如下:

mybatis plus 学习笔记_第28张图片

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

2 指定表名 @TableName(value="数据库表名")

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

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

mybatis plus 学习笔记_第29张图片

生成的SQL日志中:

3 指定列名 @TableField(value = "数据库字段名")

mybatis plus 学习笔记_第30张图片

 日志:

4 驼峰命名

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

mybatis plus 学习笔记_第31张图片

 mybatis plus 学习笔记_第32张图片

日志:

 五.自定义sql

1.创建数据库和相关文件

1.1数据库

mybatis plus 学习笔记_第33张图片

1.2 实体类 

 mybatis plus 学习笔记_第34张图片

1.3 mapper

1.4 sql映射文件

mybatis plus 学习笔记_第35张图片

1.5 配置xml文件位置

2 测试

mybatis plus 学习笔记_第36张图片

 日志:

 六.查询构造器 Wrapper(重点)

1.概念

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

QueryWrapper 常用条件
条件        说明
allEq 基于map的相等
eq 等于 =
ne 不等于<>
gt 大于>
ge 大于等于 >=
lt 小于<
le 小于等于<=
between between A  and   B
notBetween not between A and B
like like '%值%'
notLike not like '%值%'
likeLeft like '%值'
likeRight like '值%'
isNull 字段 is null
isNotNull 字段 is not null
in 字段 in (value1,value2,...)
notIn 字段 NOT IN (value1, value2, ...)
inSql

字段 IN ( sql 语句 )

例: inSql("age", "1,2,3")--->age in (1,2,3,4,5,6)

例: inSql("id", "select id from table where id < 3")--->id in (select id from table where id < 3)

notInSql 字段 NOT IN ( sql 语句 )
groupBy GROUP BY 字段
orderByAsc 升序 ORDER BY 字段, ... ASC
orderByDesc 降序 ORDER BY 字段, ... DESC
orderBy 自定义字段排序 orderBy(true, true, "id", "name")--->order by id ASC,name ASC
having 条件分组
or OR 语句,拼接 + OR 字段=值
and AND 语句,拼接 + AND 字段=值
apply 拼接 sql
last 在 sql 语句后拼接自定义条件
exists 拼接 EXISTS ( sql 语句 ) 例 : exists("select id from table where age = 1")--->exists (select id from table where age = 1)
notExists 拼接 NOT EXISTS ( sql 语句 )
nested 正常嵌套 不带 AND 或者 OR
QueryWrapper:查询条件封装类
方法 说明
select 设置查询字段 select 后面的内容
UpdateWrapper:更新条件封装类
方法 说明
set 设置要更新的字段,MP 拼接 sql 语句
setSql 参数是 sql 语句,MP 不在处理语句

2 例子

2.1 初始数据(mapper,实体类已省略)

Student 表

mybatis plus 学习笔记_第37张图片

2.2 allEq

以 Map 为参数条件 

2.2.1 name 是张三,age 是 22

mybatis plus 学习笔记_第38张图片

 日志:where name=”张三” and age = 22

2.2.2 查询条件有 null

mybatis plus 学习笔记_第39张图片

true 日志:

false 日志:

2.3 eq,ne,gt,ge,lt,le

等于 = ,name 等于李四

mybatis plus 学习笔记_第40张图片
2.4 between,notBetween

between 在两个值范围之间

mybatis plus 学习笔记_第41张图片

日志:


2.5 like,notLike

like 匹配值 “%值%”

notLike 不匹配 “%值%”

mybatis plus 学习笔记_第42张图片

日志:


2.6 likeLeft,likeRight

likeLeft 匹配 like “%值” likeRight 匹配 like “值%”

2.7 isNull ,isNotNull

isNull 判断字段值为 null

isNotNull 字段值不为 null

mybatis plus 学习笔记_第43张图片

日志


2.8 in,notIn
in 后面值列表, 在列表中都是符合条件的。

notIn 不在列表中的

mybatis plus 学习笔记_第44张图片

mybatis plus 学习笔记_第45张图片

 日志:


2.9 inSql,notInSql

inSql 常用来做子查询 类似 in()

notInSql 类似 notIn()

mybatis plus 学习笔记_第46张图片

日志:


2.10 groupBy

groupBy 基于多个字段分组

mybatis plus 学习笔记_第47张图片

日志:


2.11 orderByAsc,orderByDesc,orderBy

mybatis plus 学习笔记_第48张图片

日志:

2.12 or,and

or 连接条件用 or,默认是 and and 连接条件用 and

mybatis plus 学习笔记_第49张图片

日志:


2.13 last

last 拼接 sql 语句

mybatis plus 学习笔记_第50张图片

日志:

2.14 exists,notExists

exists 拼接 EXISTS ( sql 语句 ) notExists 是 exists 的相反操作

mybatis plus 学习笔记_第51张图片

日志:

2.15 nested

2.16 having

2.17 apply

3.分页

前提: 配置分页插件,实现物理分页。默认是内存分页

mybatis plus 学习笔记_第52张图片

分页查询:

mybatis plus 学习笔记_第53张图片

 日志:

 输出:

mybatis plus 学习笔记_第54张图片

七.MP生成器

1.导入依赖


 org.apache.velocity
 velocity-engine-core
 2.0

2.创建生成类

3.全局配置

mybatis plus 学习笔记_第55张图片

 4.数据源配置

mybatis plus 学习笔记_第56张图片

5.包和策略配置

mybatis plus 学习笔记_第57张图片
 

八.报错

九.思考

你可能感兴趣的:(mybatis,sql,后端,经验分享)