学习目标
(如果没有了解可以去我主页看看 第一至三章的内容来学习)通过前面两章的学习,我们已经对数据访问层两大核心框架JPA(Hibernate)和MyBAtis进行了学习,这两大框架一个是全自动ORM,一个是半自动ORM,且各有优势及应用场景。
本章我们继续学习数据访问层技术:MyBAtis-Plus。MyBAtis-Plus是一个MyBAtis的增强工具,在MyBAtis的基础上只做增强不做改变,原MyBAtis的用法和功能在MyBAtis-Plus中依然可以继续使用;同时MyBAtis-Plus仅仅通过少量配置即可实现单表大部分CRUD操作,内置分页插件,复杂查询提供了条件构造器,这与JPA又非常相似。所以,MyBAtis-Plus可说是结合了JPA和MyBAtis两个框架的优点。
本章在最后我们还会学习SpringBoot集成Druid数据源,Druid数据源是阿里巴巴开源平台上的一个项目,整个项目由数据库连接池、插件框架和SQL解析器组成,功能强大,应用广泛。
4.1 Spring Boot 集成 MyBAtis-Plus
4.1.1 MyBAtis-Plus简介
MyBAtis-Plus(简称MP)是一个 MyBAtis 的增强工具,在MyBAtis的基础上只做增强不做改变,为简化开发、提高效率而生。它继承了 MyBatis 的所有特性并加入了自己的功能,比如内置的分页插件、乐观锁插件、性能分析插件、条件构造器等等,极大地简化了 CRUD 操作,让开发者能够更专注于业务逻辑的实现。
下面是一个简单的 MyBatis-Plus 的 Java 代码示例,演示了如何使用 MyBatis-Plus 进行数据的增删改查操作。
首先,确保你的项目中已经加入了 MyBatis-Plus 的依赖。以下是一个 Maven 依赖示例:
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>你的MyBatis-Plus版本号</version>
</dependency>
实体类(Entity)
假设我们有一个用户表 user,对应的实体类 User 如下:
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
@TableName("user")
public class User {
@TableId(type = IdType.AUTO)
private Long id;
private String name;
private Integer age;
private String email;
// 省略getter和setter方法
}
Mapper 接口
MyBatis-Plus 会根据 Mapper 接口自动生成 SQL 语句,因此通常我们不需要编写具体的 SQL 语句。
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
public interface UserMapper extends BaseMapper<User> {
// 继承BaseMapper后,已经拥有了很多CRUD方法,如果需要特殊SQL,可以在这里扩展
}
Service 层
在 Service 层中,我们可以注入 Mapper 接口来进行业务逻辑处理。
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
public User getUserById(Long id) {
return userMapper.selectById(id);
}
// 其他业务逻辑...
}
Controller 层
在 Controller 层中,我们可以调用 Service 层的方法,并返回相应的结果给前端。
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/user/{id}")
public User getUserById(@PathVariable Long id) {
return userService.getUserById(id);
}
// 其他接口...
}
这个示例简单展示了 MyBatis-Plus 的基本使用方式,通过继承 BaseMapper 接口,你可以很方便地进行 CRUD 操作,而无需编写大量的 SQL 语句。MyBatis-Plus 还提供了很多强大的功能,如分页插件、条件构造器等,可以帮助你更高效地开发。
MyBAtis-Plus特性:
- 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
- 损耗小:启动即会自动注入基本CURD,性能基本无损耗,直接面向对象操作
- 支持Lambda形式调用:通过Lambda表达式,方便的编写各类查询条件,无需再担心字段写错
- 支持多种数据库:支持MySQL、MariaDB、Oracle、DB2、H2、HSQL、SQLite、Postgre、SQLServer2005、SQLServer等多种数据库
- 强大的CRUD操作:内置通用Mapper、通用Service,仅仅通过少量配置即可实现单表大部分CRUD操作,更有强大的条件构造器,满足各类使用需求
- 内置分页插件:基于MyBAtis物理分页,开发者无需关心具体操作,配置好插件之后,写分页等同于普通List查询
4.1.2 Lombok简介和安装
Lombok是一个Java库,它通过注解的方式自动插入编辑器并构建工具中,从而简化Java代码。它自动化了Java对象的生成,如getter、setter、equals、hashCode、toString方法等,从而减少了样板代码的数量,使得代码更加简洁。Lombok通过注解的方式,在编译时期自动生成这些方法,而不需要开发者手动编写。
Lombok的安装
Lombok的安装主要涉及两个步骤:
- 添加Lombok依赖:在你的项目中添加Lombok的Maven或Gradle依赖。
- IDE插件安装:大多数流行的Java IDE(如IntelliJ IDEA, Eclipse, NetBeans等)都支持Lombok,但需要安装相应的插件。
Maven依赖
在pom.xml文件中添加Lombok的Maven依赖:
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>最新版本号</version>
<scope>provided</scope>
</dependency>
请确保将最新版本号替换为Lombok的当前版本。
Gradle依赖
在build.gradle文件中添加Lombok的Gradle依赖:
dependencies {
compileOnly 'org.projectlombok:lombok:最新版本号'
annotationProcessor 'org.projectlombok:lombok:最新版本号'
testCompileOnly 'org.projectlombok:lombok:最新版本号'
testAnnotationProcessor 'org.projectlombok:lombok:最新版本号'
}
同样,请将最新版本号替换为Lombok的当前版本。
IDE插件安装
以IntelliJ IDEA为例,安装Lombok插件的步骤如下:
- 打开IDEA,进入File -> Settings(Windows)或IntelliJ IDEA -> Preferences(Mac)。
- 在设置窗口中,选择Plugins。
- 在Marketplace标签页中搜索Lombok。
- 找到Lombok插件后,点击Install按钮进行安装。
- 安装完成后,重启IDEA以使插件生效。
Java代码示例
使用Lombok注解的Java类示例:
import lombok.Data;
@Data // 自动生成getter、setter、equals、hashCode和toString方法
public class User {
private Long id;
private String name;
private Integer age;
// 无需手动编写getter、setter等方法
}
public class Main {
public static void main(String[] args) {
User user = new User();
user.setId(1L);
user.setName("John Doe");
user.setAge(30);
System.out.println(user.toString()); // 自动生成的toString方法
}
}
在这个例子中,@Data注解自动为User类生成了getter、setter、equals、hashCode和toString方法,从而减少了样板代码。在Main类中,我们可以直接调用这些方法而无需手动编写它们。
4.1.3 快速上手
MyBatis-Plus 是一个 MyBatis 的增强工具,它简化了 CRUD 操作,提供了许多便利的功能,如内置的分页插件、乐观锁插件、自动填充字段等。下面是一个简单的 MyBatis-Plus 快速上手的 Java 代码示例,展示如何使用 MyBatis-Plus 进行数据库操作。
- 添加依赖
首先,确保你的项目中已经加入了 MyBatis-Plus 的依赖。以下是一个 Maven 依赖示例:
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>你的MyBatis-Plus版本号</version>
</dependency>
<!-- 如果你使用的是 Spring Boot,可能还需要添加数据库连接池等依赖 -->
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
请将 你的MyBatis-Plus版本号 替换为当前最新的或你项目中指定的 MyBatis-Plus 版本号。
- 配置 MyBatis-Plus
在 Spring Boot 的 application.properties 或 application.yml 文件中配置 MyBatis-Plus 和数据库连接信息。
# application.properties 示例
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.show-sql=true
# MyBatis-Plus 配置
mybatis-plus.mapper-locations=classpath:/mapper/**/*.xml
mybatis-plus.type-aliases-package=com.example.demo.entity
mybatis-plus.global-config.db-config.id-type=auto
注意:上面的 mybatis-plus.mapper-locations 和 mybatis-plus.type-aliases-package 需要根据你的项目结构调整。
- 实体类
创建一个实体类,使用 MyBatis-Plus 提供的注解来标记字段。
package com.example.demo.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou