这个DatabaseService
工具类提供了动态创建MyBatis SqlSession的能力,可以灵活地连接到不同的数据库,非常适合需要动态切换数据源的场景。
package com.cmes.immp.device.utils;import lombok.SneakyThrows;
import org.apache.commons.dbcp2.BasicDataSource;
import org.apache.ibatis.mapping.Environment;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.apache.ibatis.transaction.TransactionFactory;
import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;import javax.sql.DataSource;public class DatabaseService {// 数据源配置private static DataSource createDataSource(String url, String username, String password) {BasicDataSource ds = new BasicDataSource();ds.setDriverClassName("com.mysql.jdbc.Driver");ds.setUrl(url);ds.setUsername(username);ds.setPassword(password);ds.setInitialSize(10);ds.setMaxTotal(30);return ds;}@SneakyThrows// MyBatis会话工厂private static SqlSessionFactory createSqlSessionFactory(DataSource dataSource) {SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();sessionFactory.setDataSource(dataSource);sessionFactory.setTypeAliasesPackage("com.cmes.immp.device.repository");// 设置Mapper接口和XML位置sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mappers/**/*Mapper.xml"));return sessionFactory.getObject();}// 主业务方法public static SqlSession getSqlSession(String url, String username, String password) {// 配置本地数据库DataSource localDataSource = createDataSource(url,username,password);// 创建会话工厂SqlSessionFactory localSqlSessionFactory = createSqlSessionFactory(localDataSource);return localSqlSessionFactory.openSession();}}
注意事项
-
使用后必须关闭SqlSession