MybatisPlus

一、简介

(一)快速入门

  1. 创建SpringBoot项目,创建时不勾选MyBatis坐标。
  2. 添加MyBatisPlus坐标(可以再加上druid坐标)
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.1</version>
        </dependency>
  1. 修改.yml文件
  2. 创建BookDao,直接继承BaseMapper<实体类名>,数据层就算写完了,自动实现基本的CRUD。
@Mapper
public interface BookDao extends BaseMapper<Book> {
}

(二)概述

MyBatisPlus是基于MyBatis框架基础上开发的增强工具,效果是简化开发、提高效率。
MyBatisPlus的开发方式有很多种:

  • 基于MyBatis使用MyBatisPlus
  • 基于Spring使用MyBatisPlus
  • 基于SpringBoot使用MyBatisPlus
    官网1
    官网2

二、标准数据层开发

在这里插入图片描述
lombok:快速制作实体类

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <!-- 不需要参与打包,不设置也没问题 -->
            <scope>provided</scope>
        </dependency>

实体类中:使用注解代替原方法

@Getter
@Setter
@NoArgsConstructor //无参构造
@AllArgsConstructor //全部带参构造
@ToString
@EqualsAndHashCode
public class Book {
    private Integer id;
    private String name;
    private String type;
    private String description;
}

或者:@Data代替了上面所有的方法(但不包括构造方法

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Book {
    private Integer id;
    private String name;
    private String type;
    private String description;
}

(一)分页功能

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

三、DQL控制

(一)条件查询方式

在这里插入图片描述

        //方式一:按条件查询
        QueryWrapper<Book> qw = new QueryWrapper<Book>();
        //小于less than
        qw.lt("id", 3); //表示,id小于3的数据
        //大于greater than
        qw.gt("id", 5);
        //等于equal
        qw.eq("id", 3);
        //如果是and的多条件,可以用链式编程
        qw.lt("id", 10).gt("id", 5);
        //如果是or的多条件,可以用链式编程,如小于5或者大于10
        qw.lt("id", 5).gt("id", 10);
        List<Book> bookList = bookDao.selectList(qw);
        System.out.println(bookList);

        //方式二:lambda格式按条件查询
        QueryWrapper<Book> qw2 = new QueryWrapper<>();
        qw2.lambda().lt(Book::getId, 3);	//加上lambda()方法
        List<Book> bookList1 = bookDao.selectList(qw2);
        System.out.println(bookList1);

        //方式三:lambda格式条件查询,常用方式
        LambdaQueryWrapper<Book> qw3 = new LambdaQueryWrapper<>();
        qw3.lt(Book::getId, 3);	//对象直接用的lambda生成,不用加lambda()
        List<Book> bookList2 = bookDao.selectList(qw3);
        System.out.println(bookList2);

总结:lt小于,gt大于,le小于等于,ge大于等于,eq等于,between介于,.likeLeft(表示%王),.likeRight(王%)
更多查询条件

(1)Null值处理

条件查询对null判定
场景:在搜索一个商品价格时,可能会指定100~500,也可能只指定>100,这时就需要动态调整语句(相当于动态SQL)
在这里插入图片描述
在这里插入图片描述

(二)查询投影

查询投影:设置查询完成之后的结果长什么样(结果展示的样式)。

    /**
     * 查询投影
     */
    @Test
    void testSelectProjection() {
        //方式一:Lambda
        LambdaQueryWrapper<Book> lqw = new LambdaQueryWrapper<>();
        //select()方法就是设置查询投影的,下面是查询结果只显示id和name,相当于select id,name from table;
        lqw.select(Book::getId, Book::getName);
        List<Book> bookList1 = bookDao.selectList(lqw);
        System.out.println(bookList1);

        //方式二:不使用Lambda,一般用这种形式
        QueryWrapper<Book> bqw = new QueryWrapper<>();
        //不是lambda,就直接写字符串
        bqw.select("id", "name", "type");
        List<Book> bookList2 = bookDao.selectList(bqw);
        System.out.println(bookList2);
    }

处理SQL语句中Count(*)和GroupBy的问题。

    /**
     * 分组问题,只能使用条件查询,不能使用Lambda查询
     */
    @Test
    void testSelectByGroup() {
        QueryWrapper<Book> bqw = new QueryWrapper<>();
        bqw.select("count(*) as count", "type");
        bqw.groupBy("type");
        //查询就不能用List,要用Maps
        List<Map<String, Object>> maps = bookDao.selectMaps(bqw);
        System.out.println(maps);
    }

在这里插入图片描述

(三)字段映射与表名映射

问题一:表明中的字段名和实体类中的属性名不一致
在这里插入图片描述
问题二:实体类的有一个属性,而表中没这字段(不需要存在表里),如何在查询时忽略这个属性。
在这里插入图片描述
问题三:实体类有一个password属性,在查询时不希望查到这个字段
在这里插入图片描述
问题四:表名和实体类名不一致,如何对应
在这里插入图片描述

四、DML控制

(一)Insert

(1)id生成策略控制

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
对于IdType,可以在yml做全局配置,这样一个项目中的多个实体类就不用每个都去配置。
在这里插入图片描述
全局配置的内容还有很多
视频讲解,在最末尾

(二)Delete

多数据操作:比如淘宝全选购物车。
删除:userDao.deleteBatchIds(Collection<E>),传入一个包含id的集合
多条查询:userDao.selectBatchIds(Collection<E>),和删除一样

(1)逻辑删除

在这里插入图片描述

(三)Update

五、快速开发

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值