springboot+mybatis-flex初体验

mybatis作为一款应用非常广泛的持久层框架,随之又出现了mybatis的增强框架。mybatis的增强框架就是在mybatis 的基础上又添加了许多的功能,目的就是为简化开发,提供效率而生。mybatis-plus就是一款很流行的增加框架,在 mybatis-plus 上既可以使用自身特有的功能,还可以使用 mybatis 的原生功能。最近又发现了一款新的开源的mybatis增强框架,mybatis-flex,下面将体验过程记录分享出来。

1、MyBatis-Flex简介

Mybatis-Flex 是一个优雅的 Mybatis 增强框架,它非常轻量、同时拥有极高的性能与灵活性。我们可以轻松的使用 Mybaits-Flex 链接任何数据库,其内置的 QueryWrapper 亮点帮助我们极大的减少了 SQL 编写的工作的同时,减少出错的可能性。
springboot+mybatis-flex初体验_第1张图片
(官网地址:https://mybatis-flex.com/)

总而言之,MyBatis-Flex 能够极大地提高我们的开发效率和开发体验,让我们有更多的时间专注于自己的事情。

2、Mybatis-Flex特点

  1. 轻量: 除了 MyBatis,没有任何第三方依赖轻依赖、没有任何拦截器,其原理是通过 SqlProvider 的方式实现的轻实现。同时,在执行的过程中,没有任何的 Sql 解析(Parse)轻运行。这带来了几个好处:1、极高的性能;2、极易对代码进行跟踪和调试;3、把控性更高。
  2. 灵活: 支持 Entity 的增删改查、以及分页查询的同时,Mybatis-Flex 提供了 Db + Row 灵活 工具,可以无需实体类对数据库进行增删改查以及分页查询。与此同时,Mybatis-Flex 内置的 QueryWrapper 灵活 可以轻易的帮助我们实现 多表查询、链接查询、子查询 等等常见的 SQL 场景。
  3. 强大: 支持任意关系型数据库,还可以通过方言持续扩展,同时支持 多(复合)主键、逻辑删除、乐观锁配置、数据脱敏、数据审计、 数据填充 等等功能。

3、Mybatis-Flex和同类框架对比

1)功能对比:
springboot+mybatis-flex初体验_第2张图片
springboot+mybatis-flex初体验_第3张图片
(来自其官网)

2)性能对比:
这里直接贴测试结果:

MyBatis-Flex 的查询单条数据的速度,大概是 MyBatis-Plus 的 5 ~ 10+ 倍。
MyBatis-Flex 的查询 10 条数据的速度,大概是 MyBatis-Plus 的 5~10 倍左右。
Mybatis-Flex 的分页查询速度,大概是 Mybatis-Plus 的 5~10 倍左右。
Mybatis-Flex 的数据更新速度,大概是 Mybatis-Plus 的 5~10+ 倍。

4、Mybatis-Flex支持的数据库类型

MyBatis-Flex 支持的数据库类型,如下表格所示,我们还可以通过自定义方言的方式,持续添加更多的数据库支持。
springboot+mybatis-flex初体验_第4张图片
springboot+mybatis-flex初体验_第5张图片

5、快速开始

5.1、创建数据库表

CREATE TABLE IF NOT EXISTS `tb_account`
(
    `id`        INTEGER PRIMARY KEY auto_increment,
    `user_name` VARCHAR(100),
    `age`       INTEGER,
    `birthday`  DATETIME
);

INSERT INTO tb_account(id, user_name, age, birthday)
VALUES (1, '张三', 18, '2020-01-11'),
       (2, '李四', 19, '2021-03-21');

5.2、创建 Spring Boot 项目,并添加 Maven 依赖

springboot的版本为2.7.x,pom.xml依赖如下:


        
            org.springframework.boot
            spring-boot-starter-web
        
        
            com.mybatis-flex
            mybatis-flex-spring-boot-starter
            1.5.3
        
        
            mysql
            mysql-connector-java
            runtime
        
        
            com.zaxxer
            HikariCP
        
        
            org.projectlombok
            lombok
            true
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        
    

    
        
            
                org.springframework.boot
                spring-boot-maven-plugin
                
                    
                        
                            org.projectlombok
                            lombok
                        
                    
                
            
        

        
            
                src/main/resources
                
                    **/*
                
                
                    
                        *.properties
                    
                
            
            
                target/generated-sources
            
        
    

注意:target/generated-sources的配置,否则影响APT 自动生成类的引用。

5.3、配置

在 application.yml 中配置数据源:

# DataSource Config
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/flex_test
    username: root
    password: 123456

在启动类中
添加 @MapperScan 注解,扫描 Mapper 文件夹:

@SpringBootApplication
@MapperScan("com.*.*.mapper")
public class SpringbootMybatisFlexApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootMybatisFlexApplication.class, args);
    }

}

5.4、编写实体类和 Mapper 接口

@Data
@Table("tb_account")
public class Account {

    @Id(keyType = KeyType.Auto)
    private Long id;
    private String userName;
    private Integer age;
    private Date birthday;

}
  • 使用 @Table(“tb_account”) 设置实体类与表名的映射关系
  • 使用 @Id(keyType = KeyType.Auto) 标识主键为自增
public interface AccountMapper extends BaseMapper {

}

这部分也可以使用 MyBatis-Flex 的代码生成器来生,功能非常强大的。详情进入:https://mybatis-flex.com/zh/others/codegen.html

5.5、测试

测试类如下:

import static com.*.*.model.table.AccountTableDef.ACCOUNT;

@SpringBootTest
class SpringbootMybatisFlexApplicationTests {

    @Autowired
    private AccountMapper accountMapper;

    @Test
    void contextLoads() {
        QueryWrapper queryWrapper = QueryWrapper.create()
                .select()
                //.where("age = 18");
                .where(ACCOUNT.AGE.eq(18));
        Account account = accountMapper.selectOneByQuery(queryWrapper);
        System.out.println(account);
    }

}

注意,添加静态引入import static com...model.table.AccountTableDef.ACCOUNT;
控制台输出如下:
在这里插入图片描述
以上的 示例 中, ACCOUNT 为 MyBatis-Flex 通过 APT 自动生成,只需通过静态导入即可,无需手动编码。

6、小结

整体来讲,这个框架是Mybatis的增强版,几乎集成了mybatis plus、jooq、fluent mybatis的所有优点,大家可以探索一番,官方网站:https://mybatis-flex.com/。
尤其是QueryWrapper 的使用,若体验遇到问题,还可以参考官方实例:https://gitee.com/mybatis-flex/mybatis-flex-samples/tree/master

你可能感兴趣的:(Mybatis,spring,boot,mybatis,数据库)