mybatisplus复习(黑马)
Posted 姜小白程序
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mybatisplus复习(黑马)相关的知识,希望对你有一定的参考价值。
![](https://image.cha138.com/20230308/65657077d92144d48247460aa86e0a41.jpg)
学习目标
能够基于MyBatisPlus完成标准Dao开发
能够掌握MyBatisPlus的条件查询
能够掌握MyBatisPlus的字段映射与表名映射
能够掌握id生成策略控制
能够理解代码生成器的相关配置
一、MyBatisPlus简介
MyBatisPlus(简称MP)是基于MyBatis框架基础上开发的增强型工具,旨在简化开发、提高效率
开发方式
基于MyBatis使用MyBatisPlus
基于Spring使用MyBatisPlus
基于SpringBoot使用MyBatisPlus
1. 入门案例
![](https://image.cha138.com/20230308/f4d182d861ac4904998105392542c142.jpg)
![](https://image.cha138.com/20230308/3884032190194f88b0afbc4bc317fe2e.jpg)
![](https://image.cha138.com/20230308/df35b3111cfa48f8bc5b19846617bce7.jpg)
![](https://image.cha138.com/20230308/f3fe55ca829c47d086b74d78e4fa0b23.jpg)
①:创建新模块,选择Spring初始化,并配置模块相关基础信息
![](https://image.cha138.com/20230308/452b1c9e55e749b0b03fdbc9c5e18006.jpg)
![](https://image.cha138.com/20230308/8388d163a70d4287afc7c29cb8aaa27b.jpg)
②:选择当前模块需要使用的技术集(仅保留JDBC)
![](https://image.cha138.com/20230308/3796409615704f6d9e0d882b0fe2ccbc.jpg)
![](https://image.cha138.com/20230308/a71e5755056544fca27542b0a4e3c80e.jpg)
![](https://image.cha138.com/20230308/f3fd30faa60142a8a41fe8aa6055bdc3.jpg)
![](https://image.cha138.com/20230308/cac3aea5180e4971b7bbecc04eb8f18e.jpg)
③:手动添加MyBatisPlus起步依赖
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<!--添加mybatisplus的依赖 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.1</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.16</version>
</dependency>
注意事项1:由于mp并未被收录到idea的系统内置配置,无法直接选择加入
注意事项2:如果使用Druid数据源,需要导入对应坐标
④:制作实体类与表结构
(类名与表名对应,属性名与字段名对应)
新建一个数据库mybatisplyus
![](https://image.cha138.com/20230308/73d812363532407a89b0b09bf1af93f5.jpg)
![](https://image.cha138.com/20230308/c274f3ee0c8944469fb663c069b289e8.jpg)
![](https://image.cha138.com/20230308/a8833aefa009451ab42c77c20284d14e.jpg)
![](https://image.cha138.com/20230308/a3fbd88d5abf420d8ff17fa408b1c3a5.jpg)
![](https://image.cha138.com/20230308/a50a8f39f9104204b2a9e7c42e55fbb8.jpg)
⑤:设置Jdbc参数(application.yml)
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/mybatisplus?serverTimezone=UTC
username: root
password: 123456
⑥:定义数据接口,继承BaseMapper
![](https://image.cha138.com/20230308/f4f1bf4b997842a0ac4e8ca5924ad553.jpg)
//使用mp,dao的写法,只需要继承一个父亲接口就可以BaseMapper,还要注意加上泛型
@Mapper
public interface UserDao extends BaseMapper<User>
⑦:测试类中注入dao接口,测试功能
查询所有
@SpringBootTest
public class TestUserDao
@Autowired
private UserDao userDao;
//查询所有
@Test
void testFindAll()
List<User> list = userDao.selectList(null);
System.out.println("list=" +list);
![](https://image.cha138.com/20230308/c54cd97d82ef490ebd54839f0d25a2bb.jpg)
![](https://image.cha138.com/20230308/1fff447271ad4b7d86b7f054881d1882.jpg)
2. MyBatisPlus概述
问题导入
通过入门案例制作,MyBatisPlus的优点有哪些?
2.1 MyBatis介绍
MyBatisPlus(简称MP)是基于MyBatis框架基础上开发的增强型工具,旨在简化开发、提高效率
2.2 MyBatisPlus特性
无侵入:只做增强不做改变,不会对现有工程产生影响
强大的 CRUD 操作:内置通用 Mapper,少量配置即可实现单表CRUD 操作
支持 Lambda:编写查询条件无需担心字段写错
支持主键自动生成
内置分页插件
……
二、标准数据层开发
1. MyBatisPlus的CRUD操作
![](https://image.cha138.com/20230308/f360bcde5b4b4dcaa5004c21b0b53e7d.jpg)
下面用MP进行CURD
1.1添加
// 新增
@Test
void testAdd()
User user = new User();
user.setName("黑马程序员");
user.setPassword("itheima");
user.setAge(12);
user.setTel("4006184000");
int row = userDao.insert(user);
System.out.println("row = " + row);
![](https://image.cha138.com/20230308/ddb17017d46f4f9aab868d556e33bf30.jpg)
![](https://image.cha138.com/20230308/a4ef61f098b1404285b26c9c3fc9a461.jpg)
1.2 删除
这里面因为刚才不小心多增加一个相同内容 所以这里面删除的话id就用雪花
//删除
@Test
void testDelete()
// int row = userDao.deleteById(3);
int row = userDao.deleteById(1631599267871215618L);
System.out.println("row = " + row);
![](https://image.cha138.com/20230308/48be86e3204b492c88bf95ce18fc4a44.jpg)
我们现在把另一个也删除了
![](https://image.cha138.com/20230308/453522c7527b494683629dad04896cf1.jpg)
![](https://image.cha138.com/20230308/105fb52e9b2f492c8aa478411958b944.jpg)
![](https://image.cha138.com/20230308/e268c5324fbe47d8bc0d217400438d52.jpg)
![](https://image.cha138.com/20230308/fc93e2f89ae34f60b61a90b2485c55d4.jpg)
1.3 修改
//修改
@Test
void testUpdate()
//1.先查询数据
User user = userDao.selectById(2);
user.setPassword("777");
//2.修改
int row = userDao.updateById(user);
System.out.println("row = " + row);
![](https://image.cha138.com/20230308/aa07351d731b42a39efba1604747fec5.jpg)
![](https://image.cha138.com/20230308/6a238e9af03942d7b5f01f41e7adafb1.jpg)
1.4 查询单个
//查询单个
@Test
void testFindById()
User user = userDao.selectById(2);
System.out.println("user = " + user);
![](https://image.cha138.com/20230308/8b9754b9ee9b44f0bccacf9e4fac5a04.jpg)
![](https://image.cha138.com/20230308/07dd18ec80604665a434df9f4ffa7688.jpg)
2. Lombok插件介绍
问题导入
有什么简单的办法可以自动生成实体类的GET、SET方法?
Lombok,一个Java类库,提供了一组注解,简化POJO实体类开发。
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
</dependency>
常用注解:==@Data==,为当前实体类在编译期设置对应的get/set方法,无参/无参构造方法,toString方法,hashCode方法,equals方法等
package com.itheima.domain;
import lombok.*;
/*
1 生成getter和setter方法:@Getter、@Setter
生成toString方法:@ToString
生成equals和hashcode方法:@EqualsAndHashCode
2 统一成以上所有:@Data
3 生成空参构造: @NoArgsConstructor
生成全参构造: @AllArgsConstructor
4 lombok还给我们提供了builder的方式创建对象,好处就是可以链式编程。 @Builder【扩展】
*/
@Data
public class User
private Long id;
private String name;
private String password;
private Integer age;
private String tel;
3. MyBatisPlus分页功能
问题导入
思考一下Mybatis分页插件是如何用的?
3.1 分页功能接口
![](https://image.cha138.com/20230308/69a001a07f514e3e975951e82459a2f1.jpg)
![](https://image.cha138.com/20230308/0cb821269e0642bb8d617012e4a460a5.jpg)
![](https://image.cha138.com/20230308/18d7e6e453db4790972568b97cfdef82.jpg)
3.2 MyBatisPlus分页使用
![](https://image.cha138.com/20230308/7bc9969bfe584954a1253a6d8562eb91.jpg)
①:执行分页查询
Ipage 接口
用MP后 是有一个selectPage() 方法 然后这个方法传进去一个对象page 这里面就已经包装了查第几页 每页查第多少条
![](https://image.cha138.com/20230308/759f762673a0429d91b0861cda53c597.jpg)
![](https://image.cha138.com/20230308/407c774d52834bfe9569f72f0a95251e.jpg)
![](https://image.cha138.com/20230308/8962843d75194446a8962488c0f4c51d.jpg)
![](https://image.cha138.com/20230308/09599aec55214c8eae9599d2663f7d23.jpg)
![](https://image.cha138.com/20230308/334d092475874efa9d1cc8598b26efd2.jpg)
//分面查询
@Test
void testFindPage()
/** @param current 当前页
* @param size 每页显示条数*/
//1 创建IPage分页对象,设置分页参数 当前页为第一页 每页显示条数为2条
//IPage<User> page =new Page<>(1,2);
//1 创建IPage分页对象,设置分页参数 当前页为第二页 每页显示条数为2条
IPage<User> page =new Page<>(2,2);
//2 执行分页查询
IPage<User> iPage = userDao.selectPage(page, null);
//3 获取分页结果
System.out.println("当前页码值:"+page.getCurrent());
System.out.println("每页显示数:"+page.getSize());
System.out.println("总页数:"+page.getPages());
System.out.println("总条数:"+page.getTotal());
System.out.println("当前页数据:"+page.getRecords());
![](https://image.cha138.com/20230308/24bd65649622406e8ddaeb4d739727fc.jpg)
![](https://image.cha138.com/20230308/343bed1bc42c45cbaefefc47b6341b68.jpg)
②:设置分页拦截器作为Spring管理的bean
@Configuration
public class MybatisPlusConfig
/*配置分页拦截器,需要打上@Bean的注解,暴露给spring使用*/
@Bean
public MybatisPlusInterceptor mpi()
//1 创建MybatisPlus拦截器对象
MybatisPlusInterceptor mpi =new MybatisPlusInterceptor();
//2 添加分页拦截器
mpi.addInnerInterceptor(new PaginationInnerInterceptor());
//返回MyBatisplus的拦截器对象
return mpi;
![](https://image.cha138.com/20230308/518cb10b28454a089c849792fac9132c.jpg)
重新运行发现 这回正常了
![](https://image.cha138.com/20230308/c0ba43c525ba43819b66ea98400d40f3.jpg)
![](https://image.cha138.com/20230308/69a4d70fce2b40d5bb581e1c16f533ed.jpg)
3.3 开启MyBatisPlus日志
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/mybatisplus?serverTimezone=UTC
username: root
password: 123456
# 开启mp的日志(输出到控制台)
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
![](https://image.cha138.com/20230308/04fa5e9cc7c84539bd67b36bdd0afc8a.jpg)
3.4 解决日志打印过多问题
3.4.1 取消初始化spring日志打印
![](https://image.cha138.com/20230308/18493b023b604a48b5b20b5a306062ee.jpg)
做法:在resources下新建一个logback.xml文件,名称固定,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
</configuration>
关于logback参考播客:https://www.jianshu.com/p/75f9d11ae011
3.4.2 取消SpringBoot启动banner图标
![](https://image.cha138.com/20230308/a4fa1b29164a4ce8a74329eac80b7a4a.jpg)
spring:
main:
banner-mode: off # 关闭SpringBoot启动图标(banner)
3.4.3 取消MybatisPlus启动banner图标
![](https://image.cha138.com/20230308/10ea77d33a3a4c209a6c871873b873fe.jpg)
# mybatis-plus日志控制台输出
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
global-config:
banner: off # 关闭mybatisplus启动图标
三、DQL编程控制
环境准备
![](https://image.cha138.com/20230308/b41b82ffc34140699aeb501e300395fd.jpg)
![](https://image.cha138.com/20230308/88bc84ca671d461580ab2703ed79ad4e.jpg)
![](https://image.cha138.com/20230308/bbc992e248064ecc80720df29c29707d.jpg)
![](https://image.cha138.com/20230308/2b6cbf920e294734893617d96795ac31.jpg)
依赖
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<!--添加mybatisplus的依赖 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.1</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.16</version>
</dependency>
从demo1复制依赖 yml dao bean
测试类test.TestUserDao
![](https://image.cha138.com/20230308/b87f9e07659449a387c3e4eabec79821.jpg)
![](https://image.cha138.com/20230308/cd575f4fa9284a2fb555fb32b754e71e.jpg)
1. 条件查询方式
MyBatisPlus将书写复杂的SQL查询条件进行了封装,使用编程的形式完成查询条件的组合
![](https://image.cha138.com/20230308/f9b8bae2aa274a05ac9be37c0c075fb3.jpg)
1.1 条件查询
无条件全查
@SpringBootTest
public class TestUserDao
@Autowired
private UserDao userDao;
@Test
public void findByCondition()
//查询年龄大于等于18岁 小于65岁的用户
//1.构建条件对象
QueryWrapper<User> qw =new QueryWrapper<>();
//1.1 添加条件
//2.执行查询
List<User> list = userDao.selectList(qw);
System.out.println("list = " + list);
![](https://image.cha138.com/20230308/e142f1c4c0d94c64b24cf216f785ce25.jpg)
1.1.1 方式一:按条件查询
@SpringBootTest
public class TestUserDao
@Autowired
private UserDao userDao;
@Test
public void findByCondition()
//查询年龄大于等于18岁 小于65岁的用户
//1.构建条件对象
QueryWrapper<User> qw =new QueryWrapper<>();
//1.1 添加条件
qw.ge("age",18);
qw.lt("age",65);
//2.执行查询
List<User> list = userDao.selectList(qw);
System.out.println("list = " + list);
![](https://image.cha138.com/20230308/eaaea21eeda94f4fa6d31955070216be.jpg)
![](https://image.cha138.com/20230308/d2f535748a92482c8d6a3ab910f78c92.jpg)
![](https://image.cha138.com/20230308/9abb2263d5a14ddaa99bbc7e25d88476.jpg)
链式写法
`@SpringBootTest
public class TestUserDao
@Autowired
private UserDao userDao;
@Test
public void findByCondition()
//查询年龄大于等于18岁 小于65岁的用户
//1.构建条件对象
QueryWrapper<User> qw =new QueryWrapper<>();
//1.1 添加条件
//常规
// qw.ge("age",18);
// qw.lt("age",65);
//链式写法
qw.ge("age",18).lt("age",65);
//2.执行查询
List<User> list = userDao.selectList(qw);
System.out.println("list = " + list);
![](https://image.cha138.com/20230308/0ebb5e17a7e44789a174608568faf238.jpg)
![](https://image.cha138.com/20230308/90fc5eb7951b4dcdbf291932338b05b1.jpg)
1.1.2 方式二:lambda格式按条件查询
//使用条件查询[使得lambda格式按条件查询]
@Test
public void findByCondition02()
//查询年龄大于等于18岁 小于65岁的用户
//1.构建条件对象
QueryWrapper<User> qw =new QueryWrapper<>();
//1.1 添加条件
//常规
qw.lambda().ge(User::getAge,18).lt(User::getAge,65);
//2.执行查询
List<User> list = userDao.selectList(qw);
System.out.println("list = " + list);
![](https://image.cha138.com/20230308/244059ff678341189ef97a81ca1f0fdb.jpg)
![](https://image.cha138.com/20230308/1af833921f0b47e5bc4a450ebd333cd4.jpg)
1.1.3 方式三:lambda格式按条件查询(推荐)
//使用条件查询[使得lambda格式按条件查询(推荐)]
@Test
public void findByCondition03()
//查询年龄大于等于18岁 小于65岁的用户
//1.构建条件对象
LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<>();
//1.1 添加条件
//使用方法引用定位列的名字,可以很好的防止手动写列名,引发的一些问题。
//常规
lqw.ge(User::getAge,18);
lqw.lt(User::getAge,65);
//2.执行查询
List<User> list = userDao.selectList(lqw);
System.out.println("list = " + list);
![](https://image.cha138.com/20230308/4e0b19e6ee9e4aebac353c7e23694c52.jpg)
![](https://image.cha138.com/20230308/9ff1a78968b7477caaf7ee4483284321.jpg)
1.2 组合条件
1.2.1 并且关系(and)
以上是关于mybatisplus复习(黑马)的主要内容,如果未能解决你的问题,请参考以下文章
黑马程序员SSM框架教程_Spring+SpringMVC+MyBatisPlus笔记(自学用,持续更新)
黑马Java笔记+踩坑汇总JavaSE+JavaWeb+SSM+SpringBoot+瑞吉外卖+SpringCloud/SpringCloudAlibaba+黑马旅游+谷粒商城