亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

MyBatis Plus資料:新手入門教程與實踐指南

概述

本文将详细介绍 MyBatis Plus 的使用方法和优势,帮助读者更好地理解和掌握 MyBatis Plus。文章结构包括 MyBatis Plus 的简介、环境搭建、基本 CRUD 操作、条件构造器与分页插件、动态 SQL 与自定义 SQL 注入,以及通过一个简单的图书管理系统实例来演示 MyBatis Plus 的应用。

MyBatis Plus简介
MyBatis Plus是什么

MyBatis Plus 是一个 MyBatis 的增强工具,它在 MyBatis 的基础上增加了许多开箱即用的功能,如分页、CRUD操作和条件构造器等。它简化了开发人员的编码工作,让开发变得更高效和简单。MyBatis Plus 适用于任何基于 MyBatis 的持久层框架,旨在提高开发效率和减少重复代码。

为什么使用MyBatis Plus

使用 MyBatis Plus 可以带来以下好处:

  1. 简化开发流程:MyBatis Plus 提供了丰富的开箱即用功能,如分页、CRUD操作等,使得开发人员可以专注于业务逻辑的实现,而无需花费大量时间在增删改查等基础操作上。
  2. 提升开发效率:通过使用 MyBatis Plus 提供的注解和方法,可以大幅减少代码量,提高开发效率。例如,一个简单的 CRUD 操作可以通过几行代码实现。
  3. 易于维护:由于 MyBatis Plus 提供了统一的接口和方法,使得代码结构更加清晰,易于维护。
MyBatis Plus与MyBatis的区别

MyBatis Plus 是在 MyBatis 的基础上进行增强的,主要区别如下:

  1. 功能增强:MyBatis Plus 在 MyBatis 的基础上增加了许多增强的功能,如分页、CRUD操作、条件构造器等,使得开发更加高效。
  2. 简化操作:MyBatis Plus 提供了许多开箱即用的功能,可以简化开发人员的编码工作,而 MyBatis 则需要手动编写 SQL 语句。
  3. 与 MyBatis 兼容:MyBatis Plus 与 MyBatis 兼容,可以无缝对接 MyBatis 已有的项目,不需要对现有代码进行大规模改动。
快速开始
环境搭建

为了使用 MyBatis Plus,你需要先搭建一个 Java 开发环境,包括 Java 开发工具(如 IntelliJ IDEA 或 Eclipse)、数据库(如 MySQL)和数据库连接驱动。

环境准备

  • 开发工具:建议使用 IntelliJ IDEA 或 Eclipse。
  • 数据库:安装 MySQL 数据库。
  • 数据库驱动:下载并配置 MySQL 的 JDBC 驱动。

配置数据库连接信息

在你的项目中配置数据库连接信息。如果你使用 Spring Boot,可以在 application.properties 文件中添加以下配置:

spring.datasource.url=jdbc:mysql://localhost:3306/mybatis_plus?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
mybatis-plus.mapper-locations=classpath*:mapper/*.xml
添加依赖

在你的项目中添加 MyBatis Plus 的依赖。如果你使用 Maven 作为构建工具,可以在 pom.xml 文件中添加以下依赖:

<dependencies>
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>3.4.2</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.21</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.10.3</version>
    </dependency>
</dependencies>

如果你使用 Gradle 作为构建工具,可以在 build.gradle 文件中添加以下依赖:

dependencies {
    implementation 'com.baomidou:mybatis-plus-boot-starter:3.4.2'
    implementation 'mysql:mysql-connector-java:8.0.21'
    implementation 'com.fasterxml.jackson.core:jackson-databind:2.10.3'
}
创建数据表和实体类

创建一个简单的数据表 user,并编写对应的实体类 User

创建数据表

执行以下 SQL 语句,创建 user 表:

CREATE TABLE `user` (
    `id`   BIGINT(19) NOT NULL COMMENT '主键ID',
    `name` VARCHAR(30) DEFAULT NULL COMMENT '姓名',
    `age`  INT(11) DEFAULT NULL COMMENT '年龄',
    `email` VARCHAR(50) DEFAULT NULL COMMENT '邮箱',
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表';

创建实体类

编写 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 方法
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}
基本CRUD操作
增加数据

使用 MyBatis Plus 的 insert 方法实现数据的插入。

实例代码

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.springframework.stereotype.Service;

@Service
public class UserService extends ServiceImpl<UserMapper, User> {
    public boolean addUser(User user) {
        return save(user);
    }
}

测试代码

import java.util.UUID;

public class Test {
    public static void main(String[] args) {
        User user = new User();
        user.setId(null); // 自动生成主键
        user.setName("张三");
        user.setAge(25);
        user.setEmail("[email protected]");

        boolean result = userService.addUser(user);
        System.out.println("插入结果:" + result);
    }
}
查询数据

使用 MyBatis Plus 的 selectById 方法查询单个数据,或者使用 selectList 方法查询多个数据。

实例代码

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.springframework.stereotype.Service;

@Service
public class UserService extends ServiceImpl<UserMapper, User> {
    public User getUserById(Long id) {
        return getOne(new QueryWrapper<User>().eq("id", id));
    }

    public List<User> getAllUsers() {
        return list();
    }
}

测试代码

public class Test {
    public static void main(String[] args) {
        User user = userService.getUserById(1L);
        System.out.println("用户信息:" + user.getName());

        List<User> users = userService.getAllUsers();
        users.forEach(user -> {
            System.out.println("用户信息:" + user.getName());
        });
    }
}
更新数据

使用 MyBatis Plus 的 update 方法实现数据的更新。

实例代码

import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import org.springframework.stereotype.Service;

@Service
public class UserService extends ServiceImpl<UserMapper, User> {
    public boolean updateUser(User user) {
        return updateById(user);
    }
}

测试代码

public class Test {
    public static void main(String[] args) {
        User user = new User();
        user.setId(1L);
        user.setName("李四");
        user.setAge(30);
        user.setEmail("[email protected]");

        boolean result = userService.updateUser(user);
        System.out.println("更新结果:" + result);
    }
}
删除数据

使用 MyBatis Plus 的 deleteById 方法实现数据的删除。

实例代码

import org.springframework.stereotype.Service;

@Service
public class UserService extends ServiceImpl<UserMapper, User> {
    public boolean deleteUserById(Long id) {
        return removeById(id);
    }
}

测试代码

public class Test {
    public static void main(String[] args) {
        boolean result = userService.deleteUserById(1L);
        System.out.println("删除结果:" + result);
    }
}
条件构造器与分页插件
使用条件构造器

条件构造器允许构建复杂的查询条件,用于实现更加灵活的数据查询。

实例代码

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.springframework.stereotype.Service;

@Service
public class UserService extends ServiceImpl<UserMapper, User> {
    public List<User> getUsersByConditions(String name, Integer age) {
        return list(new QueryWrapper<User>()
                .eq(name != null, "name", name)
                .gt(age != null, "age", age)
        );
    }
}

测试代码

public class Test {
    public static void main(String[] args) {
        List<User> users = userService.getUsersByConditions("张三", null);
        users.forEach(user -> {
            System.out.println("用户信息:" + user.getName());
        });
    }
}
强大的分页插件配置与使用

MyBatis Plus 提供了强大的分页插件,可以轻松实现分页查询。

配置分页插件

在 Spring Boot 配置文件中配置分页插件:

import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MybatisPlusConfig {
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInterceptor());
        return interceptor;
    }
}

使用分页插件

在查询方法中使用分页插件:

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.springframework.stereotype.Service;

@Service
public class UserService extends ServiceImpl<UserMapper, User> {
    public List<User> getUsersByPage(int currentPage, int pageSize) {
        return page(new Page<>(currentPage, pageSize),
                new QueryWrapper<User>()
        );
    }
}

测试代码

public class Test {
    public static void main(String[] args) {
        IPage<User> page = userService.getUsersByPage(1, 10);
        System.out.println("当前页码:" + page.getCurrent());
        System.out.println("每页记录数:" + page.getSize());
        System.out.println("总记录数:" + page.getTotal());
        System.out.println("总页数:" + page.getPages());
        System.out.println("数据:" + page.getRecords());
    }
}
动态SQL与自定义Sql注入
使用动态SQL

动态 SQL 提供了更加灵活的 SQL 生成能力,可以根据运行时的条件动态生成 SQL。

实例代码

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.springframework.stereotype.Service;

@Service
public class UserService extends ServiceImpl<UserMapper, User> {
    public List<User> getUsersByDynamicSql(String name, Integer age) {
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        if (name != null) {
            queryWrapper.eq("name", name);
        }
        if (age != null) {
            queryWrapper.eq("age", age);
        }
        return list(queryWrapper);
    }
}

测试代码

public class Test {
    public static void main(String[] args) {
        List<User> users = userService.getUsersByDynamicSql("张三", null);
        users.forEach(user -> {
            System.out.println("用户信息:" + user.getName());
        });
    }
}
实例演示自定义Sql注入

自定义 SQL 注入允许直接编写 SQL 语句,实现更复杂的数据操作。

实例代码

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;

@Service
public class UserService extends ServiceImpl<UserMapper, User> {
    public List<User> getUsersByCustomSql() {
        return list(com.baomidou.mybatisplus.core.engine.SqlScriptEngine.getInstance().render("SELECT * FROM user WHERE age > #{age}", Collections.singletonMap("age", 20)));
    }
}

测试代码

public class Test {
    public static void main(String[] args) {
        List<User> users = userService.getUsersByCustomSql();
        users.forEach(user -> {
            System.out.println("用户信息:" + user.getName());
        });
    }
}
实战演练:搭建一个简单的CRUD项目
项目需求分析

假设我们正在开发一个简单的图书管理系统,需要实现图书的增删改查功能。具体需求如下:

  1. 增加图书:支持添加一本图书。
  2. 查询图书:支持根据图书名称或类别查询图书。
  3. 更新图书:支持修改图书的信息。
  4. 删除图书:支持删除一本图书。

创建实体类

编写 Book 类,映射图书表 book

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;

@TableName("book")
public class Book {
    @TableId(type = IdType.AUTO)
    private Long id;
    private String name;
    private String author;
    private String category;

    // getter 和 setter 方法
    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAuthor() {
        return author;
    }

    public void setAuthor(String author) {
        this.author = author;
    }

    public String getCategory() {
        return category;
    }

    public void setCategory(String category) {
        this.category = category;
    }
}

创建数据表

执行以下 SQL 语句,创建 book 表:

CREATE TABLE `book` (
    `id`   BIGINT(19) NOT NULL COMMENT '主键ID',
    `name` VARCHAR(30) DEFAULT NULL COMMENT '书名',
    `author` VARCHAR(30) DEFAULT NULL COMMENT '作者',
    `category` VARCHAR(30) DEFAULT NULL COMMENT '类别',
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='图书表';

创建 Mapper 接口和实现类

编写 BookMapper 接口和 BookMapper 实现类。

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.Book;

public interface BookMapper extends BaseMapper<Book> {
}

创建 Service 接口和实现类

编写 BookService 接口和 BookServiceImpl 实现类。

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.Book;
import com.example.BookMapper;
import org.springframework.stereotype.Service;

@Service
public class BookServiceImpl extends ServiceImpl<BookMapper, Book> implements BookService {
    public boolean addBook(Book book) {
        return save(book);
    }

    public Book getBookById(Long id) {
        return getOne(new QueryWrapper<Book>().eq("id", id));
    }

    public boolean updateBook(Book book) {
        return updateById(book);
    }

    public boolean deleteBookById(Long id) {
        return removeById(id);
    }

    public List<Book> getBooksByConditions(String name, String category) {
        return list(new QueryWrapper<Book>()
                .eq(name != null, "name", name)
                .eq(category != null, "category", category)
        );
    }
}

创建 Controller 类

编写 BookController 类,实现接口的 HTTP 请求处理。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
public class BookController {
    @Autowired
    private BookService bookService;

    @PostMapping("/addBook")
    public boolean addBook(@RequestBody Book book) {
        return bookService.addBook(book);
    }

    @GetMapping("/getBookById/{id}")
    public Book getBookById(@PathVariable Long id) {
        return bookService.getBookById(id);
    }

    @PutMapping("/updateBook")
    public boolean updateBook(@RequestBody Book book) {
        return bookService.updateBook(book);
    }

    @DeleteMapping("/deleteBookById/{id}")
    public boolean deleteBookById(@PathVariable Long id) {
        return bookService.deleteBookById(id);
    }

    @GetMapping("/getBooksByConditions")
    public List<Book> getBooksByConditions(@RequestParam(required = false) String name,
                                           @RequestParam(required = false) String category) {
        return bookService.getBooksByConditions(name, category);
    }
}
测试与调试

测试代码

编写测试代码,验证上述功能是否正常。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.junit.Test;
import org.junit.runner.RunWith;

import java.util.List;

@RunWith(SpringRunner.class)
@SpringBootTest
public class BookControllerTest {
    @Autowired
    private BookService bookService;

    @Test
    public void testAddBook() {
        Book book = new Book();
        book.setName("Java编程思想");
        book.setAuthor("Herbert Schildt");
        book.setCategory("编程技术");

        boolean result = bookService.addBook(book);
        System.out.println("插入结果:" + result);
    }

    @Test
    public void testGetBookById() {
        Book book = bookService.getBookById(1L);
        System.out.println("图书信息:" + book.getName());
    }

    @Test
    public void testUpdateBook() {
        Book book = new Book();
        book.setId(1L);
        book.setName("Spring Boot实战");
        book.setAuthor("黄勇");

        boolean result = bookService.updateBook(book);
        System.out.println("更新结果:" + result);
    }

    @Test
    public void testDeleteBookById() {
        boolean result = bookService.deleteBookById(1L);
        System.out.println("删除结果:" + result);
    }

    @Test
    public void testGetBooksByConditions() {
        List<Book> books = bookService.getBooksByConditions(null, "编程技术");
        books.forEach(book -> {
            System.out.println("图书信息:" + book.getName());
        });
    }
}
點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消