基于 mysql 异步驱动的非阻塞 Mybatis 了解一下

2018-08-29 16:35:15 +08:00
 twogoods

虽然 spring5 也推出了 WebFlux 这一套异步技术栈,这种极大提升吞吐的玩法在 node 里玩的风生水起,但 java 世界里异步依旧不是主流,Vertx 倒是做了不少对异步的支持,但是其对于数据访问层的封装依旧还是挺精简的,传统的 javaer 还是受不了这种没有对象映射的工具库,于是我尝试将 Mybatis 移植到了异步驱动上,让数据访问层的工作变得更简单一些。给个例子:

@Sql(User.class)
public interface CommonMapper {
   @Select(columns = "id,age,username")
   @OrderBy("id desc")
   @Page
   @ModelConditions({
           @ModelCondition(field = "username", criterion = Criterions.EQUAL),
           @ModelCondition(field = "maxAge", column = "age", criterion = Criterions.LESS),
           @ModelCondition(field = "minAge", column = "age", criterion = Criterions.GREATER)
   })
   void query(UserSearch userSearch, DataHandler<List<User>> handler);
}

上面是 mapper 接口定义,方法的最后一个参数因为异步的原因所以变成了一个回调,不同的是有很多注解来表达 sql,看到这些注解应该不难猜出 sql 语句吧。如果不喜欢你当然可以继续使用 mapper.xml 的方式来写 sql。

更多内容移步代码库吧~

3534 次点击
所在节点    分享创造
3 条回复
ZSeptember
2018-08-30 12:16:18 +08:00
Java 没有 async 写这个还是太麻烦了。
可以考虑使用 kotlin
tabris17
2018-08-30 14:23:20 +08:00
看到回调就头大一圈
twogoods
2018-08-30 14:57:07 +08:00
@ZSeptember 是啊,java 本身还没有协程,管你 rx 还是 future 那代码都受不了....看这个帖子的热度感觉 java 里玩异步还是冷门啊

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/484299

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX