Play Framework 2.5 整合 MyBatis
Play Framework 2.5 整合 MyBatis
芝麻糖葫芦 发表于6个月前
Play Framework 2.5 整合 MyBatis
  • 发表于 6个月前
  • 阅读 128
  • 收藏 0
  • 点赞 0
  • 评论 0

【腾讯云】如何购买服务器最划算?>>>   

因为不想用 Play 官方支持的一些 ORM 框架,笔者开始在网上查询 Play 怎么整合 MyBatis ,但搜出来的结果往往都是 Play 1 相关的资料,或者使用了已经过时的 API 。

最后还是从 MyBatis 整合 Guice 的教程中得到启发,发现 Play 2.5 整合 MyBatis 还是很容易的。

Play 使用 Guice 做依赖注入,只需要添加一个 MyBatisModule 的子类,就能轻松的将 MyBatis 整合到 Play 框架中。

首先在 build.sbt 添加依赖的库:

libraryDependencies ++= Seq(
  "org.mybatis" % "mybatis" % "3.4.4",
  "org.mybatis" % "mybatis-guice" % "3.9",
  "com.google.inject.extensions" % "guice-multibindings" % "4.0"
)

application.conf 数据源配置:

db.my-db {
  driver = org.postgresql.Driver
  url = "jdbc:postgresql://localhost:5432/postgres"
  username = "postgres"
  password = "postgres"
}

在 app 目录下创建 module 包 新建 PlayMyBatisModule 类:

package module;

import com.google.inject.Key;
import com.google.inject.Provider;
import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory;
import org.mybatis.guice.MyBatisModule;
import play.db.Database;
import play.db.NamedDatabaseImpl;

public class PlayMyBatisModule extends MyBatisModule {
    @Override
    protected void initialize() {
        environmentId("default");
        // 获取命名为 my-db 的数据源 Provider
        Provider<Database> provider = binder().getProvider(Key.get(Database.class, new NamedDatabaseImpl("my-db")));
        bindDataSourceProvider(() -> provider.get().getDataSource());
        bindTransactionFactoryType(JdbcTransactionFactory.class);
        // 配置 Dao 类所在的包
        addMapperClasses("com.morven.product.mapper");
    }
}

在 application.conf 中添加模块:

play.modules.enabled+= "module.PlayMyBatisModule"

注意:

  • 如果使用 XML 映射文件,要把 XML 文件放在 conf 目录下与 Dao 类所在包相同结构的路径。XML 放在 app 目录下不会编译到 classes 中,运行时会报找不到 Statement 错误。
  • 如果使用 IDEA 开发,在 conf 新建目录的时候也要注意,不要把包路径建成目录的名字。我和同事都犯过把 com/morven/product/mapper 路径,建成了名字是 "com.morven.product.mapper" 的一个文件夹,在 IDEA 中还看不出问题。

如果要使用多个数据源,可以参考下一篇博文 Play Framework 2.5 整合 MyBatis —— 多数据源

共有 人打赏支持
粉丝 3
博文 15
码字总数 3383
×
芝麻糖葫芦
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: