现在接触的框架基本上都是些mybatis和mybatisplus的,所以主要是以他们两个为主
mybatis的连接方法相对于mybatisplus的要相对而言麻烦一点,如果一开始就想好了是两个不同库之间的数据展示,数据传输等时可以使用它,反之则不太推荐(有更好的方法除外,我现在了解到的就只是写一个config的class文件用来连接xml配置中的一些信息);
mybatis连接流程:
先写一个config类:
@Configuration
// basePackages为mysql dao文件的路径,sqlSessionFactoryRef指定SqlSession工厂bean
@MapperScan(basePackages = "com.aliy.loong.mapper.mysql", sqlSessionFactoryRef = "mysqlSqlSessionFactory")
public class MysqlDataSourceConfig {
//Value注解中的是xml配置的关于mysql的信息
@Value("${spring.datasource.mysql.url}")
private String url;
@Value("${spring.datasource.mysql.username}")
private String user;
@Value("${spring.datasource.mysql.password}")
private String password;
@Value("${spring.datasource.mysql.driverClassName}")
private String driverClass;
//对应mysql的mapper.xml文件路径(这就是不推荐已经写了一些功能的问题所在了,需要给这个配置的mysql库单独再写一个mapper包,另外之前写的那些也需要迁移)
private static final String MAPPER_LOCATION = "classpath:mappers/mysql/*/*.xml";
/**
* 配置mysql DataSource
*/
@Bean(name = "mysqlDataSource")
public DataSource mysqlDataSource() {
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(driverClass);
dataSource.setUrl(url);
dataSource.setUsername(user);
dataSource.setPassword(password);
return dataSource;
}
/**
* 配置事务管理器
*/
@Bean(name = "mysqlTransactionManager")
public DataSourceTransactionManager mysqlTransactionManager() {
return new DataSourceTransactionManager(mysqlDataSource());
}
/**
* 配置SqlSession工厂
*/
@Bean(name = "mysqlSqlSessionFactory")
public SqlSessionFactory mysqlSqlSessionFactory(@Qualifier("mysqlDataSource") DataSource mysqlDataSource)
throws Exception {
final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
sessionFactory.setDataSource(mysqlDataSource);
sessionFactory.setMapperLocations(
new PathMatchingResourcePatternResolver().getResources(MysqlDataSourceConfig.MAPPER_LOCATION));
return sessionFactory.getObject();
}
/**
* 配置SqlSessionTemplate
*/
@Bean(name = "mysqlSqlSessionTemplate")
public SqlSessionTemplate mysqlSqlSessionTemplate(@Qualifier("mysqlSqlSessionFactory") SqlSessionFactory sqlSessionFactory)
throws Exception {
return new SqlSessionTemplate(sqlSessionFactory);
}
yml配置文件中的数据库连接可以写成:(正常配置,只不过多了名字‘mysql’,和config文件中的Value注解关联起来)
spring: datasource: mysql: url: jdbc:mysql://127.0.0.1:5555。。 username: 0000 password: 0000 driverClassName: com.mysql.cj.jdbc.Driver
后续有需要再补充,当时用了结果卡住了,所以直接弃用,只是说有这么个方法,如果有大佬有相关的简单的解决办法希望@我
关于mybatisplus的
其实之前公司弄过一个相关的系统,但是去的晚,没怎么了解过,所以就只能从头摸索了
流程:
在已有配置好的mybatisplus依赖的下,再添加一个苞米豆的依赖文件(好像不是mybatisplus专属)
<!--使用mybatis-plus框架配置多数据源要用的依赖-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
<version>4.1.3</version><!--版本自选-->
</dependency>
2024.3.22补:如果之前用的是mybatis然后换成了mybatisplus,一定一定一定(重要的事说三遍)要把pom文件里的关于mybatis的依赖删掉,要不然会报错:org/mybatis/logging/LoggerFactory,找不到mapper的bean等等
yml配置文件:
spring: datasource: dynamic: primary: mysql #设置默认的数据源或者数据源组,默认值即为mysql strict: false #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源 datasource: mysql: #数据库链接驱动 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:2022 username: 0000 password: 2023 #使用什么数据源 # type: com.alibaba.druid.pool.DruidDataSource daMeng: url: jdbc:dm://127.0.0.1:0202 username: 0000 password: 0000 driverClassName: dm.jdbc.driver.DmDriver
默认是mysql也就是之前写的模块,这样就不用重新调整文件了,使用某个数据库例如daMeng时,只需要在创建好的mapper文件中添加@DS("daMeng")就可以了
(看到一些地方说也可以写在Sevice实现类里)
关于苞米豆框架的一些问题:
本框架只做 切换数据源 这件核心的事情,并不限制你的具体操作,切换了数据源可以做任何CRUD。
配置文件所有以下划线 _ 分割的数据源 首部 即为组的名称,相同组名称的数据源会放在一个组下。
切换数据源可以是组名,也可以是具体数据源名称。组名则切换时采用负载均衡算法切换。