一、技术选型
springboot2.4+、mybatisplus3.4+、mysql5.7+、redis3.0+
二、编写目的
如果产品开发默认数据库采用mysql,但是当客户提出数据库需要采用Sqlserver或者Oracle以及其他国产数据库时,程序中就不能出现方言性的sql语句,否则程序在个性化的sql上做不到数据库兼容,因此要想产品能兼容多种数据类型,则在编码时就要考虑将个性化的方言sql抽离出来。
三、数据库兼容方案
实现思路:
(1)应用启动时要根据数据源知道当前链接的数据库类型,并存到全局变量
(2)根据数据库类型自动设置mybatis-plus分页方言
(3)个性化方言实现不要在主业务中耦合(如:if mysql … else if sqlserver…)
(4)个性化方言实现可以多种数据库类型复用(如mysql、mariadb可以用一种实现)
(5)个性化方言实现类能根据数据库类型自动注入
代码实现:
根据url获取数据库类型
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.toolkit.JdbcUtils;
/**
* 数据库类型
*/
public class Dialect {
private static DbType dbType = null;
private static final String DB_URL = "spring.datasource.url";
/**
* 获取数据库类型
* @return
*/
public synchronized static DbType getDbType(){
if(dbType == null){
String url = PropUtil.getValue(DB_URL);
dbType = JdbcUtils.getDbType(url);
}
return dbType;
}
}
自定义注解(实现方言实现的选择注入)文章来源:https://www.toymoban.com/news/detail-437724.html
import com.baomidou.mybatisplus.annotation.DbType;
import org.springframework.context.annotation.Conditional;
import java.lang.annotation.*;
/**
* Configuration annotation for a conditional element that depends on the dbType.
*
* @author luoxiaolin5
* @date 14:34 2023/4/12
*/
@Retention(RetentionPolicy.RUNTIME)
@Target({
ElementType.TYPE, ElementType.METHOD })
@Documented
@Conditional(DbTypeCondition.class)
public @interface ConditionalOnDbType {
/**
* condition dbType or {@code false} if it fails.
* @return the DbType
*/
DbType[] types() default DbType.OTHER;
}
注解条件实现文章来源地址https://www.toymoban.com/news/detail-437724.html
import com.baomidou.mybatisplus.annotation.DbType;
import org.springframework.context
到了这里,关于系统mysql、sqlserver数据库兼容方案的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!