美文网首页
关于mybatis多数据库支持的思考

关于mybatis多数据库支持的思考

作者: 淡淡的小番茄 | 来源:发表于2021-05-22 12:29 被阅读0次

    正所谓Everybody knows SQL,不管是大数据,流计算,还是简单的CRUD,作为码农的你,工作已经离不开SQL。

    一切的一切似乎都慢慢归于传统,归于平庸。你不再需要写MR程序,写具体代码了,很多时候你只需要写一段SQL。可能你从一开始使用pig,到现在的hive、spark sql、flink sql,不管怎样我们似乎成为了编写SQL的程序员。

    言归正传,今天聊一聊,mybatis如何对多数据库的支撑。熟悉hibernate的同学,一定了解HQL。尽管SQL是有标准的,但是各数据库在实现的时候,是有很大差异的。比如:mysql分页你使用limit,而在oracle中分页使用的是rownum。针对这些的问题,hibernate自定义了一套面向对象的HQL语言,来屏蔽各数据库的SQL差异性。

    一般来说,我们进行代码分层的时候,是这么设计的:

    controller>>service>>dao

    dao层是数据访问层,我们可以针对不同的数据库,提供不同的实现类。你也可以使用策略模式,通过传入的策略标识,来明确访问哪个dao。这种动态dao场景一般是比较少见的。一般来说,一个项目明确后,使用什么数据库基本就确定下来了。比如:A项目使用mysql、B项目使用pg。

    使用mybatis orm配置大体的流程如下:

    大体思路整理如下:

    1、针对不同的数据库,编写不同的mapper文件

    mapper文件里面是针对当前数据库的sql,各mapper文件的命名空间都是一样的,指向dao。

    2、mapper扫描提供配置,根据不同的数据库类型加载不同的文件夹下的mapper文件。

    bootstrap.yml配置如下:

    mybatis:

      typeAliasesPackage: cn.cuiot.dmp.ruleengine.entity

      mapperLocations: 'classpath:mappe/mysql/*.xml'

      map-underscore-to-camel-case: true

    通过此配置项,微服务启动的时候进行固定目录扫描,比如:针对myql数据库,直接扫描mysql文件夹下面的mapper文件,那么项目启动后支持的就是mysql数据库。如果想支持其它数据库,更改相应的配置即可。

    相关文章

      网友评论

          本文标题:关于mybatis多数据库支持的思考

          本文链接:https://www.haomeiwen.com/subject/uivnjltx.html