Play Framework 2.5 整合 MyBatis

因为不想用 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 —— 多数据源

转载于:https://my.oschina.net/morven/blog/1477319

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值