mybatis 跨库查询 mysql

这篇文章资料来自于网络,对部分知识整理,这里只是记录一下,仅供参考。

跨库,表关联的查询,实现起来很简单:

    select 
        a.uid  
    from 
       ucenter.user a , database user_profile b 
   where a.uid = b.uid;

只要在表的前边加上库名即可。

这个是我项目中xml 中的一个例子,项目采用的是springmvc,持久层框架就是mybatis:

图片描述

项目的数据源配置:

图片描述

参考

https://blog.51cto.com/u_16175431/7250160

https://www.cnblogs.com/xiufengchen/p/11216952.html

滑动验证页面

### MyBatis 多个数据库连接表实现方案 #### 配置多数据源 为了使应用程序能够访问不同数据库中的表,首先需要配置多个数据源。这可以通过Spring Boot的`@ConfigurationProperties`注解来轻松完成,针对每一个额外的数据源创建相应的配置类[^1]。 对于每个数据源,都需要指定JDBC URL、用户名以及密码等必要参数。例如: ```java @Configuration public class DataSourceConfig { @Bean(name = "primaryDataSource") @Primary @ConfigurationProperties(prefix="spring.datasource.primary") public DataSource primaryDataSource() { return DataSourceBuilder.create().build(); } @Bean(name = "secondaryDataSource") @ConfigurationProperties(prefix="spring.datasource.secondary") public DataSource secondaryDataSource() { return DataSourceBuilder.create().build(); } } ``` #### 动态切换数据源 当应用涉及操作时,动态切换数据源成为必需。可以利用AOP切面编程技术,在执行特定业务逻辑之前自动设置当前线程使用的数据源名称。为此目的设计了一个名为`DynamicDataSource`的抽象类,并配合自定义注解`@TargetDS`用于标记服务层方法上的目标数据源别名[^3]。 ```java // DynamicDataSource.java import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource; public class DynamicDataSource extends AbstractRoutingDataSource { private static final ThreadLocal<String> contextHolder = new ThreadLocal<>(); public static void setDataSource(String dataSourceName) { contextHolder.set(dataSourceName); } protected Object determineCurrentLookupKey() { return contextHolder.get(); } } // TargetDS.java 自定义注解 @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface TargetDS { String value(); // 数据源key } ``` 接着是在事务管理器和服务接口中集成上述组件,确保每次调用都能正确指向预期的目标数据库实例。 #### 使用MyBatis Plus简化CRUD操作 考虑到MyBatis Plus提供了更简洁高效的持久化框架特性,比如内置分页插件和支持链式条件构造器(LambdaQueryWrapper),这些都极大地方便了开发者编写复杂的查询语句而不必担心SQL注入风险[^2]。 假设存在两个实体对象分别映射到不同的数据库表格上,则可以在各自的Mapper接口里声明基本的CURD函数签名即可享受自动化处理带来的便利性;而对于那些涉及到关联两张来自不同DBMS系统的记录的操作来说,建议采用先各自获取所需结果集再于内存层面做JOIN运算的方式以规避潜在的技术难题。 ```xml <!-- UserMapper.xml --> <mapper namespace="com.example.mapper.UserMapper"> <!-- 查询用户信息 --> </mapper> <!-- OrderMapper.xml --> <mapper namespace="com.example.mapper.OrderMapper"> <!-- 查询订单详情 --> </mapper> ``` 最后提醒一点,虽然理论上允许越异构型别的关系型数据库间建立联系(如MySQL与Oracle),但在实践中应尽可能保持一致性的存储引擎类型以便维护统一性和兼容度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值