摘要
本文介绍了 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 并使用其功能需要遵循以下步骤:
- 导入 mybatis-flex 的依赖库到项目中: 在项目的构建文件(如 maven 或 gradle)中添加 mybatis-flex 的依赖,以便可以在项目中使用其功能。
- 配置数据源和 mybatis 的基本配置: 在项目的配置文件中配置数据库连接信息和 mybatis 的基本配置,确保 mybatis-flex可以连接到数据库并正常工作。这通常包括数据库url、用户名、密码等配置项。
- 定义实体类,可以使用注解来配置表名、字段关系等: 创建实体类来映射数据库中的表结构,可以使用 mybatis-flex 提供的注解来配置实体类与数据库表之间的映射关系,包括表名、字段关系、主键等。这些注解可以帮助 mybatis-flex 进行数据库操作时的映射。
- 编写 mapper 接口,继承 basemapper 并定义自定义的查询方法: 创建 mapper 接口,继承 mybatis-flex 提供的 basemapper 接口。basemapper 已经提供了一些常用的数据库操作方法,然后你可以在该接口中添加自定义的查询方法。这些自定义方法可以利用 mybatis-flex 的查询特性来实现更复杂的数据库操作。
- 使用 mybatis-flex 提供的特性和功能完成数据库操作: 在业务逻辑中使用定义的 mapper 接口来完成数据库操作。可以利用 mybatis-flex 提供的特性,如联表查询、条件查询等,来更加便捷地完成数据库操作,提高开发效率。
配置步骤
以下是在项目中配置和使用 mybatis-flex
的一般步骤:
- 添加
mybatis-flex
的依赖库到项目的构建文件中(例如maven 或 gradle
)。 - 配置数据源和
mybatis
的基本配置,如连接数据库信息、数据源配置等。 - 定义实体类,使用注解来描述表名、字段关系等。
- 编写
mapper
接口,继承basemapper
并添加自定义的查询方法。 - 在配置文件中启用
mybatis-flex
,并配置实体类的包扫描路径。 - 在代码中使用
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 可以连接数据库并正常工作。
# 数据库连接配置示例 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 提供的注解来配置实体类与数据库表之间的映射关系。
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 进行开发时,以下几点需要特别注意,以确保您能够充分利用框架的优势并顺利进行数据库操作:
熟悉 mybatis-flex 的特性和功能: 在开始项目之前,务必深入熟悉 mybatis-flex 框架的特性和功能。了解框架提供的条件查询、关联查询、自定义查询等功能,以便在实际开发中能够恰当地应用这些特性来满足业务需求。
在实体类中正确配置注解: 在定义实体类时,使用 mybatis-flex 提供的注解来正确地描述表名、字段关系等信息。这些注解将帮助框架将实体类属性映射到数据库表,确保数据操作时的一致性。
import com.baomidou.mybatisplus.annotation.tablename; @tablename("user") public class user { // 属性声明 }
注意关联查询的使用: 在调用 mapper 接口的方法时,特别是在涉及到关联查询的情况下,确保您是否需要使用 mybatis-flex 提供的关联查询功能。使用 select***withrelations()
方法来触发关联查询,以便获取相关联的数据。
正确配置启用 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>
- 深入理解复杂操作方案: 当涉及到复杂的多表查询、关联关系等操作时,需要更深入地理解 mybatis-flex 提供的解决方案。阅读官方文档、查看示例代码,或者尝试模拟不同场景的操作,以便更好地掌握框架的使用方法。
通过熟悉特性、正确配置实体类注解、注意关联查询、正确配置 mybatis-flex 和实体类扫描路径,以及深入理解复杂操作方案,您将能够更好地应用 mybatis-flex 框架,提高开发效率并顺利完成数据库操作。
relations注解
在 mybatis-flex 框架中,为了处理不同的关联查询场景,提供了四个不同的 relations 注解。这些注解可以用于配置实体类之间的关联关系,从而在进行数据库查询时能够获取到关联的数据。以下是对这些注解的详细解释以及如何在实际代码中使用它们的示例:
relationonetoone(一对一关系): 用于描述两个实体类之间的一对一关系。通常在两个实体类中,一个类引用另一个类的实例。这个注解用于配置关联的字段和关系类型。
@tablename("user") public class user { // 属性声明 @relationonetoone(selffield = "id", targetfield = "userid") private userprofile userprofile; }
relationonetomany(一对多关系): 用于描述一个实体类与多个其他实体类之间的一对多关系。在主实体类中,使用集合属性引用其他实体类的多个实例。
@tablename("user") public class user { // 属性声明 @relationonetomany(selffield = "id", targetfield = "userid") private list<order> orders; }
relationmanytoone(多对一关系): 用于描述多个实体类引用同一个实体类的多对一关系。在多个实体类中,使用单个属性引用同一个实体类的实例。
@tablename("order") public class order { // 属性声明 @relationmanytoone(selffield = "userid", targetfield = "id") private user user; }
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 的特点,并详细说明了如何配置和使用其功能。通过合理的配置和使用,开发者可以更加灵活地进行数据库操作,提高开发效率和代码质量。
参考资料
到此这篇关于mybatis增强版mybatis-flex的具体使用的文章就介绍到这了,更多相关mybatis-flex使用内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论