快速入门
SpringBoot整合MyBatis开发过程(复习)
- 创建SpringBoot工程
- 勾选配置使用的技术
- 设置dataSource相关属性(JDBC参数)
- 定义数据层接口映射配置
SpringBoot整合MyBatisPlus开发过程
- 选择MySQl Driver 依赖
- 手动添加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>
- 设置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
- 创建接口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> {
}
- 测试类注入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框架基础上开发的增强型工具,旨在简化开发、提高效率。
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