构建高效持久层:深度解析 MyBatis-Plus(01)

目录

  • 引言
  • [1. MyBatis-Plus 介绍](#1. MyBatis-Plus 介绍)
    • [1.1 基础概念](#1.1 基础概念)
    • [1.2 核心特性](#1.2 核心特性)
    • [1.3 结构](#1.3 结构)
    • 1.4.支持数据库
  • 快速使用
  • [2. 综合案例](#2. 综合案例)
  • 总结

引言

在当今软件开发领域,数据持久化是至关重要的一环。如何高效地操作数据库,成为了每个开发者都需要思考的问题。MyBatis-Plus,作为MyBatis的增强工具,提供了更便捷、高效的数据库操作方式,为我们带来了全新的开发体验。本文将深入介绍MyBatis-Plus,从基础概念到高级应用,助您更好地驾驭这个强大的持久层框架。

1. MyBatis-Plus 介绍

1.1 基础概念

MyBatis-Plus(简称 MP)是一个 MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。它提供了一些常用功能的增强,使得开发者可以更加便捷地进行数据库访问操作。

我们的愿景是成为MyBatis最好的搭档,就像魂斗罗中的 1P2P,基友搭配,效率翻倍。

1.2 核心特性

  • CRUD操作的增强Mybatis-Plus通过提供通用的Mapper接口和封装的CRUD方法,简化了数据库的增删改查操作。开发者可以通过继承通用Mapper接口,无需编写SQL语句,就能完成基本的CRUD操作。

  • 条件构造器Mybatis-Plus提供了强大的条件构造器,使得构建复杂的查询条件变得更加灵活和易于维护。条件构造器支持链式调用,可以根据需求动态添加查询条件,包括等值条件、范围条件、模糊查询等。

  • 自动分页Mybatis-Plus可以自动处理分页查询,开发者只需要在查询方法中添加分页参数,即可实现数据的分页查询。它支持多种数据库的分页方式,如MySQL的LIMIT语句、Oracle的ROWNUM等。

  • 代码生成器Mybatis-Plus提供了一个代码生成器,可以根据数据库表结构自动生成实体类、Mapper接口、XML映射文件等基本代码。开发者可以通过简单的配置,快速生成大量的基础代码,减少了手写重复代码的工作量。

  • 全局通用操作Mybatis-Plus还提供了一些全局通用操作的增强,如逻辑删除、字段自动填充、乐观锁等。这些功能可以通过注解或配置进行开启,并且可以自定义实现,以满足不同业务场景的需求。

总的来说,Mybatis-Plus简化了Mybatis的开发流程,提高了开发效率。它提供了一些常用功能的增强,使得开发者无需编写繁琐的SQL语句,即可完成常见的数据库操作。同时,它也提供了一些附加功能,如条件构造器、自动分页、代码生成器等,进一步提升了开发效率和代码质量。

1.3 结构

1.4.支持数据库

  • MySQL,Oracle,DB2,H2,HSQL,SQLite,PostgreSQL,SQLServer,Phoenix,Gauss ,ClickHouse,Sybase,OceanBase,Firebird,Cubrid,Goldilocks,csiidb,informix,TDengine,redshift
  • 达梦数据库,虚谷数据库,人大金仓数据库,南大通用(华库)数据库,南大通用数据库,神通数据库,瀚高数据库,优炫数据库

快速使用

pom.xml

java 复制代码
  <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-freemarker</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.2</version>
        </dependency>

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.5.2</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

yml

java 复制代码
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: 123456
    url: jdbc:mysql://localhost:3306/bookshop
mybatis-plus:
  #类型别名
  type-handlers-package: com.yuan.smsspringbootstart.pojo
  configuration:
    #驼峰命名法
    map-underscore-to-camel-case: true

需要用到一个代码生成的文件

java 复制代码
package com.yuan.smsspringbootstart.config;

import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import lombok.extern.slf4j.Slf4j;

import java.util.Arrays;
import java.util.Collections;
import java.util.List;

@Slf4j
public class MySQLGenerator {

    private final static String URL = "jdbc:mysql://localhost:3306/bookshop";
    private final static String USERNAME = "root";
    private final static String PASSWORD = "123456";

    private final static DataSourceConfig.Builder DATA_SOURCE_CONFIG =
            new DataSourceConfig.Builder(URL, USERNAME, PASSWORD);

    public static void main(String[] args) {
        FastAutoGenerator.create(DATA_SOURCE_CONFIG)
                .globalConfig(
                        (scanner, builder) ->
                                builder.author(scanner.apply("请输入作者名称?"))
                                        .outputDir(System.getProperty("user.dir") + "\\src\\main\\java")
                                        .commentDate("yyyy-MM-dd")
                                        .dateType(DateType.TIME_PACK)
                )
                .packageConfig((builder) ->
                        builder.parent("com.yuan.smsspringbootstart")
                                .entity("pojo")
                                .service("service")
                                .serviceImpl("service.impl")
                                .mapper("mapper")
                                .xml("mapper.xml")
                                .pathInfo(Collections.singletonMap(OutputFile.xml, System.getProperty("user.dir") + "\\src\\main\\resources\\mapper"))
                )
                .injectionConfig((builder) ->
                        builder.beforeOutputFile(
                                (a, b) -> log.warn("tableInfo: " + a.getEntityName())
                        )
                )
                .strategyConfig((scanner, builder) ->
                        builder.addInclude(getTables(scanner.apply("请输入表名,多个英文逗号分隔?所有输入 all")))
                                .addTablePrefix("tb_", "t_", "lay_", "meeting_", "sys_")
                                .entityBuilder()
                                .enableChainModel()
                                .enableLombok()
                                .enableTableFieldAnnotation()
                                .controllerBuilder()
                                .enableRestStyle()
                                .enableHyphenStyle()
                                .build()
                )
                .templateEngine(new FreemarkerTemplateEngine())
                .execute();
    }

    protected static List<String> getTables(String tables) {
        return "all".equals(tables) ? Collections.emptyList() : Arrays.asList(tables.split(","));
    }

}

运行文件main方法,输入作者和表,即自动生成

然后需要手动在mapper层打上@Repository

然后在启动类上添加@MapperScan("com.yuan.smsspringbootstart.mapper")这个注解,括号里面填放的是你的包名路径

java 复制代码
package com.yuan.smsspringbootstart.controller;

import com.yuan.smsspringbootstart.service.IBookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * <p>
 * 书本信息表 前端控制器
 * </p>
 *
 * @author yuan
 * @since 2023-12-16
 */
@RestController
@RequestMapping("/book")
public class BookController {

    @Autowired
    private IBookService iBookService;

    @RequestMapping("/list")
    public Object list(){
        return iBookService.list();
    }

}

然后启动项目测试一手

OK

2. 综合案例

使用雪花id增加

pom导入

java 复制代码
<dependency>
            <groupId>com.github.yitter</groupId>
            <artifactId>yitter-idgenerator</artifactId>
            <version>1.0.6</version>
        </dependency>
java 复制代码
 @RequestMapping("/save")
    public Object save(Book book){
        book.setId(YitIdHelper.nextId());
        return iBookService.save(book);
    }

id:4938054883820

数据库增加的数据

总结

通过本文的深度解析,我们全面了解了MyBatis-Plus的基础概念、核心特性以及高级应用场景。MyBatis-Plus作为MyBatis的增强工具,不仅简化了基础操作,还提供了丰富的高级功能,助力开发者更高效地进行数据库操作。在实际项目中,结合MyBatis-Plus的特性,我们可以构建出更加灵活、可维护的持久层代码。希望通过本文的学习,读者能够更深入地理解和应用MyBatis-Plus,从而提升开发效率,构建高质量的软件项目。

相关推荐
Chris _data2 分钟前
二叉树oj题解析
java·数据结构
牙牙7057 分钟前
Centos7安装Jenkins脚本一键部署
java·servlet·jenkins
时光の尘14 分钟前
C语言菜鸟入门·关键字·float以及double的用法
运维·服务器·c语言·开发语言·stm32·单片机·c
paopaokaka_luck15 分钟前
[371]基于springboot的高校实习管理系统
java·spring boot·后端
以后不吃煲仔饭28 分钟前
Java基础夯实——2.7 线程上下文切换
java·开发语言
进阶的架构师28 分钟前
2024年Java面试题及答案整理(1000+面试题附答案解析)
java·开发语言
前端拾光者32 分钟前
利用D3.js实现数据可视化的简单示例
开发语言·javascript·信息可视化
The_Ticker34 分钟前
CFD平台如何接入实时行情源
java·大数据·数据库·人工智能·算法·区块链·软件工程
程序猿阿伟34 分钟前
《C++ 实现区块链:区块时间戳的存储与验证机制解析》
开发语言·c++·区块链
傻啦嘿哟1 小时前
如何使用 Python 开发一个简单的文本数据转换为 Excel 工具
开发语言·python·excel