MyBatisPlus学习笔记

发布于:2022-12-21 ⋅ 阅读:(548) ⋅ 点赞:(0)

快速入门

SpringBoot整合MyBatis开发过程(复习)

  • 创建SpringBoot工程
  • 勾选配置使用的技术
  • 设置dataSource相关属性(JDBC参数)
  • 定义数据层接口映射配置

SpringBoot整合MyBatisPlus开发过程

  1. 选择MySQl Driver 依赖

在这里插入图片描述

  1. 手动添加MP依赖
<!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-boot-starter -->
<dependency>
  <groupId>com.baomidou</groupId>
  <artifactId>mybatis-plus-boot-starter</artifactId>
  <version>3.4.2</version>
</dependency>
  1. 设置Jdbc参数(application.yml)
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/mydatabase
    username: root
    password: wangpeng
    type: com.alibaba.druid.pool.DruidDataSource
  1. 创建接口BookDao,并继承BaseMapper,泛型为实体类名称Book
package com.wangpeng.dao;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.wangpeng.domain.Book;
import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface BookDao extends BaseMapper<Book> {
}
  1. 测试类注入dao接口,测试功能。
package com.wangpeng;

import com.wangpeng.dao.BookDao;
import com.wangpeng.domain.Book;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;

@SpringBootTest
class SpringbootMybatisplusApplicationTests {

    @Autowired
    private BookDao bookDao;
    @Test
    void selectAll() {
        List<Book> books = bookDao.selectList(null);
        System.out.println(books);
    }
}

MybatisPlus 简介

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

MybatisPlus

CRUD标准开发

在这里插入图片描述

package com.wangpeng;

import com.wangpeng.dao.BookDao;
import com.wangpeng.domain.Book;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;

@SpringBootTest
class SpringbootMybatisplusApplicationTests {

    @Autowired
    private BookDao bookDao;
    @Test
    void save() {
        Book book = new Book();
        book.setName("数学之美");
        book.setPrice(58.6);
        bookDao.insert(book);
    }

    @Test
    void delete() {
        bookDao.deleteById(6);
    }

    @Test
    void update() {
        Book book = new Book();
        book.setId(5L);
        book.setName("Java程序开发教程");
        book.setPrice(60.9);
        bookDao.updateById(book);
    }

    @Test
    void selectById() {
        Book book = bookDao.selectById(2L);
        System.out.println(book);
    }

    @Test
    void selectAll() {
        List<Book> books = bookDao.selectList(null);
        System.out.println(books);
    }

}

在这里插入图片描述
你有没有发现,写实体类太烦了。这里笔者将给出一种书写实体类的便捷方法。通过注解的方法来代替。
Lombok ,一个Java类库,提供了一组注解,简化POJO实体类开发

 <dependency>
	   <groupId>org.projectlombok</groupId>
	   <artifactId>lombok</artifactId>
 </dependency>

方法一:

package com.wangpeng.domain;
import lombok.*;

@NoArgsConstructor
@AllArgsConstructor
@Setter
@Getter
@ToString
public class Book {
    private long id;
    private String name;
    private double price;

}


方法二:

不包括构造方法

package com.wangpeng.domain;
import lombok.*;

@Data
public class Book {
    private long id;
    private String name;
    private double price;

}

分页查询

在这里插入图片描述

DQL语句

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

    在这里插入图片描述

// 方式一
QueryWrapper qw = new QueryWrapper();
// “LT”是“Less Than”的缩写,意思是 “小于”
qw.lt("price", 48);
List list = bookDao.selectList(qw);
System.out.println(list);
==> Preparing: SELECT id,name,price FROM book WHERE (price < ?)
==> Parameters: 48(Integer)
<==   Columns: id, name, price
<==     Row: 1, 数据结构, 45.0
 //方式二:lambda格式按条件查询
 QueryWrapper<Book> qw = new QueryWrapper<>();
 qw.lambda().lt(Book::getPrice, 48);
 List<Book> books = bookDao.selectList(qw);
 System.out.println(books);

 //方式三:lambda格式按条件查询
 LambdaQueryWrapper<Book> lqw = new LambdaQueryWrapper<>();
 lqw.lt(Book::getPrice, 48);
 List<Book> book = bookDao.selectList(lqw);
 System.out.println(book);
 //方式四
 LambdaQueryWrapper<Book> lqw = new LambdaQueryWrapper<>();
 lqw.lt(Book::getPrice, 98);
 // “GT”经常作为“Greater Than”的缩写来使用
 lqw.gt(Book::getPrice, 48);
 List<Book> books = bookDao.selectList(lqw);
 System.out.println(books);
QueryBook queryBook = new QueryBook();
queryBook.setPrice(100.0);
queryBook.setEndPrice(25.0);
LambdaQueryWrapper<Book> lqw = new LambdaQueryWrapper<>();
// condition为true时,连接条件
lqw.lt(queryBook.getPrice() != null, Book::getPrice, queryBook.getPrice());
lqw.gt(queryBook.getEndPrice() != null, Book::getPrice, queryBook.getEndPrice());
List<Book> books = bookDao.selectList(lqw);
System.out.println(books);

查询投影

QueryWrapper<Book> qw = new QueryWrapper<>();
qw.select("id", "name");
List<Book> books = bookDao.selectList(qw);
System.out.println(books);
LambdaQueryWrapper<Book> lqw = new LambdaQueryWrapper<>();
lqw.select(Book::getId, Book::getName);
List<Book> books = bookDao.selectList(lqw);
System.out.println(books);
==>  Preparing: SELECT id,name FROM book
==> Parameters: 
<==    Columns: id, name
<==        Row: 1, 数据结构
<==        Row: 2, 操作系统
<==        Row: 3, 计算机网络
<==        Row: 4, 计算机组成原理
<==        Row: 5, Java程序开发教程
<==        Row: 7, 数学之美
<==      Total: 6

网站公告

今日签到

点亮在社区的每一天
去签到