ORM 之 阿里 Fluent-Mybatis主推动态SQL 你学废了吗?

Mybatis作为在东亚开发者市场上占有绝对的使用优势,在中国大陆上讨论Mybatis优化的项目也是挺活跃。

局限于原始Mybatis繁琐的流程,自动代码生成、声明式SQL、动态SQL,以及诸多细节的内容:多租户、多数据源、数据脱敏、SQL审计、多表查询、多表join、自动化主键生成等等,推动项目开发降本增效,降低项目开发门槛,远离付费,哈哈。

产生了多个增强版工具:

  • TkMybatis(2014)
  • MybatisPlus(2016)
  • FluentMybatis(2020)
  • MybatisFlex(2023)

目前人气【MybatisPlus】还是最高的。

所以,现在的你在用什么框架呢?

今天看看阿里推进的FluentMybatis

2021年,【阿里官宣…新一代ORM框架…】吸引了注意,
目前看1.3K的star来看,受欢迎程度不如后起之秀。

那么,可以尝试吗?优化有哪些?

想必这是每一项新技术出来,普通大众都会问的问题。
每一项技术的出现都是为了解决某一方面的问题,或者处于某一角度的洞悉,看看这个产品的出发点和落脚点是什么?

出发点

Mybatis在东亚地区开发者市场近些年具有不可撼动的地位,并占中国JavaORM之首,短期内肯定占有较大的市场份额,有使用者那么就有市场!

落脚点

考虑到,当基于Mybatis的功能丰富到了一定的程度,会更加注重敏捷、高效、降低代码入侵性。
因此集各家所长,诞生了FluentMybatis

它有哪些特点?

  • 只需Entity
  • FluentAPI
  • 嵌套查询 IN EXISTS
  • 条件构造 NO IFELSE
  • AND OR 灵活组合
  • 连表查询
  • 环境和租户自定义

在这里插入图片描述

如何体验下功能

springBoot2.X版本下跑起来,主要有以下几个步骤:

  • 引入maven依赖
    • 需要包含fluent-mybatis的两个基础包
    <properties>
        <fluent-mybatis.version>1.8.7</fluent-mybatis.version>
    </properties>
 <!-- 引入fluent-mybatis 运行依赖包, scope为compile -->
        <dependency>
            <groupId>com.github.atool</groupId>
            <artifactId>fluent-mybatis</artifactId>
            <version>${fluent-mybatis.version}</version>
        </dependency>
        <!-- 引入fluent-mybatis-processor, scope设置为provider 编译需要,运行时不需要 -->
        <dependency>
            <groupId>com.github.atool</groupId>
            <artifactId>fluent-mybatis-processor</artifactId>
            <scope>provided</scope>
            <version>${fluent-mybatis.version}</version>
        </dependency>
  • springboot-web包
  • springboot-mybatis包
  • lombok和springboot-test
  • 此外数据库的驱动包,mysql-connector 或者 postgresql
       <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
          <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.2</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter-test</artifactId>
            <version>2.3.1</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>
        <!-- Postgresql驱动包 -->
        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <scope>runtime</scope>
        </dependency>

具体版本取决于自身springboot版本,我这边使用的是2.3.12.RELEASE,没有采用默认的Mysql,想看看其他非默认DB的对接情况。

  • 书写代码自动生成配置类
    • 确定连接DB的类型、URL、用户名、密码、driver名、schema等
    • 注意不同的DBType部分参数需要指明,默认支持Mysql
    • 执行自动生成配置类后,在配置目录下获取到dao\entity的类
@SpringBootTest(classes = FluentMybatisApplication.class)
public class SystemGeneratorDemo {
    // 数据源 url
    static final String url = "jdbc:postgresql://127.0.0.1:5432/dev";
    // 数据库用户名
    static final String username = "user";
    // 数据库密码
    static final String password = "pass";
    static final String dbDriver="org.postgresql.Driver";

    @Test
    public void generate() throws Exception {
        // 引用配置类,build方法允许有多个配置类
        FileGenerator.build(Empty.class);
    }

    @Tables(
            // 设置数据库连接信息
            url = url, username = username, password = password,
            dbType = DbType.POSTGRE_SQL, //指定PG,默认MySQL
            driver = dbDriver, //指定driver,默认MySQL
            // 设置entity类生成src目录, 相对于 user.dir
            srcDir = "src/main/java",
            // 设置entity类的package值
            basePack = "com.learning.fluentmybatis",
            // 设置dao接口和实现的src目录, 相对于 user.dir
            daoDir = "src/main/java",
            // 设置哪些表要生成Entity文件
            schema = "public", //指定schema, PG上有这个逻辑
            tables = {@Table(value = {"product_info"})}
    )
    static class Empty { //类名随便取, 只是配置定义的一个载体
    }
}

在这里插入图片描述

  • 自动生成实体关系查询类
    • maven compile操作后,能在target下获取dao.base\helper\mapper\wrapper等类,是DAO操作的核心类
      在这里插入图片描述

    • 在IDEA中,需要将target/generated-sources/annotations加入到source配置中,所谓源代码数据的一部分

    • IDEA配置中,Build,Execution,Deployment/Compilier/Annotation Processoers 打开Enable annotation processing,是编辑器自动识别构建的数据

经过以上配置,就已经完成根据配置扫描的表,自动生成查询所需的帮助类,支持动态的数据查询,不需要依赖繁琐的XML配置,灵活书写单表、多表的查询、更新、删除。

//主类或者配置类上开启包扫描
@MapperScan({"com.learning.fluentmybatis.mapper"})

//==================================
@SpringBootTest
public class ProductInfoMapperTest {
    @Qualifier("fmProductInfoMapper")
    @Autowired
    private ProductInfoMapper productInfoMapper;
    @Autowired
    private ProductInfoBaseDao productInfoBaseDao;

    @Test
    public void testInsert(){
        ProductInfoEntity entity = new ProductInfoEntity();
        entity.setName("test5");
        entity.setDisplayName("TEST5");
        productInfoMapper.insert(entity);
        System.out.println(entity.getId());
    }


    @Test
    public void testUpdate(){
        productInfoMapper.updateBy(productInfoMapper.updater().set.updateTime().is(new Date()).end()
                .where().id().eq(999L).end());
        ProductInfoEntity product = productInfoMapper.findOne(productInfoMapper.query().where().id().eq(999L).end());
        System.out.println(product.toString());
    }

    @Test
    public void testSelect(){
        ProductInfoEntity product = productInfoMapper.findOne(productInfoMapper.query().where().id().eq(999L).end());
        System.out.println(product.toString());
        
    }
}

其他指导文档、丰富的查询功能见官方,Fluent-Mybatis官方直通车点这里

今天的你,通过去收藏夹里拾破烂,学到了吗?

### 回答1: fluent-mybatis是一个对MyBatis进行封装的库,使其使用起来更简单、更符合领域驱动设计(DDD)的理念。因此,fluent-mybatis通常被用于开发各种类型的项目中的数据访问层。我不知道是否有任何特别大的项目使用fluent-mybatis作为数据访问层的框架,如果有的话,我不能确定。 ### 回答2: Fluent-Mybatis是一个基于MybatisORM框架,它提供了一种方便、灵活的方式来操作数据库。它的设计目标是简化数据库操作的流程,提升开发效率,并且能够应对大型项目的需求。 在大型项目中,数据量通常很大,操作复杂,所以需要一个高效的ORM框架来处理数据库Fluent-Mybatis提供了灵活的查询方式,支持动态SQL,通过自动生成SQL语句,将复杂的数据库操作简化为简洁易懂的代码。同时,它还支持多种数据库,如MySQL、Oracle、SQL Server等,可以根据项目需要灵活选择。 在大型项目中,数据更新频繁,且可能涉及到多个表之间的关联操作。Fluent-Mybatis提供了事务支持和乐观锁机制,保证数据的一致性和并发操作的正确性。通过使用Fluent-Mybatis,开发人员可以方便地管理事务,实现数据的原子性操作,提高系统的稳定性和安全性。 此外,Fluent-Mybatis还提供了一些扩展功能,如分页查询、多条件查询、缓存支持等。这些功能在大型项目中尤其重要,能够提升系统的性能和用户体验。 总之,Fluent-Mybatis适用于各种大型项目,无论是电子商务、金融、物流等领域的系统,都可以通过使用它来简化数据库操作,提高开发效率,保证系统的稳定性和性能。 ### 回答3: Fluent-Mybatis是一个简化MyBatis开发的框架,它提供了一种更流畅、更便捷的方式来进行数据库操作。对于大型项目而言,Fluent-Mybatis具有以下优势和适用场景。 首先,Fluent-Mybatis具有简化SQL编写的功能。在大型项目中,通常需要编写大量的SQL语句来进行数据库操作,包括查询、插入、更新和删除等。Fluent-Mybatis可以通过提供一种更直观的API来简化SQL的编写,使得开发人员可以更快速地完成数据库操作。 其次,Fluent-Mybatis支持动态SQL的构建。在大型项目中,经常需要根据不同的条件来构建各种不同的SQL语句,以满足复杂的业务需求。Fluent-Mybatis提供了动态SQL的支持,可以根据不同的条件来动态构建SQL语句,从而提高了开发的灵活性和效率。 另外,Fluent-Mybatis还支持多种数据库的操作。在大型项目中,可能需要同时操作多个不同类型的数据库,如MySQL、Oracle、SQL Server等。Fluent-Mybatis提供了对多种数据库的支持,可以方便地进行数据库的切换和操作。 此外,Fluent-Mybatis还提供了缓存和性能优化的功能。在大型项目中,性能往往是一个非常关键的因素。Fluent-Mybatis支持对查询结果进行缓存,从而提高了查询的性能。同时,Fluent-Mybatis还提供了一些性能优化的策略和设置,帮助开发人员更好地优化数据库操作的性能。 总之,Fluent-Mybatis是一个适用于大型项目的框架,它通过简化SQL编写、支持动态SQL构建、多数据库操作和性能优化等功能,提高了开发人员在大型项目中的开发效率和数据库操作的性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

c_zyer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值