为了账号安全,请及时绑定邮箱和手机立即绑定

MyBatis-Plus学习:快速入门与实战教程

标签:
Java 数据库
概述

本文将带你快速入门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项目

  1. 创建项目:在 慕课网 或者其他在线开发工具中创建一个新的 Spring Boot 项目。
  2. 项目结构:按照标准的 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 的使用。

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消