> 文章列表 > mybatisplus复习(黑马)

mybatisplus复习(黑马)

mybatisplus复习(黑马)

mybatisplus复习(黑马)

学习目标


能够基于MyBatisPlus完成标准Dao开发

能够掌握MyBatisPlus的条件查询

能够掌握MyBatisPlus的字段映射与表名映射

能够掌握id生成策略控制

能够理解代码生成器的相关配置

一、MyBatisPlus简介


MyBatisPlus(简称MP)是基于MyBatis框架基础上开发的增强型工具,旨在简化开发、提高效率

开发方式

基于MyBatis使用MyBatisPlus

基于Spring使用MyBatisPlus

基于SpringBoot使用MyBatisPlus

1. 入门案例

mybatisplus复习(黑马)
mybatisplus复习(黑马)
mybatisplus复习(黑马)
mybatisplus复习(黑马)
①:创建新模块,选择Spring初始化,并配置模块相关基础信息
mybatisplus复习(黑马)
mybatisplus复习(黑马)
②:选择当前模块需要使用的技术集(仅保留JDBC)
mybatisplus复习(黑马)
mybatisplus复习(黑马)
mybatisplus复习(黑马)
mybatisplus复习(黑马)
③:手动添加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

mybatisplus复习(黑马)
mybatisplus复习(黑马)
mybatisplus复习(黑马)
mybatisplus复习(黑马)
mybatisplus复习(黑马)
⑤:设置Jdbc参数(application.yml)
spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/mybatisplus?serverTimezone=UTCusername: rootpassword: 123456
⑥:定义数据接口,继承BaseMapper
mybatisplus复习(黑马)
//使用mp,dao的写法,只需要继承一个父亲接口就可以BaseMapper,还要注意加上泛型
@Mapper
public interface UserDao extends BaseMapper<User> {}
⑦:测试类中注入dao接口,测试功能

查询所有

@SpringBootTest
public class TestUserDao {@Autowiredprivate UserDao userDao;//查询所有@Testvoid testFindAll() {List<User> list = userDao.selectList(null);System.out.println("list=" +list);}}
mybatisplus复习(黑马)
mybatisplus复习(黑马)

2. MyBatisPlus概述

问题导入

通过入门案例制作,MyBatisPlus的优点有哪些?

2.1 MyBatis介绍

  • MyBatisPlus(简称MP)是基于MyBatis框架基础上开发的增强型工具,旨在简化开发、提高效率

  • 官网:https://mybatis.plus/ https://mp.baomidou.com/

2.2 MyBatisPlus特性

  • 无侵入:只做增强不做改变,不会对现有工程产生影响

  • 强大的 CRUD 操作:内置通用 Mapper,少量配置即可实现单表CRUD 操作

  • 支持 Lambda:编写查询条件无需担心字段写错

  • 支持主键自动生成

  • ……

二、标准数据层开发


1. MyBatisPlus的CRUD操作

mybatisplus复习(黑马)

下面用MP进行CURD

1.1添加

//    新增
@Testvoid 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);}
mybatisplus复习(黑马)
mybatisplus复习(黑马)

1.2 删除

这里面因为刚才不小心多增加一个相同内容 所以这里面删除的话id就用雪花

//删除@Testvoid testDelete() {// int row = userDao.deleteById(3);int row = userDao.deleteById(1631599267871215618L);System.out.println("row = " + row);}

mybatisplus复习(黑马)

我们现在把另一个也删除了

mybatisplus复习(黑马)
mybatisplus复习(黑马)
mybatisplus复习(黑马)
mybatisplus复习(黑马)

1.3 修改

  //修改@Testvoid testUpdate() {//1.先查询数据User user = userDao.selectById(2);user.setPassword("777");//2.修改int row = userDao.updateById(user);System.out.println("row = " + row);}
mybatisplus复习(黑马)
mybatisplus复习(黑马)

1.4 查询单个

     //查询单个@Testvoid testFindById() {User user = userDao.selectById(2);System.out.println("user = " + user);}
mybatisplus复习(黑马)
mybatisplus复习(黑马)

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方法:@EqualsAndHashCode2 统一成以上所有:@Data3 生成空参构造: @NoArgsConstructor生成全参构造: @AllArgsConstructor4 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 分页功能接口

mybatisplus复习(黑马)
mybatisplus复习(黑马)
mybatisplus复习(黑马)

3.2 MyBatisPlus分页使用

mybatisplus复习(黑马)
①:执行分页查询

Ipage 接口

用MP后 是有一个selectPage() 方法 然后这个方法传进去一个对象page 这里面就已经包装了查第几页 每页查第多少条

mybatisplus复习(黑马)
mybatisplus复习(黑马)
mybatisplus复习(黑马)
mybatisplus复习(黑马)
mybatisplus复习(黑马)
    //分面查询@Testvoid 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());}}
mybatisplus复习(黑马)
mybatisplus复习(黑马)

②:设置分页拦截器作为Spring管理的bean

@Configuration
public class MybatisPlusConfig {/*配置分页拦截器,需要打上@Bean的注解,暴露给spring使用*/@Beanpublic MybatisPlusInterceptor mpi(){//1 创建MybatisPlus拦截器对象MybatisPlusInterceptor mpi  =new MybatisPlusInterceptor();//2 添加分页拦截器mpi.addInnerInterceptor(new PaginationInnerInterceptor());//返回MyBatisplus的拦截器对象return mpi;}
}
mybatisplus复习(黑马)

重新运行发现 这回正常了

mybatisplus复习(黑马)
mybatisplus复习(黑马)

3.3 开启MyBatisPlus日志

spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/mybatisplus?serverTimezone=UTCusername: rootpassword: 123456
# 开启mp的日志(输出到控制台)
mybatis-plus:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
mybatisplus复习(黑马)

3.4 解决日志打印过多问题

3.4.1 取消初始化spring日志打印
mybatisplus复习(黑马)

做法:在resources下新建一个logback.xml文件,名称固定,内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<configuration></configuration>

关于logback参考播客:https://www.jianshu.com/p/75f9d11ae011

3.4.2 取消SpringBoot启动banner图标
mybatisplus复习(黑马)
spring:main:banner-mode: off # 关闭SpringBoot启动图标(banner)
3.4.3 取消MybatisPlus启动banner图标
mybatisplus复习(黑马)
# mybatis-plus日志控制台输出
mybatis-plus:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImplglobal-config:banner: off # 关闭mybatisplus启动图标

三、DQL编程控制


环境准备

mybatisplus复习(黑马)

1. 条件查询方式

  • MyBatisPlus将书写复杂的SQL查询条件进行了封装,使用编程的形式完成查询条件的组合

mybatisplus复习(黑马)

1.1 条件查询

1.1.1 方式一:按条件查询