Mybatis增强版MyBatis-Flex介绍_mybatisflex-程序员宅基地

技术标签: # Mybatis-Plus专栏  mybatis  

在这里插入图片描述

博主 默语带您 Go to New World.
个人主页—— 默语 的博客
《java 面试题大全》
惟余辈才疏学浅,临摹之作或有不妥之处,还请读者海涵指正。
《MYSQL从入门到精通》数据库是开发者必会基础之一~
吾期望此文有资助于尔,即使粗浅难及深广,亦备添少许微薄之助。苟未尽善尽美,敬请批评指正,以资改进。!

希望本文能够给您带来一定的帮助文章粗浅,敬请批评指正!

摘要

本文介绍了 Mybatis-Flex,一个用于增强 MyBatis 的框架。相对于 MyBatis-Plus,Mybatis-Flex提供了一些显著的特点,如支持联表查询以及在Mybatis-Plus中收费的功能在Mybatis-Flex中是免费的。文章概述了 MyBatis-Flex 的功能特点,并深入介绍了联表查询的不同方案。


Mybatis增强版:Mybatis-Plus(使用的最多,老牌Mybatis增强框架,2016年开源)、Fluent-MyBatis(阿里云开发的Mybatis增强框架,来自阿里云.云效产品团队)、Mybatis-Flex。总的来说,Mybatis-Flex相对于Mybatis-Plus较为显著的特点是,多了联表查询和在Mybatis-plus中收费的Mybatis-Flex免费使用。

引言

Mybatis-Flex 是一个用于增强 MyBatis 功能的框架,提供了一系列特性和功能,使得数据库操作更加灵活且性能更好。本文将介绍 Mybatis-Flex 的功能特点、配置方法、使用步骤以及一些注意事项。

对比特性

功能或特点 MyBatis-Flex MyBatis-Plus Fluent-MyBatis
对 entity 的基本增删改查
分页查询
分页查询之总量缓存
分页查询无 SQL 解析设计(更轻量,及更高性能)
多表查询:from 多张表
多表查询: left join、inner join 等等
多表查询: union,union all
单主键配置
多种 id 生成策略
支持多主键、复合主键
字段的 typeHandler 配置
除了 MyBatis,无其他第三方依赖(更轻量)
QueryWrapper 是否支持在微服务项目下进行 RPC 传输 未知
逻辑删除
乐观锁
SQL 审计
数据填充 ️ (收费)
数据脱敏 ️ (收费)
字段权限 ️ (收费)
字段加密 ️ (收费)
字典回写 ️ (收费)
Db + Row
Entity 监听
多数据源支持 借助其他框架或收费
多数据源是否支持 Spring 的事务管理,比如 @Transactional 和 TransactionTemplate 等
多数据源是否支持 “非Spring” 项目
多租户
动态表名
动态 Schema

总结:Mybatis-Flex 相对于 Mybatis-Plus 的显著特点在于其免费支持联表查询功能,而在 Mybatis-Plus 中需要支付费用。由于联表查询在日常开发中具有广泛应用,Mybatis-Flex 提供了这一功能,为开发者提供了便利,因此它在这一方面表现出色。


配置方法

配置 Mybatis-Flex 并使用其功能需要遵循以下步骤:

  1. 导入 Mybatis-Flex 的依赖库到项目中: 在项目的构建文件(如 Maven 或 Gradle)中添加 Mybatis-Flex 的依赖,以便可以在项目中使用其功能。
  2. 配置数据源和 Mybatis 的基本配置: 在项目的配置文件中配置数据库连接信息和 Mybatis 的基本配置,确保 Mybatis-Flex可以连接到数据库并正常工作。这通常包括数据库URL、用户名、密码等配置项。
  3. 定义实体类,可以使用注解来配置表名、字段关系等: 创建实体类来映射数据库中的表结构,可以使用 Mybatis-Flex 提供的注解来配置实体类与数据库表之间的映射关系,包括表名、字段关系、主键等。这些注解可以帮助 Mybatis-Flex 进行数据库操作时的映射。
  4. 编写 Mapper 接口,继承 BaseMapper 并定义自定义的查询方法: 创建 Mapper 接口,继承 Mybatis-Flex 提供的 BaseMapper 接口。BaseMapper 已经提供了一些常用的数据库操作方法,然后你可以在该接口中添加自定义的查询方法。这些自定义方法可以利用 Mybatis-Flex 的查询特性来实现更复杂的数据库操作。
  5. 使用 Mybatis-Flex 提供的特性和功能完成数据库操作: 在业务逻辑中使用定义的 Mapper 接口来完成数据库操作。可以利用 Mybatis-Flex 提供的特性,如联表查询、条件查询等,来更加便捷地完成数据库操作,提高开发效率。

配置步骤

以下是在项目中配置和使用 Mybatis-Flex 的一般步骤:

  1. 添加 Mybatis-Flex 的依赖库到项目的构建文件中(例如 Maven 或 Gradle)。
  2. 配置数据源和 Mybatis 的基本配置,如连接数据库信息、数据源配置等。
  3. 定义实体类,使用注解来描述表名、字段关系等。
  4. 编写 Mapper 接口,继承 BaseMapper 并添加自定义的查询方法。
  5. 在配置文件中启用 Mybatis-Flex,并配置实体类的包扫描路径。
  6. 在代码中使用 Mapper 接口的方法来完成数据库操作,包括增删改查等。

1. 添加 Mybatis-Flex 的依赖库到项目的构建文件中(例如 Maven 或 Gradle): 在项目的构建文件中,添加 Mybatis-Flex 的依赖,以便能够在项目中使用其功能。

<!-- Maven 依赖示例 -->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-flex</artifactId>
    <version>1.0.0</version>
</dependency>

2. 配置数据源和 Mybatis 的基本配置: 在项目的配置文件中,配置数据库连接信息和 Mybatis 的基本配置,以便 Mybatis-Flex 可以连接数据库并正常工作。

properties复制代码# 数据库连接配置示例
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=yourpassword

# Mybatis 配置示例
mybatis.config-location=classpath:mybatis-config.xml

3. 定义实体类,使用注解来描述表名、字段关系等: 创建实体类来映射数据库中的表结构,使用 Mybatis-Flex 提供的注解来配置实体类与数据库表之间的映射关系。

java复制代码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 username;
    
    // Getters and setters
}

4. 编写 Mapper 接口,继承 BaseMapper 并添加自定义的查询方法: 创建 Mapper 接口,继承 Mybatis-Flex 提供的 BaseMapper 接口,然后添加自定义的查询方法。

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;

@Mapper
@Repository
public interface UserMapper extends BaseMapper<User> {
    

    // 添加自定义的查询方法,如根据用户名查询用户
    User findByUsername(String username);
}

5. 在配置文件中启用 Mybatis-Flex,并配置实体类的包扫描路径: 在 Mybatis 配置文件(如 mybatis-config.xml)中启用 Mybatis-Flex,并配置实体类的包扫描路径。

<configuration>
    <!-- 配置 Mybatis-Flex 插件 -->
    <plugins>
        <plugin interceptor="com.baomidou.mybatisplus.extension.plugins.inner.InnerInterceptor">
            <!-- 可选的插件配置 -->
        </plugin>
    </plugins>
    
    <!-- 配置实体类的包扫描路径 -->
    <typeAliasesPackage>com.example.model</typeAliasesPackage>
    
    <!-- 其他 Mybatis 配置 -->
</configuration>

6. 在代码中使用 Mapper 接口的方法来完成数据库操作,包括增删改查等: 在业务逻辑代码中,使用定义的 Mapper 接口的方法来完成数据库操作,包括增删改查等。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class UserService {
    

    @Autowired
    private UserMapper userMapper;
    
    public User getUserByUsername(String username) {
    
        return userMapper.findByUsername(username);
    }
    
    // 其他业务逻辑方法
}

通过按照上述详细的步骤和代码示例进行配置和使用 Mybatis-Flex,您将能够更好地理解如何集成该框架并在项目中进行数据库操作。这些示例将帮助您在实际开发中更轻松地使用 Mybatis-Flex 的功能。

注意事项

在使用 Mybatis-Flex 进行开发时,需要注意以下几点:

当使用 Mybatis-Flex 进行开发时,以下几点需要特别注意,以确保您能够充分利用框架的优势并顺利进行数据库操作:

  1. 熟悉 Mybatis-Flex 的特性和功能: 在开始项目之前,务必深入熟悉 Mybatis-Flex 框架的特性和功能。了解框架提供的条件查询、关联查询、自定义查询等功能,以便在实际开发中能够恰当地应用这些特性来满足业务需求。

  2. 在实体类中正确配置注解: 在定义实体类时,使用 Mybatis-Flex 提供的注解来正确地描述表名、字段关系等信息。这些注解将帮助框架将实体类属性映射到数据库表,确保数据操作时的一致性。

import com.baomidou.mybatisplus.annotation.TableName;
   
   @TableName("user")
   public class User {
    
       // 属性声明
   }
  1. 注意关联查询的使用: 在调用 Mapper 接口的方法时,特别是在涉及到关联查询的情况下,确保您是否需要使用 Mybatis-Flex 提供的关联查询功能。使用 select***WithRelations() 方法来触发关联查询,以便获取相关联的数据。

  2. 正确配置启用 Mybatis-Flex 和实体类扫描路径: 在 Mybatis 配置文件中,确保启用 Mybatis-Flex 插件,以便让框架正常工作。同时,配置实体类的包扫描路径,使得框架能够找到并正确处理实体类的注解。

<configuration>
       <!-- 配置 Mybatis-Flex 插件 -->
       <plugins>
           <plugin interceptor="com.baomidou.mybatisplus.extension.plugins.inner.InnerInterceptor">
               <!-- 可选的插件配置 -->
           </plugin>
       </plugins>
       
       <!-- 配置实体类的包扫描路径 -->
       <typeAliasesPackage>com.example.model</typeAliasesPackage>
       
       <!-- 其他 Mybatis 配置 -->
   </configuration>
  1. 深入理解复杂操作方案: 当涉及到复杂的多表查询、关联关系等操作时,需要更深入地理解 Mybatis-Flex 提供的解决方案。阅读官方文档、查看示例代码,或者尝试模拟不同场景的操作,以便更好地掌握框架的使用方法。

通过熟悉特性、正确配置实体类注解、注意关联查询、正确配置 Mybatis-Flex 和实体类扫描路径,以及深入理解复杂操作方案,您将能够更好地应用 Mybatis-Flex 框架,提高开发效率并顺利完成数据库操作。


Relations注解

在 MyBatis-Flex 框架中,为了处理不同的关联查询场景,提供了四个不同的 Relations 注解。这些注解可以用于配置实体类之间的关联关系,从而在进行数据库查询时能够获取到关联的数据。以下是对这些注解的详细解释以及如何在实际代码中使用它们的示例:

  1. RelationOneToOne(一对一关系): 用于描述两个实体类之间的一对一关系。通常在两个实体类中,一个类引用另一个类的实例。这个注解用于配置关联的字段和关系类型。

    @TableName("user")
    public class User {
          
        // 属性声明
        
        @RelationOneToOne(selfField = "id", targetField = "userId")
        private UserProfile userProfile;
    }
    
  2. RelationOneToMany(一对多关系): 用于描述一个实体类与多个其他实体类之间的一对多关系。在主实体类中,使用集合属性引用其他实体类的多个实例。

    @TableName("user")
    public class User {
          
        // 属性声明
        
        @RelationOneToMany(selfField = "id", targetField = "userId")
        private List<Order> orders;
    }
    
  3. RelationManyToOne(多对一关系): 用于描述多个实体类引用同一个实体类的多对一关系。在多个实体类中,使用单个属性引用同一个实体类的实例。

@TableName("order")
   public class Order {
    
       // 属性声明
       
       @RelationManyToOne(selfField = "userId", targetField = "id")
       private User user;
   }
  1. RelationManyToMany(多对多关系): 用于描述多个实体类之间的多对多关系。通常需要通过中间表来实现这种关系。

    @TableName("user")
    public class User {
          
        // 属性声明
        
        @RelationManyToMany(joinTable = "user_role", joinSelfColumn = "user_id", joinTargetColumn = "role_id")
        private List<Role> roles;
    }
    

在使用这些 Relations 注解配置实体类关联关系后,需要在通过 BaseMapper 的方法查询数据时,调用相应的 select***WithRelations() 方法才能使 Relations 注解生效。否则,MyBatis-Flex 将自动忽略这些 Relations 注解。

例如,对于上述配置了关联关系的实体类,以下是如何在 Mapper 接口中使用 selectListWithRelations() 方法来查询数据的示例:

@Mapper
public interface UserMapper extends BaseMapper<User> {
    
    
    List<User> selectUsersWithRelations();
}

通过这样的配置,您就能够更好地理解并应用 MyBatis-Flex 框架中提供的关联关系注解,并在数据库查询时获取到关联的数据。

总结

Mybatis-Flex 是一个用于增强 MyBatis 的框架,提供了多种特性和功能来优化数据库操作。本文简要介绍了 Mybatis-Flex 的特点,并详细说明了如何配置和使用其功能。通过合理的配置和使用,开发者可以更加灵活地进行数据库操作,提高开发效率和代码质量。

参考资料

文末送书

赠书活动第七期链接

  参与方式:

在本博客下方评论区发表评论,即可参与抽奖; 抽奖方式:我们将随机抽取3位幸运伙伴,并允许每位伙伴最多发表5条评论,增加获奖机会;

在这里插入图片描述

抽奖时间:截止至2023年8月24日 17:00,评论时间超过该截止时间的将不计入抽奖范围;

结果公布:获奖者名单将在抽奖后尽快公布,敬请留意本博客的最新通知; 奖品:获奖者将获得《深入理解java高并发编程》一书,帮助您深入了解java并发编程。

详情
在这里插入图片描述

如对本文内容有任何疑问、建议或意见,请联系作者,作者将尽力回复并改进;(联系微信:Solitudemind )

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_42055933/article/details/132287427

智能推荐

高频交易及化资策与区_hudson river trading-程序员宅基地

文章浏览阅读406次。转 高频交易及量化投资的策略与误区一、高频交易公司和量化投资公司的区别一般来说,高频交易公司和量化投资公司既有联系,又有区别。在美国,人们常说的高频交易公司一般都是自营交易公司,这些公司主要有Getco、Tower Research、Hudson River Trading、SIG、Virtu Financial、Jump Trading、RGM Advisor、Chopper Tradi..._hudson river trading

C语言文件操作相关的函数_c语言与文件处理有关的函数-程序员宅基地

文章浏览阅读865次。文件的打开和关闭文件在读写之前应该先打开文件,在使用结束之后应该关闭文件。在编写程序的时候,在打开文件的同时,都会返回一个FILE*的指针变量指向该文件,也相当于建立了指针和文件 的关系。ANSIC 规定使用fopen函数来打开文件,fclose来关闭文件。FILE * fopen ( const char * filename, const char * mode ); int fcl..._c语言与文件处理有关的函数

java 无法读取文件_java 读取文件,无法显示文件内容,如何解决? 谢谢。-程序员宅基地

文章浏览阅读1.1k次。从来没见过进行文件读取写入时,在写入中需要随机数的,你读取文件就是从一个地方获取输入流,然后将这个输入流写到别的地方,根本不要随机数。给你一个示例://copyafiletoanotherfilebyusingFileReader/FileWriterimportjava.io.*;publicclassTFileRead{publicstaticvoidmain(S..._java复制文件文件没有内容显示

vue引入原生高德地图_前端引入原生地图-程序员宅基地

文章浏览阅读556次,点赞2次,收藏3次。由于工作上的需要,今天捣鼓了半天高德地图。如果定制化开发需求不太高的话,可以用vue-amap,这个我就不多说了,详细就看官网 https://elemefe.github.io/vue-amap/#/zh-cn/introduction/install然而我们公司需要英文版的高德,我看vue-amap中好像没有这方面的配置,而且还有一些其他的定制化开发需求,然后就只用原生的高德。其实原生的引入也不复杂,但是有几个坑要填一下。1. index.html注意,引入的高德js一定要放在头部而_前端引入原生地图

ViewGroup重写大法 (一)-程序员宅基地

文章浏览阅读104次。本文介绍ViewGroup重写,我们所熟知的LinearLayout,RelativeLayout,FrameLayout等等,所有的容器类都是ViewGroup的子类,ViewGroup又继承View。我们在熟练应用这些现成的系统布局的时候可能有时候就不能满足我们自己的需求了,这是我们就要自己重写一个容器来实现效果。ViewGroup重写可以达到各种效果,下面写一个简单的重写一个Vi..._viewgroup 重写

Stm32学习笔记,3万字超详细_stm32笔记-程序员宅基地

文章浏览阅读1.8w次,点赞279次,收藏1.5k次。本文章主要记录本人在学习stm32过程中的笔记,也插入了不少的例程代码,方便到时候CV。绝大多数内容为本人手写,小部分来自stm32官方的中文参考手册以及网上其他文章;代码部分大多来自江科大和正点原子的例程,注释是我自己添加;配图来自江科大/正点原子/中文参考手册。笔记内容都是平时自己一点点添加,不知不觉都已经这么长了。其实每一个标题其实都可以发一篇,但是这样搞太琐碎了,所以还是就这样吧。_stm32笔记

随便推点

Java从零开始 第10.5讲 面向对象的习题课_编写一个测试类booktest,创建几个book对象,并打印它们的字符串表示,同时判断-程序员宅基地

文章浏览阅读197次。面向对象的习题课类的定义员工类Employee求和类Sum类与对象书籍类BookBook类的测试类BookTest异常能扩容的MyList类剪刀石头布转载请注明出处在这一讲中我会给出一些关于面向对象部分的习题,同样希望在不看答案的情况下自己编写,即使看过了答案,也要能够在不看答案的情况下写出来。类的定义员工类Employee定义在同一个公司工作的Employee类,要求其中含有属性:员工的名字,员工的年龄,员工的爱好,员工的公司名(注意当公司更名时,所有员工的公司名都需要更名),工作地点默认为中国(_编写一个测试类booktest,创建几个book对象,并打印它们的字符串表示,同时判断

Spark伪分布安装(依赖Hadoop)_下载spark的hadoop依赖-程序员宅基地

文章浏览阅读6.7k次,点赞7次,收藏14次。一、伪分布安装Spark安装环境:Ubuntu 14.04 LTS 64位+Hadoop2.7.2+Spark2.0.0+jdk1.7.0_761、安装jdk1.7(1)下载jdk-7u76-linux-x64.tar.gz;(2)解压jdk-7u76-linux-x64.tar.gz,并将其移动到/opt/java/jdk路径下(自建);命令:tar -zxvf jdk-_下载spark的hadoop依赖

TCP/IP 是用于因特网 (Internet) 的通信协议_广泛应用在internet中的tcp/ip的网络管理主要使用的是 ____协议。 (填空题)-程序员宅基地

文章浏览阅读6.7k次。计算机通信协议计算机通信协议是对那些计算机必须遵守以便彼此通信的规则的描述。什么是 TCP/IP?TCP/IP 是供已连接因特网的计算机进行通信的通信协议。TCP/IP 指传输控制协议/网际协议 (Transmission Control Protocol / Internet Protocol)。TCP/IP 定义了电子设备(比如计算机)如何连入因特网,以及数据如何在它们之间传输的标准..._广泛应用在internet中的tcp/ip的网络管理主要使用的是 ____协议。 (填空题)

java中的一些经典算法_java中temsize+=1运算-程序员宅基地

文章浏览阅读360次。转自:落尘曦的博客:http://blog.csdn.net/qq_23994787 原文链接:https://blog.csdn.net/qq_23994787/article/details/77951244#_Toc9101经典算法的Java实现(1)河内塔问题: 42(2)费式数列 43(3)巴斯卡(Pascal)三角形 44(4)蒙地卡罗法求 PI 45(..._java中temsize+=1运算

Linux习题简答题_linux中,第一个普通用户的uid为____。-程序员宅基地

文章浏览阅读3.1k次,点赞6次,收藏27次。第一章Q1 简述Linux系统的应用领域 Linux服务器;嵌入式Linux系统;软件开发平台;桌面应用Q2 简述Linux系统的特点 开放性、多用户、多任务、良好的用户界面、设备独立性、丰富的网络功能、可靠的系统安全、良好的可移植性Q3 简述Linux系统的组成 内核、shell、文件系统、应用程序Q4 简述主流的Linux发行版本 Redhat SUSE Oracle CentOS Ubuntu Debian Mandriva Gentoo Slackware Fe_linux中,第一个普通用户的uid为____。

【路径规划】基于matlab粒子群算法新型概率密度无人机作战路径规划【含Matlab源码 2620期】_已知目标出现概率热图matlab无人机路径规划-程序员宅基地

文章浏览阅读183次。粒子群算法新型概率密度无人机作战路径规划完整的代码,方可运行;可提供运行操作视频!适合小白!_已知目标出现概率热图matlab无人机路径规划