为啥不将 Mybatis 集成到 quarkus 系统中呢?

Posted

技术标签:

【中文标题】为啥不将 Mybatis 集成到 quarkus 系统中呢?【英文标题】:Why not integrate Mybatis into the system of quarkus?为什么不将 Mybatis 集成到 quarkus 系统中呢? 【发布时间】:2021-01-13 20:25:48 【问题描述】:

很多项目都采用MyBatis,如果可以集成MyBatis,可以快速将基于Spring Framework的应用转为基于Quarkus Framework的应用。

【问题讨论】:

【参考方案1】:

在 Quarkus 问题板上有一个扩展提案:https://github.com/quarkusio/quarkus/issues/1958

您可以对其做出反应 +1 以表示您的兴趣并关注它。

甚至还有一个 PR 为其提供支持,但几个月以来似乎没有任何进展。

【讨论】:

【参考方案2】:

当然,你可以将Mybatis集成到quarkus系统中。

quarkus-mybatis 0.0.1第一个版本于 2020 年 10 月发布。 最新版 quarkus-mybatis 0.0.92021 年 6 月发布。

许多公司在他们的技术堆栈中使用 Quarkus,包括 Backbase、Biting Bit 和 JustChunks。Vodafone Greek 用 Quarkus 替换了 Spring Boot。

演示:

使用https://code.quarkus.io/创建新的 Quarkus 项目

将 quarkus-mybatis 扩展添加到您的项目中。这里我使用 Maven 进行依赖管理。

Maven

<dependency>
    <groupId>io.quarkiverse.mybatis</groupId>
    <artifactId>quarkus-mybatis</artifactId>
    <version>0.0.9</version>
</dependency>

数据源配置:

application.properties
quarkus.datasource.db-kind = h2
quarkus.datasource.username = sa
# quarkus.datasource.password =
quarkus.datasource.jdbc.url = jdbc:h2:mem:test
quarkus.mybatis.initial-sql=schema.sql

schema.sql:

create table users
(
   id integer not null,
   firstName varchar(255) not null,
   lastName varchar(255) not null,
   emailId varchar(255) not null,
   primary key(id)
);

创建用户模型:

@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
public class User 

    private long id;
    private String firstName;
    private String lastName;
    private String emailId;


创建用户 MyBatis 存储库:

@Mapper
public interface UserRepository 

    @Select("select * from users")
    public List<User> findAll();

    @Select("SELECT * FROM users WHERE id = #id")
    public User findById(long id);

    @Delete("DELETE FROM users WHERE id = #id")
    public int deleteById(long id);

    @Insert("INSERT INTO users(id, firstName, lastName,emailId) " +
            " VALUES (#id, #firstName, #lastName, #emailId)")
    public int insert(User user);

    @Update("Update users set firstName=#firstName, " +
            " lastName=#lastName, emailId=#emailId where id=#id")
    public int update(User user);

端点:

    @GET
    @Path("/id")
    @Produces(MediaType.APPLICATION_JSON)
    public User getUser(@PathParam("id") Long id) 
        return userResource.findById(id);
    

    @PUT
    @Consumes(MediaType.APPLICATION_JSON)
    public void updateUser(User user) 
        userResource.update(user);
    

    @POST
    @Produces(MediaType.APPLICATION_JSON)
    @Consumes(MediaType.APPLICATION_JSON)
    public void addUser(User user) 
       userResource.insert(user);

    

    @DELETE
    @Path("/id")
    public void deleteUser(@PathParam("id") Long id) 
        userResource.deleteById(id);
    

构建应用程序 jar 文件: mvn clean package

启动应用程序: java -jar quarkus-run.jar

参考,Build REST CRUD API with Quarkus and MyBatis

【讨论】:

以上是关于为啥不将 Mybatis 集成到 quarkus 系统中呢?的主要内容,如果未能解决你的问题,请参考以下文章

Quarkus:集成测试 - 如何模拟 OIDC?

使用 Testcontainers + Quarkus + MongoDB 进行集成测试

为啥 Quarkus 会警告我关于私有字段的注入?

为啥 quarkus.oidc.credentials.secret 被忽略?

为啥 StandardScaler 不将元数据附加到输出列?

为啥不将 Javascript 事件委托发挥到极致呢?