本文将带你快速入门MyBatis-Plus学习,从环境搭建和依赖配置开始,详细讲解基本的CRUD操作、分页查询以及自定义SQL的使用,并通过一个用户管理系统的实战案例来加深理解。
MyBatis-Plus学习:快速入门与实战教程 MyBatis-Plus简介MyBatis-Plus是什么
MyBatis-Plus 是一个 MyBatis 的增强工具,旨在简化 MyBatis 的操作。它在 MyBatis 的基础上提供了更多强大的功能,使得基于 MyBatis 的开发更加便捷高效。MyBatis-Plus 通过提供一系列的工具类和扩展功能,使得在使用 MyBatis 进行数据库操作时能够更加方便快捷,减少了大量重复的代码编写。
MyBatis-Plus的优势
- 无侵入:MyBatis-Plus 对于使用 MyBatis 的项目来说是无侵入的,即不修改你任何代码,就可以在不改变现有代码的情况下,引入 MyBatis-Plus。
- CRUD增强:在 MyBatis-Plus 基础上提供了各种数据库操作的增强功能,例如分页、条件构造器等。这些功能可以使得开发人员在编写代码时更加高效。
- 分页插件:内置分页插件支持多种数据库,如 MySQL、Oracle、PostgreSQL、SQLServer 等,支持自定义分页插件。
- 性能优化:通过内置的性能分析插件,可以查看 SQL 执行情况,也可以通过代码来查看 SQL 的执行情况。
- 代码生成器:提供代码生成器功能,支持自定义模板生成,快速生成实体类、Mapper、Mapper XML、Service 和 Controller 代码。
MyBatis-Plus与MyBatis的区别
- 基础功能:MyBatis 提供了基础的数据库操作功能,包括 CRUD 操作、关联查询等。
- 增强功能:MyBatis-Plus 在 MyBatis 的基础上提供了更强大的功能,如分页插件、性能分析插件、代码生成器等。
- 简化开发:MyBatis-Plus 通过提供各种工具类和扩展功能,使得基于 MyBatis 的开发变得更加便捷高效。
- 代码生成:MyBatis-Plus 提供了代码生成器功能,可以快速生成实体类、Mapper 及其他相关代码,从而大大提高了开发效率。
创建Spring Boot项目
- 创建项目:在 慕课网 或者其他在线开发工具中创建一个新的 Spring Boot 项目。
- 项目结构:按照标准的 Spring Boot 项目结构创建文件和文件夹,例如
src/main/java/com/example/mybatisplus
用于存放 Java 类,src/main/resources
用于存放资源文件。
添加MyBatis-Plus依赖
在 pom.xml
文件中添加 MyBatis-Plus 的依赖:
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.2</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.4.2</version>
</dependency>
确保版本号与你的 MyBatis-Plus 版本一致。
数据库连接配置
在 application.yml
文件中配置数据库连接信息:
spring:
datasource:
url: jdbc:mysql://localhost:3306/mybatisplus?useUnicode=true&characterEncoding=utf-8&useSSL=false
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
mybatis-plus:
mapper-locations: classpath*:mapper/*.xml
MyBatis-Plus配置详解
MyBatis-Plus 可以通过 Spring Boot 的配置文件 application.yml
来进行一些配置。例如,开启 MyBatis-Plus 的日志输出:
mybatis-plus:
global-config:
db-config:
id-type: auto
mapper-locations: classpath*:mapper/*.xml
这里配置了数据库的主键生成策略为自动模式,并指定了 Mapper XML 文件的位置。
基本CRUD操作实体类定义
定义一个简单的 User
实体类:
package com.example.mybatisplus.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@Data
@TableName("user")
public class User {
@TableId(value = "id", type = IdType.AUTO)
private Long id;
private String name;
private Integer age;
private String email;
}
Mapper接口自动生成
MyBatis-Plus 可以自动生成 Mapper 接口,不需要手动编写。只需定义一个接口,继承 BaseMapper
:
package com.example.mybatisplus.mapper;
import com.example.mybatisplus.entity.User;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface UserMapper extends BaseMapper<User> {
}
常见CRUD操作使用示例
插入操作
@Autowired
private UserMapper userMapper;
public void insertUser() {
User user = new User();
user.setName("张三");
user.setAge(28);
user.setEmail("zhangsan@example.com");
userMapper.insert(user);
}
查询操作
public User getUserById(Long id) {
return userMapper.selectById(id);
}
更新操作
public void updateUser() {
User user = userMapper.selectById(1L);
user.setName("李四");
userMapper.updateById(user);
}
删除操作
public void deleteUser(Long id) {
userMapper.deleteById(id);
}
分页查询
分页查询使用 PageHelper
插件进行分页处理:
import com.baomidou.mybatisplus.extension.plugins.Page;
import com.baomidou.mybatisplus.extension.plugins.pagination.PageHelper;
public Page<User> queryUserWithPage(int currentPage, int pageSize) {
Page<User> page = new Page<>(currentPage, pageSize);
Page<User> userPage = userMapper.selectPage(page, null);
return userPage;
}
自定义SQL的使用
使用lambda表达式
使用 lambda 表达式可以简化 SQL 查询过程:
public List<User> queryUserByLambda() {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(User::getName, "张三");
return userMapper.selectList(queryWrapper);
}
自定义SQL查询
如果需要使用原生 SQL 查询,可以直接使用 @Select
注解:
@Select("SELECT * FROM user WHERE age > #{age}")
List<User> selectByAge(@Param("age") int age);
动态SQL
public List<User> queryUserByDynamicSQL(Integer age, String name) {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
if (age != null) {
queryWrapper.eq("age", age);
}
if (name != null) {
queryWrapper.eq("name", name);
}
return userMapper.selectList(queryWrapper);
}
事务管理与回滚
事务的基本概念
事务是一组操作的集合,这些操作要么全部执行成功,要么全部都不执行。事务具有以下四个特性:
- 原子性:事务是一个不可分割的工作单位,事务中的操作要么全部成功,要么全部失败。
- 一致性:事务必须使数据库从一个一致性状态转变到另一个一致性状态。
- 隔离性:事务的执行不能被其他事务干扰。
- 持久性:一个事务一旦被提交,其对数据库中数据的改变就是永久性的。
事务的开启与提交
使用 @Transactional
注解来管理事务:
import org.springframework.transaction.annotation.Transactional;
public class UserService {
@Autowired
private UserMapper userMapper;
@Transactional
public void insertUserTransactional(User user) {
userMapper.insert(user);
}
}
事务的回滚处理
事务回滚可以通过 Transactional
注解的 rollbackFor
属性来指定哪些异常会导致事务回滚:
@Transactional(rollbackFor = Exception.class)
public void insertUserTransactional(User user) {
userMapper.insert(user);
// 模拟异常
if (true) {
throw new RuntimeException("异常发生");
}
}
更全面的事务管理示例
import org.springframework.transaction.annotation.Transactional;
import org.springframework.stereotype.Service;
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
public void updateUserTransactional(User user) {
userMapper.updateById(user);
if (true) {
throw new RuntimeException("异常发生");
}
}
}
``
## 实战案例:用户管理系统
### 用户信息增删改查
定义一个 `UserService` 类来实现用户信息的增删改查:
```java
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
public void insertUser(User user) {
userMapper.insert(user);
}
public User getUserById(Long id) {
return userMapper.selectById(id);
}
public void updateUser(User user) {
userMapper.updateById(user);
}
public void deleteUser(Long id) {
userMapper.deleteById(id);
}
}
用户信息分页查询
实现用户信息的分页查询功能:
public Page<User> queryUserWithPage(int currentPage, int pageSize) {
Page<User> page = new Page<>(currentPage, pageSize);
Page<User> userPage = userMapper.selectPage(page, null);
return userPage;
}
事务操作示例
演示事务的开启与回滚:
@Transactional(rollbackFor = Exception.class)
public void insertUserTransactional(User user) {
userMapper.insert(user);
if (true) {
throw new RuntimeException("异常发生");
}
}
通过以上内容,我们学习了 MyBatis-Plus 的基本使用方法,并通过一个简单的用户管理系统的实战案例,演示了 MyBatis-Plus 在实际项目中的应用。从环境搭建、依赖配置、基本 CRUD 操作到自定义 SQL 的使用、事务管理,我们详细介绍了 MyBatis-Plus 的各个功能点。希望这篇文章能够帮助你快速掌握 MyBatis-Plus 的使用。
共同学习,写下你的评论
评论加载中...
作者其他优质文章