Mybatis-plus

一、简介

MyBatis-Plus(简称MP)是一个MyBatis的增强工具,它在MyBatis的基础上只做增强而不做改变,目的是简化开发、提高效率。MyBatis-Plus提供了许多便捷的功能,如强大的CRUD操作、支持多种主键策略、内置代码生成器、分页插件、性能分析插件等。

二、MyBatis-Plus与MyBatis的区别

  1. 实现方式不同‌:
    • MyBatis是基于XML或注解方式进行数据库操作的持久化框架,它提供了简单的CRUD操作及动态SQL生成等功能。而MyBatis-Plus是在MyBatis框架上的封装,通过对于增强简化后的API更加方便地进行开发,并且在性能、效率和易用性上都有优化。
    • MyBatis-Plus封装了一些简单的SQL,只需要数据模型类继承Model类,便可以直接使用数据模型对象直接调用单表的增删改查的方法。
  2. 功能差异‌:
    • MyBatis相对较为原始,需要手写大量的SQL以完成各种功能的实现。而MyBatis-Plus提供了很多额外的功能,例如条件构造器、代码生成器、分页插件、性能分析拦截器等实用的组件,使得开发者可以轻松快速完成业务逻辑的开发。
    • MyBatis-Plus支持所有MyBatis的原生特性,并提供了ActiveRecord等核心特性,实现了数据库表和数据模型类的映射、数据模型对象和数据库记录的映射,以及数据模型对象属性和数据库记录的字段的映射。
  3. 编程风格‌:
    • MyBatis的编程风格更加传统,需要定义mapper.xml文件并根据传入的参数使用相应的SQL查询语句,需要实现MyBatis提供的各种方法。
    • MyBatis-Plus具有许多针对CRUD进行的简化方法,通过继承BaseMapper以及使用Lambda表达式,可以让我们像SpringDataJPA类似地使用接口编程方式进行数据库操作。

三、MyBatis与Hibernate‌区别

  1. 自动化程度:
    • MyBatis‌:它是一个半自动化的ORM框架。虽然它也支持对象与数据库表之间的映射,但开发者需要手动编写SQL语句,这使得MyBatis在SQL的灵活性和优化上具有更大的空间。
    • Hibernate‌:它是一个全自动化的对象关系映射(ORM)框架。开发者只需定义好POJO(Plain Old Java Objects,普通老式Java对象)与数据库表之间的映射关系,Hibernate便能自动生成SQL语句并执行,大大减轻了编写SQL的工作量。
  2. 灵活性与优化:
    • ‌MyBatis‌:MyBatis允许开发者直接编写SQL,这使得SQL的优化和定制变得非常灵活。开发者可以根据实际需求对SQL进行精细调整,以达到最佳性能。
    • Hibernate‌:由于Hibernate自动生成SQL,开发者对SQL的控制力相对较弱。在某些复杂查询或性能优化场景中,Hibernate可能不是最优选择。
  3. 缓存机制:
    • MyBatis‌:MyBatis也支持一级缓存和二级缓存,但其二级缓存的配置相对更为灵活,开发者可以根据实际需求为不同的表配置不同的缓存策略。
    • Hibernate‌:Hibernate内置了一级缓存(Session级别的缓存)和可选的二级缓存(SessionFactory级别的缓存),这些缓存机制有助于提高数据访问性能。
  4. 数据库移植性:
    • MyBatis‌:虽然MyBatis也支持多种数据库系统,但由于其需要手动编写SQL语句,因此在移植到不同数据库时可能需要修改部分SQL语句以适应新的数据库特性。
    • ‌Hibernate‌:Hibernate支持多种数据库系统,并通过数据库方言的支持来生成适应不同数据库的SQL语句,这使得应用程序具备更好的数据库移植性。

四、Mybatis-plus整合Spring Boot项目

1、添加依赖

在Spring Boot项目的pom.xml文件中,添加Mybatis-plus以及数据库连接驱动的依赖。

bash 复制代码
<dependencies>
    <!-- Spring Boot Starter Web -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!-- MyBatis-Plus Starter -->
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>最新版本号</version>
    </dependency>
    <!-- MySQL Driver -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
    </dependency>
</dependencies>
2、配置数据源

在Spring Boot项目的application.yml或application.properties文件中配置数据库连接信息。例如,使用application.yml文件:

bash 复制代码
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/your_database?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
    username: your_username
    password: your_password
    driver-class-name: com.mysql.cj.jdbc.Driver
3、配置MyBatis-Plus

MyBatis-Plus的配置相对简单,Spring Boot会自动进行大部分配置。可以通过@MapperScan注解来扫描Mapper接口,或者直接在每个Mapper接口上使用@Mapper注解。例如,在启动类上使用@MapperScan注解:

bash 复制代码
@SpringBootApplication
@MapperScan("com.example.demo.mapper") // 扫描Mapper接口的路径
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}
4、创建实体类

创建一个Java实体类,用于映射数据库表。例如,创建一个User实体类:

bash 复制代码
package com.example.demo.entity;

import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

@Data
@TableName("user")
public class User {
    private Long id;
    private String username;
    private String password;
    // 其他字段...
}
5、创建Mapper接口

创建一个Mapper接口,继承BaseMapper接口。BaseMapper是MyBatis-Plus提供的基础接口,包含了常用的CRUD方法。例如,创建一个UserMapper接口:

bash 复制代码
package com.example.demo.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.demo.entity.User;
import org.apache.ibatis.annotations.Mapper;

@Mapper
public interface UserMapper extends BaseMapper<User> {
    // 可以在这里定义自定义的SQL方法
}
6、注入Mapper接口‌

在Service层中,通过@Autowired注解将Mapper接口注入到Service类中。再使用注入的Mapper接口去调用MyBatis-Plus提供的常用CRUD方法以及创建Mapper接口时自定义的方法。

bash 复制代码
@Service
public class UserService {
    @Autowired
    private UserMapper userMapper;

    public User getUserById(Long id) {
        return userMapper.selectById(id); // 调用BaseMapper提供的查询方法
    }

    // 其他业务方法...
}

五、Mybatis-plus代码生成器的使用

MyBatis-Plus的代码生成器是一个非常实用的工具,它能够根据数据库表结构自动生成对应的实体类、Mapper接口、Service层以及Controller层代码,极大地提高了开发效率。以下是一个详细的配置指南:

1、添加依赖

在项目的pom.xml文件中添加MyBatis-Plus代码生成器的依赖。这通常包括MyBatis-Plus代码生成器的核心依赖以及模板引擎的依赖(如Freemarker或Velocity)。

bash 复制代码
<dependencies>
    <!-- MyBatis-Plus代码生成器 -->
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-generator</artifactId>
        <version>最新版本号</version>
    </dependency>
    <!-- Freemarker模板引擎 -->
    <dependency>
        <groupId>org.freemarker</groupId>
        <artifactId>freemarker</artifactId>
        <version>最新版本号</version>
    </dependency>
    <!-- 其他依赖,如数据库驱动等 -->
</dependencies>
2、创建配置类

创建一个配置类来配置代码生成器的各种参数。这个配置类通常包含全局配置、数据源配置、包配置和策略配置等部分。

  • 全局配置‌:设置生成代码的基本信息,如作者、输出目录、是否覆盖已有文件等。
  • 数据源配置‌:设置数据库连接信息,以便代码生成器能够读取数据库表结构。
  • ‌包配置‌:设置生成代码的包名结构,如实体类包名、Mapper包名等。
  • 策略配置‌:设置生成代码的策略,如需要生成的表名、实体类命名策略等。
bash 复制代码
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;

public class CodeGeneratorConfig {

    // 全局配置
    private GlobalConfig globalConfig() {
        GlobalConfig globalConfig = new GlobalConfig();
        globalConfig.setOutputDir(System.getProperty("user.dir") + "/src/main/java"); // 设置输出目录
        globalConfig.setAuthor("你的名字"); // 设置作者
        globalConfig.setOpen(false); // 设置生成完毕后是否打开输出目录
        globalConfig.setSwagger2(true); // 实体属性 Swagger2 注解
        return globalConfig;
    }

    // 数据源配置
    private DataSourceConfig dataSourceConfig() {
        DataSourceConfig dataSourceConfig = new DataSourceConfig();
        dataSourceConfig.setUrl("jdbc:mysql://localhost:3306/你的数据库名?useUnicode=true&useSSL=false&characterEncoding=utf8"); // 设置数据库URL
        dataSourceConfig.setDriverName("com.mysql.cj.jdbc.Driver"); // 设置数据库驱动名
        dataSourceConfig.setUsername("你的数据库用户名"); // 设置数据库用户名
        dataSourceConfig.setPassword("你的数据库密码"); // 设置数据库密码
        dataSourceConfig.setDbType(DbType.MYSQL); // 设置数据库类型
        return dataSourceConfig;
    }

    // 包配置
    private PackageConfig packageConfig() {
        PackageConfig packageConfig = new PackageConfig();
        packageConfig.setParent("com.example"); // 设置父包名
        packageConfig.setModuleName("module"); // 设置模块名
        packageConfig.setEntity("entity"); // 设置实体类包名
        packageConfig.setMapper("mapper"); // 设置Mapper包名
        packageConfig.setService("service"); // 设置Service接口包名
        packageConfig.setServiceImpl("service.impl"); // 设置Service实现类包名
        packageConfig.setController("controller"); // 设置Controller包名
        return packageConfig;
    }

    // 策略配置
    private StrategyConfig strategyConfig() {
        StrategyConfig strategyConfig = new StrategyConfig();
        strategyConfig.setNaming(NamingStrategy.underline_to_camel); // 表名生成策略
        strategyConfig.setColumnNaming(NamingStrategy.underline_to_camel); // 列名生成策略
        strategyConfig.setEntityLombokModel(true); // 使用Lombok模型
        strategyConfig.setRestControllerStyle(true); // 生成@RestController控制器
        strategyConfig.setInclude("你的表名"); // 需要生成的表名
        // strategyConfig.setControllerMappingHyphenStyle(true); // key的style
        // strategyConfig.setTablePrefix(pc.getModuleName() + "_"); // 表前缀
        return strategyConfig;
    }

    // 获取完整的配置信息(通常这个方法不会被直接调用,而是作为其他方法的一部分)
    public AutoGenerator getAutoGenerator() {
        AutoGenerator autoGenerator = new AutoGenerator();
        autoGenerator.setGlobalConfig(globalConfig());
        autoGenerator.setDataSource(dataSourceConfig());
        autoGenerator.setPackageInfo(packageConfig());
        autoGenerator.setStrategy(strategyConfig());
        // 如果需要自定义模板,可以在这里设置
        // autoGenerator.setTemplateEngine(new FreemarkerTemplateEngine());
        // autoGenerator.setTemplate(new TemplateConfig(...));
        return autoGenerator;
    }
}
3、编写代码生成器类

最后编写一个Java类来启动代码生成器。这个类通常会包含一个main方法,并在其中调用代码生成器的相关方法来生成代码。例如:

bash 复制代码
import com.baomidou.mybatisplus.generator.AutoGenerator;

public class CodeGenerator {
    public static void main(String[] args) {
        CodeGeneratorConfig config = new CodeGeneratorConfig();
        AutoGenerator autoGenerator = config.getAutoGenerator();
        // 执行生成
        autoGenerator.execute();
    }
}
相关推荐
风起洛阳@不良使44 分钟前
oracle闪回版本查询
数据库·oracle
love静思冥想1 小时前
批量执行 SQL 脚本的 Shell 脚本及注意事项
数据库·sql·oracle
爬山算法2 小时前
Tomcat(121)Tomcat的会话超时故障排除
java·tomcat
想花2 小时前
tomcat12启动流程源码分析
tomcat
跳跳的向阳花2 小时前
04、Docker学习,理论知识,第四天:DockerFile自定义Tomcat
学习·docker·tomcat
华纳云IDC服务商2 小时前
华纳云:在centos7中tomcat内存怎么设置?
java·tomcat
rgrgrwfe14 小时前
【Tomcat】
java·tomcat
Gauss松鼠会16 小时前
数据库高安全—角色权限:权限管理&权限检查
数据库·人工智能·安全·oracle·database·gaussdb
来一杯龙舌兰18 小时前
【Jboss/Windows】Tomcat 8 + JDK 8 升级为 Jboss eap 7 + JDK8
java·windows·tomcat·jboss·jboss升级·tomcat迁移
莳花微语18 小时前
Euler 21.10(华为欧拉)安装oracle19c-RAC
数据库·华为·oracle