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

2021-05-22  本文已影响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数据库。如果想支持其它数据库,更改相应的配置即可。

上一篇下一篇

猜你喜欢

热点阅读