四时宝库

程序员的知识宝库

Micronaut 数据库框架怎么选?(数据库管理框架)

Micronaut 是一种现代化基于 JVM 的全栈应用程序框架,用于构建轻量化、可扩展和高效的微服务和服务器端应用程序,并且是一种支持 GraalVM 特性的云原生框架。

在 Micronaut 框架中,数据库的访问支持三种最常用的数据库框架:R2DBC、Hibernate JPA 和 MyBatis。

R2DBC

这三种数据库框架中,R2DBC 为非阻塞式的数据库框架,可以与框架完美结合,实现整个框架的非阻塞式编码。R2DBC 支持通过接口名定义数据库访问操作以及固定的本地 SQL 执行。

在 Micronaut 中,如果要使用 R2DBC,需要引入以下依赖:

<dependency>

<groupId>io.micronaut.data</groupId>

<artifactId>micronaut-data-r2dbc</artifactId>

<scope>compile</scope>

</dependency>

<dependency>

<groupId>dev.miku</groupId>

<artifactId>r2dbc-mysql</artifactId>

<scope>runtime</scope>

</dependency>


DAO 层的声明如下:

@R2dbcRepository(dialect = Dialect.MYSQL)

public interface GenreRepository extends ReactorPageableRepository<Genre, Long> {

Mono<Genre> save(@NotBlank String name);

}

以上声明中可以看到,只需要声明接口继承,就可以使用基础接口中定义的 API,并能定义自己的 API,比如想自己定义一个 API 查询 deleted = 0 的所有数据,那么 API 声明如下:

Flux<Genre> findByDeletedEqualsFalse();

可以看到,这处通过 API 名字定义操作的方法非常易读和简洁。

JPA

Hibernate JPA 支持 JPA 的 API,但它是一种阻塞式的数据库框架,不能与框架一起实现完整的非阻塞式编码。JPA 支持通过接口名定义数据库访问操作,还支持动态本地 SQL 执行。

在 Micronaut 中,如果要使用 JPA,需要引入以下依赖:

<dependency>

<groupId>io.micronaut.data</groupId>

<artifactId>micronaut-data-hibernate-jpa</artifactId>

<scope>compile</scope>

</dependency>

DAO 层的声明如下:

@Repository

public interface RegisterRepository extends CrudRepository<RegisterData,String> {

List<RegisterData> findByServiceUuid(String serviceUuid);

}

与 R2DBC 相比,可以看到,除了 API 的返回是阻塞的数据外,整个 DAO API 的声明方式与 R2DBC 是完全一样的,非常方便。

进一步,如果要使用动态 SQL,我们可以声明一个抽象类,如下:

@Repository

public abstract TenancyRepository implements CrudRepository<Tenancy,String> {

private EntityManager em;

public TenancyRepository(EntityManager em) {

this.em = em;

}

@Transactional

public Tenancy query(String params){

String sql = "xxx";

Query query = em.createNativeQuery(sql);

//...

}

}

以上示例可以看到,在 JAP 框架中,只要注入了 EntityManger 就可以执行动态 SQL。需要注意的是,R2DBC 框架和 JPA 是不能同时使用的,原因是两种框架有不同的事务管理器实现,如果同时使用,EntityManager 的事务会不知道选择哪个事务管理器。

Mybatis

Mybatis 是我们在 Spring Boot 框架中用得比较多的一种数据库访问框架,主要用于自己通过 XML 文件定义 SQL 访问数据库。Mybatis 支持自定义 SQL 和固定的本地 SQL 执行。

依赖如下:

<dependency>

<groupId>org.mybatis</groupId>

<artifactId>mybatis</artifactId>

<version>3.5.10</version>

<scope>compile</scope>

</dependency>


至于其他的 XML 配置,大家一定很熟悉了,就不再重复。

小结

Micronaut 作为云原生框架,支持 GraalVM 的 Native Image,通过 Native Image 将 Java 应用编译为机器本地应用,能大大减少资源占用。

Mybatis 还不能完美支持 Native Image,为了能完美编译为本地应用,推荐优先选用 R2DBC 框架和 JPA 框架。

如果不涉及到动态 SQL 的使用,则推荐先用 R2DBC 框架。

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接